ロジスティック回帰

当たり前のようで、何を言ってるかよくわからない部分があったので、調べなおしてみました。

二値分類

まずは一番簡単な二値分類の場合のロジスティック回帰について説明します.

 {D= \{x_i,y_i\}_{i=1}^d,x_i \in \mathbb{R}^m,y_i = \{-1,1\}} とする. これに対して,ある {\phi:\mathbb{R}^m \to \mathbb{R}^n} を用意する. 例えば自然言語処理だと,単語の分散表現等 そして、 {w_i \in \mathbb{R}^n} を用いて,

 { \displaystyle
p(y_i \mid x_i):= \frac{1}{1 + \mathrm{exp}(- y_i {}^tw \phi(x_i))}
}

と定めます.これは2つの事象 {y_i=1} {y_i=-1} となる確率が合計1であることから、 {\{-1,1\}} 上の確率(測度)を定めます. ですが、これは適当な確率であって、我々が本当に知りたい。 {x_i} に対して、そのラベルが {y_i} である確率を表しているわけてはありません.

そうすると上の式でできる限り,我々の知りたい確率に近づくようにとりたくなります.

このために,データの中で {x_i} に対し {y_i} に対して, {p(y_i \mid x_i)=1} にできるだけ近づけるようにパラメータ {w} を取りかえるというアイデアを採用します. なので,損失関数 {L(w):= - \sum p(y_i \mid x_i)} として,これが最小になる {w} を求めます。

こうやって確率を内部で求めるので回帰と名付けられているわけですが、実際に問題を解く場合はその確率が一定の値以上の場合は1,そうでない場合は-1と分けるので,二値分類になります.

パラメータの変更は例えば確率的勾配降下等で計算するのが速く、実用的になっているようです. また、損失関数も今のままの {L} は過学習しやすい傾向があることが多く、経験的に、正則化項と呼ばれる項 {C \vert w\vert^2} 等を加えるとよいようです.

余談

実際こうした方法の特徴はなんでしょうか。例えばSVMのような直線を引くのとどちらがわかりやすいのか... 指数関数を使うので、外れ値を無視しやすいとかそういう傾向があったりしないんでしょうかね。

多値分類

多値の場合も実質二値分類と同じです. 先ほどは {\{-1,1\}} 上の確率分布だったのを適当に {\{1,2,3,4,...\}} 上の確率分布だと思って求めればよいです.

その場合は

 { \displaystyle
p(y_i \mid x_i):= \frac{\mathrm{exp}(\lambda f(x_i,y_i))}{\sum_j \mathrm{exp}(\lambda f(x_j,y_j))}
}

とします. {f:\mathbb{R}^m \times \mathbb{R}^k \to \mathbb{R}^n} です. 後は損失関数も全て同じです.

// コードブロック