以下のサイトを参考に、ニューラルネットワークを実装してみる。
やりたいこと
ニューラルネットワークの実装
ニューラルネットワークの特徴
物体や信号を識別・分類する パターン認識に特に適している
実装する前の仮説
実装
このアルゴリズムにも、どうやら回帰と分類2つのバージョンがあるらしい。
回帰版
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from tensorflow.keras import models
from tensorflow.keras import layers
# データの読み込み
boston = load_boston()
X = boston['data']
y = boston['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
model = models.Sequential()
model.add(layers.Dense(64, activation='relu', input_shape=(X_train.shape[1],)))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(1))
model.compile(optimizer='rmsprop', loss='mse', metrics=['mae'])
model.fit(X_train, y_train)
mse, mae = model.evaluate(X_test, y_test)
print('MSE is', mse)
print('MAE is', mae)
分類版
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from tensorflow.keras import models
from tensorflow.keras import layers
from tensorflow.keras import utils
# データの読み込み
boston = load_wine()
X = boston['data']
y = utils.to_categorical(boston['target'])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
model = models.Sequential()
model.add(layers.Dense(64, activation='relu', input_shape=(X_train.shape[1],)))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(3, activation='softmax'))
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train)
crossentropy, acc = model.evaluate(X_test, y_test)
print('Categorical Crossentropy is', crossentropy)
print('Accuracy is', acc)
回帰版
MSE is 120.98555755615234
MAE is 7.729129791259766
分類版
Categorical Crossentropy is 11.392426490783691
Accuracy is 0.3333333432674408
わかったこと
- kNNは、日本語でk近傍法と呼ばれている
- kNNアルゴリズム(回帰版)を使えば、2つの出力結果が得られる(変数でそれぞれ、MSE,MAEと定義されたもの)
- 分類版では、回帰版に比べて使うモジュールが増える(utils)
- 回帰版と分類版で得られる値は、全然違う(どちらも数字ではあるが。)
- 使用しているモジュールから推測するに、回帰版・分類版ともに、実装手順は以下の通り。
- データの読み込み
- データの分割
- モデルの生成
- モデルの追加
- モデルの編集
- モデルのデータ変換
- モデルの評価
まとめ
これまで実装したアルゴリズムは、分類版と回帰版で得られる結果は似ていたが、(0~1の間の数字)今回のkNNでは桁数の違う結果が得られた。やはり、なんの結果を期待して実行しているかを理解しないで、やってもただのタイピングのお時間に終わってしまう。
後々調べるべきこと
- keras
- layers.Dense
- MSE
- MAE