データサイエンスろぐ

データサイエンスを学ぶ大学4年生の学習ブログ

ロジスティック回帰分析を勉強したのでわかりやすく解説した

概要

前回のブログでは、ロジスティック回帰分析を用いて乃木坂46の選抜を予想するということを行った。

dslog.hatenablog.jp

実際に手を動かすことで、ロジスティック回帰分析に慣れ親しむことはできた。

しかし、理論的な部分についてはほとんど理解できなかったため、その後、ロジスティック回帰分析の理論的なところを勉強した。

今回の記事では、ロジスティック回帰分析の理論的な部分について学習したことをまとめる。

最後には勉強になった記事をまとめた。

誰のための記事か

この記事が誰のための記事かというと、まずは自分自身のためである。

他人に説明するつもりで言語化することで、理解を深めたい。

また、これからロジスティック回帰分析を初めて学習する方の理解の助けになれば幸いである。

ロジステック回帰分析とは

ロジスティック回帰分析とは何か、一言で表すと、

ある事象が起きる確率を分析すること

である。

ロジスティック回帰分析では、ある事象が起きる確率を

p = \frac{1}{1+ exp[-(b_{1}x_{1}+b_{2}x_{2}+…+b_{n}x_{n})]}

という式で求めようとする。

ここで x_{i} は説明変数であり、b_{i} は偏回帰係数である。

平たく言うと、

偏回帰係数をどのように設定すれば、確率pを正しく求められるかを知りたい

というのがロジスティック回帰分析の気持ちである。

偏回帰係数をどのように設定すると良いかは、最尤法(さいゆうほう)を用いて求める。

シグモイド関数の導出

ロジスティック回帰分析では、ある事象が起きる確率を

p = \frac{1}{1+ \exp[-(b_{1}x_{1}+b_{2}x_{2}+…+b_{n}x_{n})]}

という式で求めようとする、ということだが、なぜこの形になるのだろうか?

上記のpの式について、b_{1}x_{1}+b_{2}x_{2}+…+b_{n}x_{n}z とおいた形をシグモイド関数と言うのだが、この形を導き出すために、

  • オッズ比
  • ロジット関数

が出てくる。

横文字が苦手な方は吐き気がするかもしれないが、全く難しくないので落ち着いて欲しい。

(横文字が苦手な自分は初めて見たとき錯乱しかけた)

オッズ比

オッズ比は、ある事象が起きる確率と起こらない確率の比である。

 オッズ比 = \frac{p}{1-p}

ある事象が起きる確率 p1に近ければ近いほどオッズ比も大きくなり∞に発散する。

(オッズ比と言わずに確率比と言えば良いのにと思うのは自分だけ?)

ロジット関数

なんだか高度な関数な予感がする名前だが、オッズ比に対数をとったものに過ぎない。

 ロジット関数 = \log\frac{p}{1-p}

ロジット関数は 0 から 1 の値をとる。

元々 0 から 1 の値をとる p について、0 から ∞ の値をとるオッズ比を考えて、さらにそれを 0 から 1 の値をとるロジット関数にするのは、なんだか不思議な気がするが、次の節でこの変換の意図(?)が明らかになる。

シグモイド関数

シグモイド関数を導き出すために、ロジット関数を z とおく。

z=\log\frac{p}{1-p}

ここから少しずつ変形を加えていく。

e^{z}=\frac{p}{1-p}

p=\frac{e^{z}}{e^{z}+1}

p=\frac{1}{1+e^{-z}}

これは、最初に言及したシグモイド関数である。

グラフで表すと以下のようになる。

f:id:DSlog:20200623153944p:plain
シグモイド関数

z0 より大きい場合は p0.5 より大きくなるので、事象が起きると予想される。

z0 より小さい場合は p0.5 より小さくなるので、事象は起きないと予想される。

ここで、


y=
\left\{
\begin{array}{}
1( x \geq 0)(事象が起きる) \\
0( x \lt 0)(事象が起きない)
\end{array}
\right.

とする。

このとき、ロジスティック回帰分析の気持ちとしては、いくつかの訓練データを与えたとき、事象が起きる( y=1 )場合、確率 p はできるだけ大きく、事象が起きない( y=0 )場合、確率 p はできるだけ小さく出力されるようなシグモイド関数であって欲しいわけだ。

最尤法を用いた学習

そこで次のような尤度関数を考える。

\prod_{i=1}^{n}p_{i}^{y_{i}}(1-p_{i})^{1-y_{i}}

p_{i} は、データi が事象に当てはまる確率であり、y_{i} は、データi が事象に当てはまるかどうかである。

この尤度関数が大きければ大きいほど、いくつかの訓練データを与えたとき、事象が起きる場合、確率 p はできるだけ大きく、事象が起きない場合、確率 p はできるだけ小さく出力されるようなシグモイド関数であると言える。

そのため、尤度関数 \prod_{i=1}^{n}p_{i}^{y_{i}}(1-p_{i})^{1-y_{i}} が最大になるようなパラメータを見つけることを目標とする。

しかし、このままでは積の形になっており、計算が難しい。

そのため、対数をとって和の形にする。


\log(\prod_{i=1}^{n}p_{i}^{y_{i}}(1-p_{i})^{1-y_{i}})


=\sum_{i=1}^{n}(y_{i}\log p_{i} +(1-y_{i})\log(1-p_{i}))

これを最大にするような z= b_{1}x_{1}+b_{2}x_{2}+…+b_{n}x_{n} を求める。

すなわち、重みやバイアス b_{1},b_{2},…b_{n} を求める。

ただしこれを解析的に求めるのは難しいため、ニュートン法を用いて近似的に求める必要がある。

勉強になった記事

勉強になった記事、わかりやすかった記事の一覧

qiita.com

qiita.com

ai-trend.jp

ai-trend.jp

udemy.benesse.co.jp