こかげむら

ゲーム好きな理系大学生のお話

【備忘録】ロジスティック回帰のアルゴリズム

はじめに

ロジスティック回帰の処理の流れ,学習アルゴリズムについて勉強したので忘れないうちに書いておく

処理の流れ

処理の流れはADALINEやパーセプトロンと同じ
初めに総入力関数z

z = \sum w^Tx

総入力関数の計算結果をアクティベーション関数\phi(z)に入れる

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

最後にアクティベーション関数の計算結果をもとにアウトプットyを計算する

\dot{y} = \left \{ \begin{array}{l} 1 (\phi(z)>0.5のとき) \\ 0 (\phi(z) < 0.5のとき) \end{array} \right.

アクティベーション関数\phi(x)について

ロジスティック回帰のアクティベーション関数\phi(z)シグモイド関数と呼ばれており,このシグモイド関数の出力はサンプルがクラス1に属している確率であると解釈される.なのでアウトプットyを計算する時,0.5が閾値になっていて,xがクラス1に属する確率が50%以上ならy=1,50%未満ならy=0となっている.実際のところ,多くのアプリケーションでは,予測されるクラスラベルに関心があるだけでなく,クラスの所属関係の確率(アウトプットにする前のシグモイド関数の出力)を見積もることが特に有益になる.

モデルの学習

ロジスティック回帰では,モデルの学習時に尤度L(w)を最大化したいと考える

L(w)=P(y|x:w)=\prod_{i=1}^n P(y^{(i)}|x^{(i)};w)=\prod_{i=1}^n(\phi(z^{(i)})^{(i)}(1-\phi(z^{(i)}))^{1-y^{(i)}}

計算のしやすさから尤度Lの対数をとった対数尤度l(w)を定義し,これを最大化することを考える

l(w) = logL(w)=\sum_{i=1}^n (y^{(i)}log(\phi(z^{(i)}))+(1-y^{(i)})log(1-\phi(z^{(i)})))

勾配降下法を使ってwを更新したいので,l(w)の正負を反転させ,最大化問題を最小化問題に置き換える

max(l(w)) = min(-l(w))

↑がコスト関数J(w)となる

J(w)= \sum_{i=1}^n (-y^{(i)}log(\phi(z^{(i)}))-(1-y^{(i)})log(1-\phi(z^{(i)})))

重みwの更新式はADALINEと同じように勾配降下法を使って更新していく

w := w+\Delta w
\Delta w=-\eta\nabla J(w)=\eta\sum_{i=1}^n (y^{(i)} - \phi(z^{(i)}))x_j^{(i)}

この重みの更新式はADALINEと全く同じになっており,ADALINEとロジスティック回帰で異なる点はアクティベーション関数\phi(z)\phi(z)=zを使うか,\phi(z) = \frac{1}{1 + e^{-z}}を使うかの違いだけ.