DeepRunning　～Level4.3.1～

#Level４．機械学習講座（理論と実践）
##4-3.ロジスティック回帰モデル
###4-3-1.分類問題と扱うデータ
　　●分類問題（クラス分類）
　　　ある入力（数値）からクラスに分類する問題
　　●分類で扱うデータ
　　　入力　･･･　各要素を説明変数、または特徴量と呼ぶ。
　　　　　　　　　m次元のベクトルで、m=1の場合はスカラ。
　　　出力　･･･　目的変数。0か1の値。

　　【説明変数】$x=(x_1,x_2,･･･,x_m)^T \in \mathbb R^m$
　　【目的変数】$y \in {(0,1)}$

###4-3-2.ロジスティック回帰モデル
　　●分類問題を解くための教師あり機械学習モデル（教師データから学習）
　　●入力とm次元パラメータの線形結合をシグモイド関数に入力
　　●出力はy=1になる確率の値（←シグモイド関数の出力範囲）

　　【パラメータ】

```math
w=(w_1,w_2,･･･,w_m)^T \in \mathbb R^m
```

　　【線形結合】

```math
\hat y = w^Tx + w_0 = \sum^{m}_{j=1} w_jx_j + w_0\
```
###4-3-3.シグモイド関数
　　●シグモイド関数
　　　入力は実数、出力は0～1の値（確率を表現）
　　　単調増加する関数
　　●パラメータの変化でシグモイド関数の形が変化
　　　$a$が増加する　⇒　$x=0$付近で曲線の勾配が増加する。
　　　$a$を極めて大きくする　⇒　単位ステップ関数に近づく。

　　【シグモイド関数】

```math
σ(x) = \frac{1}{1+exp(-ax)}
```
　　●シグモイド関数の性質（良い性質）
　　　シグモイド関数の微分は、シグモイド関数自身で表現できる。
　　　尤度関数の微分をするときは、この事実で計算が簡単になる。

```math
\begin{align}
\frac{\partial σ(x)}{\partial x} &= \frac{\partial}{\partial x}\Bigl(\frac{1}{1+exp(-ax)}\Bigr)\\
&=(-1)・\{1+exp(-ax)\}^2 ・exp(-ax)・(-a)\\
&=\frac{a \space exp(-ax)}{\left\{1+exp(-ax)\right\}^2}=\frac{a}{1+exp(-ax)}・\frac{1+exp(-ax)-1}{1+exp(-ax)}\\
&=aσ(x)(1-\sigma(x))
\end{align}
```

　※機械学習では、モデルを決めて、パラメータを推定する。
　　必ず微分が入るので、計算が簡易になるほうが優位である。

###4-3-4.シグモイド関数の出力をY=1になる確率に対応させる
　　●データの線形結合を計算
　　●i番目のデータを与えた時に、シグモイド関数の出力をi番目のデータがY=1となる確率

　　【求めたい値】$P(Y=1|x)=σ(w_0+w_1x_1+･･･+w_mx_m)$

　　　⇒説明変数の実現値が与えられた時にY=1となる確率
　　　　$w_0+･･･$は、データのパラメータに対する線形結合

　　【数式】$P(Y=1|x)=σ(w_0+w_1x_1)$
　　　　　　($w_0$：切片、$w_1$：回帰係数、$x_1$：説明変数)

###4-3-5.最尤推定
　　●様々な確率分布が存在する
　　　･･･　正規分布、ｔ分布、ガンマ分布、一様分布、ディリクレ分布などなどなど。
　　●ベルヌーイ分布
　　　数学において、確率pで1、確率1-pで0を取るような離散確率分布
　　　⇒よくあるのがコイントスによる表裏の出現率

　　【Y=0とY=1になる確率をまとめて表現】
　　　$P(y)=p^y(1-p)^{1-y}$

　　●ベルヌーイ分布のパラメータの推定
　　　データからそのデータを生成したであろう尤もらしい分布（パラメータ）を推定したい。
　　　⇒“最尤推定”

　　●同時確率
　　　あるデータが与えられた時、それが同時に得られる確率。
　　　確率変数は独立であることを仮定すると、それぞれの確率の掛け算となる。
　　　⇒コインの表裏が出る確率･･･独立している結果だから掛け算で良い。

　　●尤度関数
　　　データは固定して、パラメータだけ変化させる。
　　　尤度関数を最大化するようなパラメータを選ぶ推定方法のことを“最尤推定”という。

　　【1回の試行で$y=y_1$になる確率】$P(y)=p^y(1-p)^{1-y}$
　　【n回の試行で$y_1～y_n$が同時に起こる確率】

```math
P(y_1,y_2,･･･,y_n;p)=\prod_{i=1}^{n}p^{y_{i}}(1-p)^{1-y_{i}}
```

　　【$y_1～y_n$のデータが得られた際の尤度関数】

```math
P(y_1,y_2,･･･,y_n;p)=\prod_{i=1}^{n}p^{y_{i}}(1-p)^{1-y_{i}}
```

　⇒持てるデータを固定し、パラメータ$\hat p$を求めてあげる。

###4-3-6.ロジスティック回帰モデルの最尤推定
　　●確率$p$はシグモイド関数となる。推定するパラメータは重みパラメータとなる。

```math
P(Y=y_1|x_1)=p_1^{y_1}(1-p_1)^{1-y_1}=\sigma(w^Tx_1)^{y_1}(1-\sigma(w^Tx_1))^{1-y_1}\\
P(Y=y_2|x_2)=p_2^{y_2}(1-p_2)^{1-y_2}=\sigma(w^Tx_2)^{y_2}(1-\sigma(w^Tx_2))^{1-y_2}\\
・・・\\
P(Y=y_n|x_n)=p_n^{y_n}(1-p_n)^{1-y_n}=\sigma(w^Tx_n)^{y_n}(1-\sigma(w^Tx_n))^{1-n_1}
```

　　　$w^T$は線形回帰の$w$で、$w$が決まると$p$が求められ、確率が求められる。

　　●尤度関数の式

```math
\begin{align}
P(y_1,y_2,･･･,y_n|w_0,w_1,･･･,w_m)&=\prod_{i=1}^{n}p_i^{y_{i}}(1-p_i)^{1-y_{i}}\\
&=\prod_{i=1}^{n}\sigma(w^Tx_i)^{y_i}(1-\sigma(w^Tx_i))^{1-y_i}\\
&=L(w)
\end{align}
```
　⇒$L(w)$に$log$をかけてあげたものを最大化する！！

###4-3-7.尤度関数を最大とするパラメータを推定
　　●対数を取ると微分の計算が楽になる（同時確率の積は和で、指数は積の計算に変換）
　　●**対数尤度関数が最大になる点と、尤度関数が最大になる点は同じ**
　　　（疑問点であるが、数学的に一致することが確認済）
　　●尤度関数を最大化するのだが、「尤度関数にマイナスをつけ最小化」し「最小二乗法の最小化」とする。

```math
\begin{align}
E(w_0,w_1,･･･,w_m)&=-logL(w_0,w_1,･･･,w_m)\\
&=-\sum_{i=1}^n\{y_ilog p_i+(1-y_i)log(1-p_i)\}
\end{align}
```

　　※$=0$で解こうとしても解けない。
　　　勾配降下法を利用する。

　　●勾配降下法（Gradient descent）
　　　反復学習でパラメータを逐次的に更新するアプローチ
　　　**$\eta$は学習率**と呼ばれるハイパーパラメータで、モデルの収束しやすさを調整

　　　【線形回帰モデル（最小二乗法）】
　　　　　MSEのパラメータに関する微分が0になる値を求めることが可能
　　　【ロジスティック回帰モデル（最尤法）】
　　　　　対数尤度関数をパラメータで微分して0になる値を求めるが、
　　　　　解析的にこの値を求めるのは困難である。

```math
w(k+1)=w^k-\eta\frac{\partial E(w)}{\partial w}
```

　　●対数尤度関数を係数とバイアスに関して微分

```math
\begin{align}
\frac{\partial E(w)}{\partial w}&=\sum_{i=1}^{n}\frac{\partial E_i(w)}{\partial p_i}\frac{\partial p_i}{\partial w}\\
&=\sum_{i=1}^{n}\Bigl(\frac{y_i}{p_i}-\frac{1-y_i}{1-p_i}\Bigr)\frac{\partial p_i}{\partial w}\\
&=\sum_{i=1}^{n}\Bigl(\frac{y_i}{p_i}-\frac{1-y_i}{1-p_i}\Bigr)p_i(1-p_i)x_i\\
&=-\sum_{i=1}^{n}(y_i(1-p_i)-p_i(1-y_i))x_i\\
&=-\sum_{i=1}^{n}(y_i-p_i)x_i
\end{align}
```

　　●パラメータが更新されなくなった　⇒　勾配が0になった。（=最適解が求められた）

```math
w^{(k+1)}=w^k+\eta\sum_{i=1}^{n}(y_i-p_i)x_i
```
　　⇒勾配降下法では、パラメータを更新するのにn個使って計算しないといけない。
　　　nが巨大な場合、メモリに展開できなかったり、計算時間が膨大になる。
　　　⇒**確率的勾配降下法**を利用する。

###4-3-8.確率的勾配降下法（ＳＧＤ）
　　●データをランダムに選んでパラメータを更新する。
　　●勾配降下法でパラメータを1回更新するのと同じ計算量で、パラメータをn回更新。
　　　効率よく最適な解を探索可能である。
　　●SGDは見る点を次々と変えるため、初期値付近の勾配0の点になりにくい。

```math
w(k+1)=w^k+\eta(y_i-p_i)x_i
```

###4-3-9.性能を測る指標について
　　●混同行列（confusion matrix）
　　　検証データに対するモデルの予測結果を4つの観点で分類した表

　　　①モデルの予測結果　「positive」と「negative」
　　　②検証データの結果　「positive」と「negative」の2×2の表

| 予測結果\検証データ結果                       |   positive        |  negative          |
|-----------------------|----------------------|--------------------|
| **positive**              | 真陽性(True Positive)| 偽陰性(False Positive)|
| **negative**              | 偽陽性(False Negative)| 真陰性(True Negative)|

　　●分類の評価方法
　　　正解率がよく使われるが、データがインバランスだった時に誤った評価となる。
　　　スパムメール80件、正常メール20件の時、分類器が全てスパムと判定する場合
　　　⇒正解率は80%となってしまう。

　　●「再現率：リコール(Recall)」や「適合率：プレシジョン(Precision)」を使て評価する。

　　　病気の診断で取りこぼすよりは誤診により再検査をさせるほうが良い　⇒　Recall
　　　スパムメールの判定のように、確実なもののみ除外し、多少は本人に判断させる　⇒ Precision

　　●Ｆ値
　　　理想的にはどちらも高いモデルがいい
　　　しかし、トレードオフの関係であり、シーソーゲームとなる。