機械学習に入門しています。
今回から、Perceptronを実装していきます。
設計
class Perceptron(object): def __init__(self): self.w_ = np.zeros(1 + X.shape[1]) def predict(self, X): """ 1.予測 """ def fit(self, X, y): """ 2.トレーニング """
1.予測 では、入力された特徴量(がくの長さ、花弁の長さ)を元に、 一致する(Iris-setosa)か不一致(Iris-versicolor)かを判定します。
2.トレーニング では、データ(今回は100件)を元に、重み(self.w_
)を更新していくことで、正しく予測できるようにします。
予測ロジックの実装
まず、予測のベースとなる評価値の計算ロジックです。
class Perceptron(object): ... # 総入力を計算 def net_input(self, X): return np.dot(X, self.w_[1:]) + self.w_[0]
X
は特徴量です。今回で言うと、[がくの長さ、花弁の長さ]の2列です。
np.dot
を利用していますが、分解するとこうです。
self.w_[0] + X[0] * self.w_[1] + X[1] * self.w_[2] + ...
つまり、self.w_[0]
は定数値、self.w_[1:]
は特徴量の各列に対する重みです。
次に、予測ロジックです。
class Perceptron(object): ... def predict(self, X): return np.where(self.net_input(X) >= 0.0, 1, -1)
net_inputで計算される評価値が0以上なら1(一致)、0未満なら-1(不一致)を返します。
あとがき
次回はトレーニングロジックを含む後半です。