何となく機械学習を勉強しようと思って、手始めにパーセプトロンについてまとめます。
歴史
何ができるの?
が与えらたとき、2つのクラスのうちどちらかに分類
- 例えば、「血液の成分値
から、病気かどうか判定」
判定方法
パーセプトロンとして、例えば以下の関数 を定義します:
ここで、 は以下のように定義します:
は定数です。
先ほどの例「血液の成分値 から、病気かどうか判定」で説明するなら、
を
に代入し、
が非負なら
(陽性)
が負なら
(陰性)
判定器としてパーセプトロンを定義するためには、
トレーニングデータから を求める必要があります。
をどう求めるのか?
フレームワーク
の初期値セット(例えば0)
- 指定されたトレーニング回数だけ、以下を繰り返す
- 与えらたトレーニングデータの各データサンプル
に対し、以下を繰り返す
の判別結果と真のクラスが違うならば、
を更新して、良い感じに修正
- 与えらたトレーニングデータの各データサンプル
の更新方法
まず、文字を定義:
- パラメータ
<
,
:
番目のデータサンプルの真のクラスを表す
:
番目のデータサンプル
(便宜上定義)
各 はこのように更新される:
は次のように定義される:
この更新方法は巧いな、と思いました。
理由は、
- 現在の判別器の結果と真のクラスが一致するならば、更新しない
- 一致しないのならば、一致しやすくなるに
を増加(あるいは減少)して更新
です。もう少し言うと、判別器の結果と真のクラスの組合せは4通りあって、その4通り全ての場合も同じ更新式で表現できるからです。
注意
- データサンプルが線形分離可能でないと、
は更新され続けるため、トレーニング回数を与えておく