機械学習に詳しくなりたいブログ

機械学習や数学について勉強した内容を中心に書きます。100%趣味です。記事は数学的に厳密でなかったり誤りを含んでいるかもしれません。ご指摘頂ければ幸いです。

ロジスティック回帰

概要

2クラスの問題を考えます。データ\mathbf{x}が与えられたとき、それがクラスC_1に属する確率は、確率的生成モデル - シグモイド関数で書いた通り、シグモイド関数を用いて


P(C_{1}|\mathbf{x}) = \sigma(\mathbf{w}^{T}\mathbf{x}) \tag{1}

と書けました。これを使ったモデルをロジスティック回帰と呼びます。回帰という名称ですが、分類のためのモデルです。

これによって求められるものは以下の図のようなイメージです。


平面上の赤、青の点が与えられたデータで、3次元で表した曲面がシグモイド関数、つまり式(1)の出力です。縦軸を確率として考え、0.5を閾値として赤、青どちらのクラスであるかを判別します。この識別境界は式(1)の係数\mathbf wによって決定されますから、これを最尤推定によって求めていきます。

最尤推定

最尤推定により最適なパラメータ\mathbf{w}を求めていきます。 P(C_{2}|\mathbf{x})=1-P(C_{1}|\mathbf{x})ですから、正解ラベルをt\in \{0,1\} とすれば、 P(C_{1}|\mathbf{x}) P(C_{2}|\mathbf{x})


\sigma(\mathbf{w}^{T}\mathbf{x})^{t_n}(1-\sigma(\mathbf{w}^{T}\mathbf{x}))^{1-t_n} \tag{2}

と、まとめて書けます。シグモイド関数の出力範囲は[0,1]ですから確率と解釈することができました。したがって、訓練データ(\mathbf{x}_1, \cdots , \mathbf{x}_N )(t_1, \cdots , t_N )が与えられたとき、尤度関数は


\displaystyle L(\mathbf{w}) = \prod_{n=1}^{N}\sigma(\mathbf{w}^{T}\mathbf{x}_n)^{t_n}(1-\sigma(\mathbf{w}^{T}\mathbf{x}_n))^{1-t_n} \tag{3}

となり、これを最大化する\mathbf{w}が求める解です。(尤度について参考:線形回帰を最尤推定で解く(尤度とは?)y_n=\sigma(\mathbf{w}^{T}\mathbf{x}_n)とし、積の計算を簡単にするためにL(\mathbf{w})の対数をとれば、


\begin{eqnarray*}
\displaystyle \ln L(\mathbf{w}) &=& \sum_{n=1}^{N} \ln y_n^{t_n}(1-y_n)^{1-t_n} \tag{4} \\
&=& \sum_{n=1}^{N} \left\{ t_n \ln y_n + (1-t_n)\ln(1-y_n) \right\} \tag{5}
\end{eqnarray*}

となります。ここでE(\mathbf{w}) = - \ln L(\mathbf{w})と定義すれば、求める解\mathbf{w}は、E(\mathbf{w})を最小にする\mathbf{w}です。なおE(\mathbf{w})は交差エントロピー誤差関数と呼びます。名前はどうでもいいですが、E(\mathbf{w})の最小値はシグモイド関数が入っていて解析的に求められません。そこで勾配法などのアルゴリズムを使うため、偏微分係数を求めます。y_n = \sigma(\mathbf{w}^{T}\mathbf{x}_n)=\sigma(g(\mathbf{w}))とすれば、合成関数の微分とシグモイド関数の微分より、


\begin{eqnarray*}
\displaystyle \frac{\partial E(\mathbf{w})}{\partial \mathbf{w}} &=& \frac{\partial E(\mathbf{w})}{\partial y} \frac{\partial y}{\partial g} \frac{\partial g}{\partial \mathbf{w}} \tag{6} \\
&=& -\sum_{n=1}^{N} \left[  \frac{t_n}{y_n} y_n(1-y_n)\mathbf{x}_n + \frac{1-t_n}{1-y_n}\left\{ -y_n(1-y_n) \right\} \mathbf{x}_n \right] \tag{7} \\
&=&  -\sum_{n=1}^{N} \left\{ t_n(1-y_n)\mathbf{x}_n - (1-t_n)y_n\mathbf{x}_n \right\} \tag{8} \\
&=&  -\sum_{n=1}^{N} ( t_n \mathbf{x}_n - t_n y_n \mathbf{x}_n  -y_n \mathbf{x}_n + t_n y_n \mathbf{x}_n ) \tag{9} \\
&=& \sum_{n=1}^{N}(y_n - t_n)\mathbf{x}_n \tag{10}
\end{eqnarray*}

となります。非常にすっきりとした形になりました。さて、これを用いて最急降下法により解を求めることができますが、最急降下法よりも効率の良いニュートン法というアルゴリズムを使うため、次はヘッセ行列を求めます。→ロジスティック回帰における交差エントロピー誤差のヘッセ行列

最終的な実験結果:ロジスティック回帰を最急降下法とニュートン法で解く

参考: * ニュートン法(多変数の場合)
* ベクトルをベクトルで微分の定義とヘッセ行列