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

# ロジスティック回帰モデル
- シグモイド関数
- 最尤推定
- 勾配降下法
- 再現率(recall)
- 適合率(precision)
- F値

ロジスティック回帰モデルとは、分類問題を解くための教師あり学習であり機械学習モデルである。このモデルの出力は、入力とm次元パラメータの線形結合をシグモイド関数に入力することによってy=1になる確率の値である。
x→w→シグモイド関数→yという流れになる。
シグモイド関数とは、入力は実数、出力は必ず0~1の値となるため、確率を表現するのによく用いられる。

```math 
σ(x) = \frac{1}{1 + exp(-ax)}
```

## シグモイド関数
### シグモイド関数の微分
シグモイド関数の形は、パラメータが変わると変化する。どのようなことかというと、例えば、aを増加させるとx=0付近での曲線の勾配が増加するというものだ。
シグモイド関数の微分は、シグモイド関数自身で表現することが可能である。これは尤度関数の微分を行う際に利用すると計算が容易になるといった性質を持つ。つまり、連鎖律を用いることで容易に計算することが可能である。

```math 
\begin{align}
\frac{∂σ(x)}{∂x} &= \frac{∂}{∂x}(\frac{1}{1 + exp(-ax)}) \\
&= aσ(x)(1 - σ(x))
\end{align}
```
### シグモイド関数の出力をY = 1になる確率に対応させる
説明変数の実現値が与えられた際にY = 1になる確率は、データのパラメータに対する線形結合から求めることができる。つまり、手順としてはデータの線形結合を計算し、シグモイド関数に入力と出力が確率に対応させるようにする。表記の仕方は、i番目データを与えた時のシグモイド関数の出力をi番目のデータがY = 1になる確率とする。

```math 
P(Y = 1|x) = σ(w_0 + w_1x_1 + .... + w_mx_m)
\\\\
P_i = σ(w_0 + w_1x_{i1} + ... + w_mx_{im})
```
つまり、データYは確率が0.5以上ならば1、未満なら0と予測する。

##最尤推定
###ベルヌーイ分布
ロジスティック回帰ではベルヌーイ分布が採用されている。ベルヌーイ分布は、生成されるデータは分布のパラメータによって異なるということを表している。ある分布を考えた時、その既知のパラメータによって生成されるデータは変化する。データからそのデータを生成したであろう尤もらしい分布を推定したい。このことを最尤推定という。

あるデータが得られた時、それが同時に得られる確率を同時確立という。確率変数は独立であることを仮定すると、それぞれの確率の掛け算となる。

尤度関数は、データを固定し、パラメータを変化させるこどだ。尤度関数を最大化させるようなパラメータを選ぶ推定方法を最尤推定という。
手順としては以下の形である。
→一回の試行でy = y_1となる確率
→n回の試行でy1~ynが同時に起こる確率（p固定）
→y1~ynのデータが得られた際の尤度関数

```math 
P(y) =  p^y(1 - p)^{1 - y_i}
Πp^{yi}(1 - p)^{1 - y_i}
Πp^{yi}(1 - p)^{1 - y_i}
```
ロジスティック回帰モデルの最尤推定
確率pはシグモイド関数になるため、推定するパラメータは重みパラメータとなる。

y1~ynのデータが得られた際の尤度関数
確率変数が独立を仮定することで確率の積に分解が可能となる
尤度関数はパラメータのみに依存する関数

```math 
\begin{align}
P(y_1,y_2,...,y_n|w_0,w_1,...w_m) &= Πp^{y_i}(1 - p)^{1 - y_i} \\
&=Πσ(w^Tx_i)^y_i(1 - σ(w^Tx_i))^{1 - y_i} \\
&=L(w)
\end{align}
```

すると、尤度関数Eを最大とするパラメータを探索する必要がある。
### 尤度関数を最大とするパラメータを探す（推定）
- 同時確率の積が和に変換可能
- 指数が積の演算に変換可能
- 対数関数は単調増加
- 尤度関数にマイナスをかけたものを最小化し、最小二乗法の最小化と合わせる

```math 
E = -logL = -∑{y_ilogp_i + (1 - y_i)log(1 - p_i)}
```

## 勾配降下法
反復学習によりパラメータを逐次的に更新するアプローチの一つである。ηは学習率と呼ばれるハイパーパラメータでモデルのパラメータの収束しやすさを調整する役割がある。
なぜこれが必要なのかというと、最尤法では、対数尤度関数をパラメータで微分して０になる値を解析的に求めることが困難だからである。勾配降下法を使うことにより、線形回帰モデルからMSEのパラメータに関する微分が０になる値を解析的に求めることが可能になる。

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

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

```math 
\frac{∂E(w)}{∂w} = ∑\frac{∂E_i(w)}{∂p_i}\frac{∂p_i}{∂w} *連鎖律 \\
∑(\frac{y_i}{p_i} - \frac{1 - y_i}{1 - p_i})\frac{∂p_i}{∂w} *対数尤度関数のpに関する微分\\
∑(\frac{y_i}{p_i} - \frac{1 - y_i}{1 - p_i})p_i(1 - p_i)x_i *シグモイド関数の微分 \\
-∑(y_i(1 - p_i) - p_i(1 - y_i))x_i *式を整理
-∑(y_i - p_i)x_i
```
パラメータが更新されなくなった場合、それは勾配が０になったということである。少なくとも反復学習で探索した範囲では最適な解が求められたことになる。

```math 
w^{(k + 1)} = w^(k) + η∑(y_i - p_i)x_i
```

勾配降下法では、パラメータを更新するのにN個全てのデータに対する和を求める必要がある。nが巨大になった時、データをオンメモリに載せる容量が足りない、計算時間が莫大になるなどの問題がある。そのため、確率的勾配降下法を利用して解決をする。

### 確率的勾配降下法(SGD)
勾配降下法でパラメータを1回更新するのと同じ計算量でパラメータをn回更新できるので効率よく最適な解を探索可能である。データを一つずつランダムに選んでパラメータを更新する。普通の勾配降下法は毎回の更新でデータを全て見るが、確率的勾配法は毎回の更新でデータを一つ（または少量）しか見ない。

```math 
w(k + 1) = w^k + η(y_i - p_i)x_i
```
### 混同行列
次は学習済みのロジスティック回帰モデルの性能を測る指標について見ていく。
その前に混同行列について少し説明する。
各検証データに対するモデルの予測結果を４つの観点で分類し、それぞれに当てはまる予測結果の個数をまとめた表が下記である。
![スクリーンショット 2020-12-10 21.39.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906331/b01085c7-84bd-6ce3-6d30-b34c587831bd.png)

###分類の評価方（メールのスパム分類）
分類の評価では、正解率がよく使われる。
正解した数/予測対象となった全データ数
例えば、メールのスパム分類ではスパム件数が80件・普通のメールが20件であったとする。全てをスパムとする分類機の正解率は８０％となる。
しかし、ここで問題が発生する。
それは、分類したいクラスにはそれぞれ偏りがあることが多いということだ。この場合は、単純な正解率はあまり意味をなさないことがほとんどだ。その場合は、リコールやプレシジョンを用いて評価する必要がある。

```math 
\frac{TP + TN}{TP + FN + FP + TN}
```

##再現率(Recall)
本当にpositiveなものの中からpositiveと予測できる割合のことである。ここで、negativeなものをpositiveとしてしまう事象については考えないことにする。
再現率は、誤り(false positive)が多少多くても抜け漏れは少ないという予測をしたい際に利用する。
使用例は、病気の検診で幼生であるものを陰性と誤診(false negative)としてしまうのを避けたい。陰性を陽性であると誤診（false positive)とするものが少し増えたとしても再検査すれば良いといったものである。

```math 
\frac{TP}{TP + FN}
```
![スクリーンショット 2020-12-10 21.54.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906331/1599cb87-707d-5f39-d4db-ab5486eda635.png)
![スクリーンショット 2020-12-10 21.55.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906331/f50c83bc-60ae-d031-4e6b-0fbf08115f25.png)

##適合率(precision)
モデルがpositiveと予測したものの中で本当にpositiveである割合のことである。ここで、本当にpositiveなものをnegativeとしてしまうものについては考慮していない。
適合率は、見逃し（false negative)が多くてもより正確な予測をしたい際に利用する。使用例として、スパムメールがある。スパムメールは重要なメールをスパムと誤判別されるよりもスパムと予測したものが確実にスパムである方が便利である。したがって、スパムメールを検出できなくても(false negative)、自分でやれば良いという結論に至る。
![スクリーンショット 2020-12-10 22.02.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906331/184b8a2e-ef3b-8b20-fd71-1ca8b69f889f.png)

##F値
理想的にはどちらも高いモデルが良いモデルだが、両者はトレードオフの関係にあり、どちらかを小さくすると、もう片方の値が大きくなってしまう。F値は、recallとprecisionのバランス、すなわち調和平均を示している。この値が高ければ高いほどrecallとprecisionが共に高くなる。