スマレジエンジニアyushiのブログ

スマレジエンジニアのブログ

【機械学習入門 #4】Perceptron実装前半 予測ロジック

機械学習に入門しています。

yushi-dev.hatenablog.com

今回から、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(不一致)を返します。

あとがき

次回はトレーニングロジックを含む後半です。