初めに
この記事は、大学院時代に機械学習や統計を扱う研究室にいた筆者?が、社会人になり使う機会もなく、せっかく学んだことを忘れるのも嫌なので記事数稼ぎもかねて再学習をするというものです。
しばらくは私が大学院時代に使用していた以下の本の内容をやっていこうと思います。
[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践
私が使っていたのは第2版ですが、すでに第3版が発行されているので、これから買おうという人は第3版をお勧めします。
内容
今回はパーセプトロンの実装をします。
理論:パーセプトロンとは
パーセプトロンは、人工知能と機械学習の分野において最も基本的なニューラルネットワークモデルの一つで、Frank Rosenblattによって考案されました。
人間の脳の神経細胞の働きを模倣しており、入力層と出力層からなる単純な構造を持ちます。
数理的には決定関数という関数でできており、入力データに対して重み付けを行い、その総和を計算する関数です。各入力には重みが割り当てられ、これらの重み付き入力の総和が計算されます。この総和が特定のしきい値を超えるかどうかで予測が決まります。
また、パーセプトロンは線形分離可能なデータセットにのみ適用可能ですので注意してください。
コードの実装
###データセットのロードと加工
今回パーセプトロンのトレーニングに使用するIrisのデータセットをロードし、トレーニング用とテスト用に加工します。
from sklearn import datasets
import numpy as np
iris = datasets.load_iris() #Irisデータセットをロード
X = iris.data[:, [2,3]] #3,4列目の特徴量を抽出
y = iris.target #クラスラベルを取得
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=1, stratify=y
) #トレーニングデータとテストデータに分割、全体の30%をテストデータに
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit(X_train) #トレーニングデータの平均と標準偏差を計算
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)
モデルのインポートと学習データのフィット
パーセプトロンモデルをsklearnからインポートし、データを学習させます。
from sklearn.linear_model import Perceptron
ppn = Perceptron(max_iter=40, eta0=0.1,random_state=1)
ppn.fit(X_train_std, y_train)
予測
テストデータを使用して予測を行い、誤分類の個数を算出します。
from sklearn.linear_model import Perceptron
ppn = Perceptron(max_iter=40, eta0=0.1,random_state=1) #n_iterでなくmax_iter
ppn.fit(X_train_std, y_train)
y_pred = ppn.predict(X_test_std)
print('Misclassified samples: %d' % (y_test != y_pred).sum()) #テストと予測が一致しない=誤分類の個数を表示
output
ーーーーーーーーーーーーーーーーーーーーーーーーー
Misclassified samples: 1
正解率を算出します。
from sklearn.metrics import accuracy_score
print('Accuracy: %.2f' % accuracy_score(y_test, y_pred))
output
ーーーーーーーーーーーーーーーーーーーーーーーーー
Accuracy: 0.98
終わりに
こんな感じにパーセプトロンの実装ができました。