ロジスティック回帰の概要 Python機械学習プログラミング第三章

第三章まとめ

全体の構成

f:id:ty070809390:20190504161549p:plain

第三章のマインドマップ5/2

f:id:ty070809390:20190504162640p:plainPerceptronから、コスト関数の導入で進化したAdalaineをさらに発展させたロジスティック回帰の実装の章。

ロジスティック回帰とは

前回までの、Adalineでは、活性化関数としてΦ(z) = z を用いていたが、ロジスティック回帰では、シグモイド関数を用いる。シグモイド関数は確率であるので、ある予測したクラスラベルでどのくらいの精度で予測されたかがわかる。

学習

総入力 → 活性化関数(シグモイド関数)→ 閾値関数

 

シグモイド関数が確率?

ロジット関数

ロジット関数

 logit(p(y = 1| \vec{x})) = log_e(\frac{p}{1-p})

 

  \frac{p}{1-p}は、オッズ比と呼ばれる。

オッズ比とは、ある事象に対して、それが予想の時の確率と予想してない確率の比。

今回の場合 y(x) = 0, 1とするとこうなる。

  0 1
x₁ p 1-p

 

参考 オッズ比の説明は以下がわかりやすかった。

オッズ比の分かりやすい説明

http://  https://winlabo.com/post-1531

 

 ロジット関数の値域は、マイナス無限から無限なので、入力と重みの積とすることが可能で、

 logit( P(y = 1 | \vec{x})) = \vec{x} \cdot \vec{w} = z

となる

このロジット関数の逆関数シグモイド関数である。

 \Phi(z) = \frac{1}{1+e^(-z)}

つまり、ロジット関数をpについて解いたものである。pは確率であるので、この関数は、シグモイド関数は確率なのである。実際、その値域は、0< Φ(z)<1となる。

f:id:ty070809390:20190504173316p:plain

 重みの学習

重みの学習は、Adalineとは違い(本質的には同じ、後述する)、尤度を用いて行う。

尤度とは、結果から見たところの条件付確率の条件のもっともらしさである。

 L(\vec{w}) = P( \vec{y} | \vec{x}; \vec{w})  = \Pi P(y^i | x^i;\vec{w}) =  \Pi \phi (z^i)^{y^i} (1 - \phi (z^i) )^{1 - y^i }

最後の変形は、今回の場合2クラス分類なので、y = 1 の時とy = 0で選択できるようになっているからである。

この式の尤もらしさの最大化を行いたいが、後の重みの更新の時に、微分するのもかねて、和の形にしておくと便利なので対数をとる。

 l(\vec{w}) = logL(\vec{w}) = \Sigma [y^i log(\phi (z^i)) + (1 - y^i)log(1 - \phi (z^i) ) ]

 コスト関数は最小化したいのでマイナスをかけて、

 J(\vec{w}) = \Sigma [y^i log(\phi (z^i)) + (1 - y^i)log(1 - \phi (z^i) ) ]

 

一つのトレーニングでは、

 J(\phi (z^i), \vec{x}; \vec{w}) = \Sigma [y^i log(\phi (z^i)) + (1 - y^i)log(1 - \phi (z^i) ) ]

となるので、y = 0,y  = 1 の時それぞれの確率の対数になることが分かった。

次回は、バリアンスとバイアスについて!

 

 

 

 

Python機械学習プログラミングの他の記事はこちら↓

yosuke-programing.hatenadiary.com

 Amazonはこちら↓

[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)

[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)