ぺーぱーの日々

上機嫌でいること、夢中でいることを目標に、今日も色んなことに手を出します。

MENU

機械学習のアルゴリズム実装(ニューラルネットワーク)

以下のサイトを参考に、ニューラルネットワークを実装してみる。

機械学習アルゴリズムの分類と実装まとめ - Qiita

やりたいこと

ニューラルネットワークの実装

ニューラルネットワークの特徴

物体や信号を識別・分類する パターン認識に特に適している

実装する前の仮説

  •  

実装

このアルゴリズムにも、どうやら回帰と分類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