書籍がSVMのIRIS分類なので | python3Xのブログ

python3Xのブログ

ここでは40代、50代の方が日々の生活で役に立つ情報や私の趣味であるプログラム、Excelや科学に関する内容で投稿する予定です。

Kerasでモデルを構築し、これを行いたいと思います

データを少し変更しています

元データはアヤメの種類をその名前で分類していたのですが

当然のことながら、これを 0、1、2 の数値に変更しました

 

①ゴールの決定:がく片や花びらの長さと幅から、アヤメの品種を分類する

②必要なデータを収集用意する

③不要な特徴量を削除し、かつ正規化を行う

④-1 機械学習の手法を選択する(scikit-learnのSVM(サポートベクターマシン)を選択)

④-2 データに応じたパラメータ(がく片や花びらの長さや幅)を指定する

④-3 データを学習し、モデルを構築する

⑤モデルを評価する

⑥十分な精度でなければ、④に戻る

⑦業務などで活用する

 
コード
import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.utils import np_utils
from sklearn import preprocessing
 
model = Sequential()
model.add(Dense(16, activation='relu', input_shape=(4, )))
model.add(Dense(32, activation='relu'))
model.add(Dense(16, activation='relu'))
model.add(Dense(3, activation='softmax'))
model.compile(loss = 'sparse_categorical_crossentropy', optimizer = 'adam', metrics = ['accuracy'])
iris_data = pd.read_csv("./data/iris.csv", encoding="utf-8")
 
# ラベルと入力データに分離する
y = iris_data.loc[:,"Name"]
x = iris_data.loc[:,["SepalLength","SepalWidth","PetalLength","PetalWidth"]]
 
# データの標準化
x = preprocessing.scale(x)
#y = np_utils.to_categorical(y)
 
# 学習用とテスト用に分離する
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2, train_size = 0.8, shuffle = True)
model.save('model.hdf5')
 
# モデル訓練
model.fit(x_train, y_train, nb_epoch=50, batch_size=1, verbose=1)
Epoch 50/50
120/120 [====] - 0s 3ms/step - loss: 0.0324 - accuracy: 0.9917
# モデル評価
# モデル評価
from keras.models import load_model
model = load_model('model.hdf5')
loss, accuracy = model.evaluate(x_test, y_test, verbose=0)
print("Accuracy = {:.2f}".format(accuracy))
Accuracy = 1.00 # 混同行列で確認する from sklearn.metrics import confusion_matrix
predict_classes = model.predict_classes(x_test, batch_size=1)
print(confusion_matrix(predict_classes, y_test))
[[11  0  0]
[ 0 11  0]
[ 0  0  8]]