マイノート

いろいろ勉強したことをまとめていきます

MENU

【ディープラーニング】kerasで多クラス分類

kerasで多クラス分類

前回

前回は2クラス分類をやりました。

www.tcom242242.net

今回は多クラス分類をやりたいと思う。

やりたいこと

irisデータセットをsklearnから取得して分類してみる。

irisデータセット

sklearnのirisデータセットには3種類の花の萼の長さと幅、花弁の長さと幅のデータがある

iris = datasets.load_iris()
x = iris.data
y = iris.target 

print(x[0]) # => array([ 5.1,  3.5,  1.4,  0.2]) 0番目の花の情報
print(y[0]) # => 0 # 0番目の花は0クラス


コード

from sklearn import datasets
from keras.models import Sequential
from keras.layers import Dense,  Activation
from keras.optimizers import SGD
import numpy as np
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from keras.utils import np_utils

model = Sequential()
model.add(Dense(10, input_dim=4))    # 入力層4ノード, 隠れ層に10ノード, 全結合
model.add(Activation("sigmoid"))    # 活性化関数はsigmoid
model.add(Dense(3)) # 出力層3ノード,全結合
model.add(Activation("sigmoid"))

model.compile(loss="binary_crossentropy",   # 誤差関数
              optimizer="adam",     # 最適化手法
              metrics=['accuracy'])

iris = datasets.load_iris() # データを取得
x = iris.data   # 花の特徴量、長さなど
y = iris.target # 0, 1, 2のラベル
x = preprocessing.scale(x)  # 標準化

y = np_utils.to_categorical(y)  # one-hotエンコード.例) 1 => [0, 1, 0]
x_train, x_test, y_train, y_test= train_test_split(x, y, train_size=0.8)    # 教師データとテストデータに分割

model.fit(x_train, y_train, nb_epoch=1000, batch_size=1) # 学習

# 学習できているか見てみる
print("==============TEST=====================")
print("-----------correct answer-----------")
print(y_test[0])
print(y_test[10])
print("-----------predict answer-----------")
print(np.round(model.predict(x_test)[0]))
print(np.round(model.predict(x_test)[10]))

結果

省略

Epoch 998/1000
120/120 [==============================] - 0s - loss: 0.0249 - acc: 0.9889         
Epoch 999/1000
120/120 [==============================] - 0s - loss: 0.0249 - acc: 0.9889         
Epoch 1000/1000
120/120 [==============================] - 0s - loss: 0.0247 - acc: 0.9889         
==============TEST=====================
-----------correct answer-----------
[ 0.  1.  0.]
[ 0.  0.  1.]
-----------predict answer-----------
[ 0.  1.  0.]
[ 0.  0.  1.]

感想

活性化関数や誤差関数をもう少ししっかり変えれば、

もう少しうまく学習できる気がする。

参考

以下のサイトは非常にわかりやすいです。大いに参考にさせていただきました。 ありがとうございます。

aidiary.hatenablog.com