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

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

ロジスティック回帰

概要

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


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

と書けました。これを使ったモデルをロジスティック回帰と呼びます。回帰という名称ですが、分類のためのモデルです。シグモイド関数の導出にあたっては、\mathbf xの条件付き確率などを用いて計算しましたが、解を求めるにはシグモイド関数に\mathbf xの線形関数を入れて最尤推定をすれば良いです。導出の背景で確率的生成モデルを考えたはずですが、結局じゃあどんな分布からデータが生成されるのかは考慮しなくても良いんですね、、。いろいろな分布を考えても\mathbf xの線形結合で表されるから*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}が求める解です。*2 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*}

となります。非常にすっきりとした形になりました。さて、これを用いて最急降下法により解を求めることができますが、最急降下法よりも効率の良いニュートン法というアルゴリズムを使うため、次はヘッセ行列を求めます。

次回: www.iwanttobeacat.com

まだ数値計算のための数式変形が続きますが、最終的な実験結果はこちらです。 www.iwanttobeacat.com