【Python】アヤメの分類器を作ってみた【機械学習】


こちらの講座を参考にしながらアヤメの分類器を作ってみたので備忘録です。
[初心者必見!Pythonでニューラルネット・深層学習を完全攻略]

環境

Mac OS Catalina 10.15.7
Spyder 4.1.4
Anaconda 3
Python 3.7.9
Keras 2.3.1

やったこと

作成したコードです。

iris.py
from sklearn.datasets import load_iris#アヤメのデータを取得 
iris = load_iris() 
from sklearn.model_selection import train_test_split as split #データセットを分けるツール 
X_train,X_test,y_train,y_test = split(iris.data, iris.target, train_size = 0.8) #データセット のうち80%を学習用、20%を実験用に分ける 
import keras 

#ニューラルネットの作成 
 #Dense:ニューラルネット定義クラス 
 #Activateion:活性化関数クラス 
from keras.layers import Dense, Activation 
model = keras.models.Sequential()#モデルを作る入れ物を作成 
model.add(Dense(units =32,input_dim = 4 )) #中間層32個、入力層4個 
model.add(Activation('relu'))#活性化関数Relu 
model.add(Dense(units = 3))#出力層:3個 
model.add(Activation('softmax'))#活性化関数softmax 

#コンパイル 
model.compile( 
loss = 'sparse_categorical_crossentropy', optimizer = 'sgd', metrics = ['accuracy']) 

#学習の実行 
model.fit(X_train,y_train,epochs = 100)#100回繰り返し学習 

#評価の実行 
 #テストデータの正答率をチェックする 
score = model.evaluate(X_test,y_test,batch_size = 1)#scoreにはloss(損失) ,accuracy(精度)のベクトルが入る 
#参考:https://aidiary.hatenablog.com/category/Keras?page=1478696865 
accuracy = score[1] 
print('精度 ="',str(accuracy))#printで数値と文字列を組み合わせるには、数値をstr()で文 字列にする 
#参考:https://www.javadrive.jp/python/string/index9.html 

 #1個のデータだけチェックする 
import numpy as np 
x = np.array([[5.1,3.5,1.4,0.2]])#X_trainと同じ形式の配列を作成 
r = model.predict(x)#確率のベクトル 
print('ラベルごとの確率=',r) 
print('一番確率の高いラベル=',r.argmax())#argmax()はベクトルの中で一番大きいラベルを返す 

#データを出力する 
json_string = model.to_json() 
#モデルをインポートしたい場合 
#from keras.models import model_fromjson #model = model_from_json/json_string) 
#学習パラメータの保存 
#先にh5pyをインストールしておく 
model.save_weights('param.hdf5') 
#読み込むとき 
#model.load_weight('param.hdf5')  

実行結果

精度 =" 0.9666666388511658
ラベルごとの確率= [[0.9405338  0.05598015 0.00348606]]
一番確率の高いラベル= 0