JDLA_E資格の機械学習「ロジスティック回帰」

#0　初めに

分類問題（クラス分類）で多用されるロジスティック回帰について学習する。
回帰という名前だが分類に使われる手法である。入力（説明変数）からどういう出力（結果）になるかの確率を計算して、その結果を使って二値分類、３つ以上の多項分類を行う手法である。
ある分類問題においては、ディープラーニングよりも有用らしいのでしっかり学習する。

またこれは、一般化線形モデルの一種と言われる。

##0.1 一般化線形モデルって

一般化線形モデルとは、正規分布以外の確率分布に使えるようにした線形モデルである。
例えば、入力に連続した実数を取らないモデル（服のサイズ）や、負の値を取らないモデル（体重、身長）とか。負の値が出てくると分類にならない。



#1 分類問題へのアプローチ

分類問題へのアプローチ方法はおおきく３つある。

1. 識別関数
1. 識別的アプローチ　
1. 生成的アプローチ

　識別関数は、入力ｘに対して、そのｘがどのクラス$C_k$に分類されるか分類結果$f(x)$を直接出力するアプローチです。サポートベクトルマシンがこれに分類される。
　識別的アプローチは、入力ｘに対して、そのｘがどのクラス$C_k$に分類されるかの確率$p(C_k | x)$をモデル化し、そのモデルを使って確率の高いクラスを分類結果として出力します。
３クラス分類なら、以下の2番のクラスが確立が高いので、これが正解ならこの確率が高まるようにモデル学習していくアプローチ。

~~~math
p(C_1 | \boldsymbol{x} ) = 0.1 \\
p(C_2 | \boldsymbol{x} ) = 0.7 \\
p(C_3 | \boldsymbol{x} ) = 0.2 \\
~~~

　生成的アプローチも、入力ｘに対して、そのｘがどのクラス$C_k$に分類されるかの確率$p(C_k | x)$をモデル化するのは、識別的アプローチと同様。しかし、手順が異なる。ベイズの定理を用いて、各クラスがどういう特徴をもったものであるかから、分類を行う。これは、画像生成に転用出来るアプローチである。


## 1.1 識別的アプローチ

xが与えられたとき、そのxがどのクラス$C_k$になるかの確率p
ある画像があたえれたときに、犬なのか、猫なのかとか

$p(C_k | \boldsymbol{x} )$を直接モデル化

$p(　猫クラス | \boldsymbol{画像} )$


$\boldsymbol{x}$がクラス$C_k$に割り当てられる確率が出せる。


###1.1.1 入力が実数の場合

線形回帰のときには、入力も出力も実数を扱ったが、２項分類の場合、出力としては０か１の分類でしかないので、入力　$\boldsymbol{x}^T$が実数全体を取って、実数全体を扱うのは計算コストがもったいない。

~~~math 
\boldsymbol{x}^T w \in R \\
y \in \Biggl( 0, 1 \Biggr) \\
~~~

このため、$\boldsymbol{x}^T w$を［０ー１］の世界にsigmoid関数でつぶしてやる。
sigmoidは、下のグラフのように、入力に対して出力を０から１の範囲に正規化する。

Sigmoid関数とは、

~~~math
\sigma(z) = \frac{1}{1+ e^{-az}}
~~~

上記のパラメータaを大きくしていくと、ステップ関数のような曲線になる。

![sigmoid.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1436941/9b84b109-5392-4897-90c0-533d0c233cc8.png)

###1.1.2 ロジスティック回帰モデル

前節のように、途中でSigmoid関数を利用した2値分類のためのモデルを、ロジスティック回帰モデルという。
なお、3項分類以上の場合は、多項ロジスティック回帰という。

![ロジスティック回帰.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1436941/9969523d-c202-9271-9dd2-7e606db998b7.png)


説明変数入力ｘ（画像）が与えられたときに、Y＝１（猫）になる確率は、

~~~math
P(Y = 1  | \boldsymbol{x} )= \sigma ( z ) \\
P(Y = 1  | \boldsymbol{x} ) = \sigma ( w_0 + w_1 x_1 + \cdots + w_m x_m)
~~~

$w$ はどうやって決めるかが問題。


###1.1.3 sigmoidの性質

sigmoid関数の性質として、微分しても、sigmoid関数として表すことができるというのがある。

~~~math
\sigma(z) = \frac{1}{1+ e^{-z}} = \Biggl( 1 + e^{-z} \Biggr)^{-1} \\
~~~

これを合成関数として微分すると、

~~~math
\frac{ d \sigma(z)}{dZ} = -1 \Biggl( 1 + e^{-z} \Biggr)^{-2} * e^{-z} * (-1) 　\\

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

左側は、sigmoid関数。右側もsigmoidで表すことが出来る。\\
= \sigma{(z)} * ( 1- \sigma{(z)} ) \\
~~~


###1.1.4 wの求め方（勾配降下法）

~~~math
P(Y   | \boldsymbol{x} )= \sigma ( z ) \\
P(Y   | \boldsymbol{x} ) = \sigma ( w_0 + w_1 x_1 + \cdots + w_m x_m)
~~~

$w$ はどうやって決めるかが問題。

出力$ y $ が０か１になる分類問題ということは、確率pで１、確率1-pで０という、離散確率分布（コイン投げ）を求めようとしていると言える。つまり、**ベルヌーイ分布**。
犬（Y=１）なのか猫（Y=０）なのかの確率は、

~~~math 
P(y) = p^y (1-p)^{1-y}　\\
~~~

$x_1$を与えたときに、$y_1$になる確率は、

~~~math
P(Y = y_1 | \boldsymbol{x_1} ) = p_1^{y_1} (1-p_1)^{1-y_1} \\
~~~

ここで、ロジスティック回帰の場合、入力$x_1$を入れたときに、出力が０か、１かになる確率関数pは、シグモイド関数 $\sigma (z)$である。
よって上記の式は

~~~math
P(Y = y_1 | \boldsymbol{x_1} ) = p_1^{y_1} (1-p_1)^{1-y_1} \\
P(Y = y_1 | \boldsymbol{x_1} ) = \sigma ( w^T x_1)^{y_1} ( 1- \sigma (w^T x_1))^{1-y_1} \\
~~~
と表すことが出来る。

入力ｘを入れたときにｙになる確率を求めるには、右辺のｗのパラメータが分かれば解くことが出来ると分かる。このｗを求めるために、線形回帰のときは、最小二乗法MSEを最小にすることを考えたが、ロジスティック回帰では、尤度を最大にすることを考える。

尤度（likelihood)とは、

尤度 ＝L(w)=（x=0のとき、y=0になる確率）×
　　　　　　　（x=1のとき、y=1になる確率）×
　　　　　　　　（x=2のとき、y=2になる確率）×
　　　　　　　　　　・・・・
　　　　　　　　　（x=nのとき、y=nになる確率）


~~~math
L(w) = P(y_1,y_2, \cdots, y_n | w_0, w_1, \cdots , w_m)
= \prod_{i=1}^n p_i^{y_i} ( 1- p_i)^{1-y_i}\\
= \prod_{i=1}^n \sigma ( w^T x_i)^{y_i} ( 1- \sigma (w^T x_i))^{1-y_i} \\

~~~

この尤度関数が最大になるときのｗを求めると、出力ｙが最も尤もらしい値として出力される。もっともらしい値を出すパラメータを求める式なので**尤度関数**という。

ところで、上記の式は確率の積を何度も繰り返すので、実装上は桁落ち等の懸念が発生する。
このため、足し算、引き算の式に変形する。この時に便利なのが対数をとってやることである。
また、ついでに、微分して最小になる点を求めるというようにするためにーもかけてやると、尤度関数は以下のようになる。これを交差エントロピー誤差関数という。

**交差エントロピー誤差**

~~~math
交差エントロピー誤差：E(w) = - log L (w) \\
= - \sum_{i=1}^n \Biggl( y_i log (p_i) + ( 1-y_i) log (1-p_i) \Biggr) \\ 

p_i = \sigma (w^T \boldsymbol{x_i} )= \frac{1} {1 + e^{w^T \boldsymbol{x_i}} } 
\\
~~~



~~~math
\frac{\partial E(w)}{ \partial w}
= - \sum_{i=1}^n  \frac{\partial E_i}{ \partial p_i} *
                 \frac{\partial p_i}{ \partial z_i} *
                \frac{\partial z_i}{ \partial w} \\
ここで\\
E_i = \Biggl( y_i log (p_i) + ( 1-y_i) log (1-p_i) \Biggr) \\
であり、\\
p_iのところは、\sigma　の微分なので、\\
\frac{\partial E(w)}{ \partial w}
= - \sum_{i=1}^n (\frac{y_i}{p_i} - \frac{1-y_i}{1-p_i})*
                 ( p_i (1-p_i))*
                 (\boldsymbol{x_i}) \\
= - \sum_{i=1}^n ( y_i - p_i ) \boldsymbol{x_i} \\

~~~


これで傾きが分かったので、勾配降下法で、すこしずつwを更新していく。

~~~math
w(k+1) = w^k - \eta \frac{\partial E(w)}{ \partial w} \\
= w^k + \eta \sum_{i=1}^n ( y_i - p_i ) \boldsymbol{x_i}
~~~





##1.2 生成的アプローチ

$p(C_k)$と、$p(\boldsymbol{x} | C_k)$ をモデル化し、その後、ベイズの定理を用いて、$p(C_k | \boldsymbol{x} ) $を求める。


ベイズの定理って、

~~~math
p(C_k | \boldsymbol{x} ) = \frac{p(C_k, \boldsymbol{x} )}{p(\boldsymbol{x} )} \\
 = \frac{p(\boldsymbol{x} | C_k) p(C_k)}{p(\boldsymbol{x} )} 
~~~

計算が面倒そうなので、識別的アプローチのほうが簡単そうだけど、
こうしたほうが、GANとかへの発展が可能。