Closed3

機械学習

おしぼりおしぼり

単層パーセプトロンの理論と実装

単層パーセプトロンのアルゴリズムの理解をした上で,書籍に従って実装する.

理論

重みベクトル W と特徴量ベクトル X の内積 W^TX がスカラー \hat{y} になる.
\hat{y} が正解 y に近づくように重みを更新する.

実装

実装前は以下の点がよく分からなかった.

  • どのように重みを更新すれば \hat{y} の値が y に近づくのか?
  • numpyやpandas, sklearnなどのツールの利用方法

まず,重みの更新は以下の式で表される.

w_{j} = w_{j} + \Delta w_{j}
\Delta w_{j} = \eta (y^{(i)} - \hat{y}^{(i)}) x_{j}^{(i)}

この式を理解するために以下のようなシンプルなケースを考える.

\hat{y}^{(i)} = -1, y^{(i)} = 1, \eta = 1

x_{j}^{(i)} が0.5で誤って-1に分類したとき, \Delta w_{j} は以下のように更新される.

\Delta w_{j} = (1 - (-1)) 0.5 = 1

Pythonで実装すると以下のようなコードになる.これで重み更新のイメージはそれなりに掴めた.

perceptron.py
update = self.eta * (target - self.predict(xi))
self.w_[1:] += update * xi

次にツール郡の使い方に関するメモを列挙する.

  • numpy
    • dot(x, y)で内積計算
    • arccos(vec) で逆余弦関数
    • np.linalg.norm はベクトルのノルムを計算
    • where(condition, x, y)はconditionがTrueなら値をxに,Falseならyに置換
    • 単位ステップ関数はwhereを使うことで実装される
  • pandas
  • read_csvでCSVの読み込み
おしぼりおしぼり

ADALINE

重みの更新を単位ステップ関数ではなく線形活性化関数に基づいて行う.単層パーセプトロンでは予測値と正解の値を比較していたが,ADALINEでは線形活性化関数の出力値(連続値)と正解の値を比較する.線形活性化関数になったことでコスト関数が微分可能になり,勾配が得やすくなる(そしたら勾配降下法とかが使える).重みの変化 \Delta w は以下のような式で表される( \Delta J(w) は勾配である.よって,以下の式は負の勾配に学習率をかけたものである ).

\Delta w = -\eta \Delta J(w)
おしぼりおしぼり

標準化

勾配降下法は特徴量のスケーリングの恩恵を受けるアルゴリズムのひとつであり,スケーリング手法として 標準化 を採用できる.統計のとても基礎的な内容である.

標準化のイメージは ここ が分かりやすい.

確率的勾配降下法

通常の(バッチ)勾配降下法は訓練データが大規模になるほど勾配の計算コストが重くなる.このようなケースでは確率的勾配降下法が使われることがある.

このスクラップは2023/11/18にクローズされました