nanoseeingの技術系ブログ

機械学習・競プロなど。アウトプットが目的。

ロジスティック回帰【機械学習アウトプット第5回】

ロジスティック回帰とは

回帰と名前がついているが、実際には(2値)分類問題。 どのクラスに所属するかの確率を計算することで分類する。

単回帰・重回帰分析と基本構造は同じで、

 n次元の説明変数: \boldsymbol{x} = [x_0= 1, x_1, x_2, ... x_n]
目的変数: \boldsymbol{y} = [y_1, y_2, ... y_n] (y_i = [0, 1])
パラメータ: \boldsymbol{w} = [w_0, w_1, w_2, ... w_n]
予測値:\boldsymbol{\hat y} = f(\boldsymbol{w^{T}x}) (0 ≦ \hat {y}_{i} ≦ 1)


を用いて、 \boldsymbol{y} \boldsymbol{\hat y}の誤差を 最小化するような\boldsymbol{w}を求めることが目的である。 なお、 x_0=1としたのはバイアスを表している。

ただし、予測値\boldsymbol{\hat y}を0から1の確率値に収めるために、関数fを噛ませている点に注意。

そして、このfは、

 f(x) = \dfrac{1}{1 + e^{-x}}


で表される、シグモイド関数と呼ばれるやつである。

なぜシグモイド関数が用いられるか

「オッズ」という概念がある。競馬とかでオッズ○倍とかいう時のオッズである。 オッズは単に勝敗の比率のことで、勝利確率を pとすると、

 \dfrac{p}{1-p} (p:1-p)


で表される。

これにlogをとった、

 logit = log \dfrac{p}{1-p}


を考える(ちなみにlogをとる理由は、勝ちと負けの尺度を揃えるためなどの理屈がある)。

すると、入力pの範囲は 0 ≦ p ≦ 1、出力logitの範囲は実数全体であるから、 logitの逆関数を考えると、実数全体を確率値0から1に収めることができ、都合が良い。

その逆関数シグモイド関数

 f(x) = \dfrac{1}{1 + e^{-x}}


である。

パラメータの推定方法

単回帰・重回帰分析のときは、損失関数として最小二乗誤差を用い、 損失を最小にすることを目的としてパラメータを推定した。

ロジスティック回帰の場合には、最尤推定を用いてパラメータを推定する。

導出は省くが、最尤推定に基づいて計算した、対数尤度関数は下記で表される。

 logL(\boldsymbol{w}) =  \sum_{i=1}^{n} {y}_{i}log(\hat y_i) + (1-y_i)log(1 - \hat y_i)


この対数尤度を最大化するようなパラメータ \boldsymbol{w}を求めるのが、最終的な目標である。

ただし、解析的に解くことは不可能なので、ニュートン法などの近似的に解を求めるアルゴリズムが必要。

なお余談だが、

 \sum_{i=1}^{n} {y}_{i}log(\hat y)


この式は交差(クロス)エントロピーなどと呼ばれ、 情報理論でいう、平均情報量などの概念と結びついているところが興味深い。

実装

次回で。