【E資格取得勉強】機械学習

#目的
機械学習について学んだ内容を記録に残し、後から振り返れるようにする。

#機械学習モデル一覧
|モデル  |タスク  |教師 |
|---|---|---|
|[線形回帰](#1-線形回帰)  |回帰  |あり  |
|[非線形回帰](#2-非線形回帰)  |回帰  |あり  |
|[ロジスティック回帰](#3-ロジスティック回帰)  |分類 |あり  |
|[k近傍法](#4-k近傍法)  |分類  |あり  |
|[k-means](#5-k-means)  |クラスタリング  |なし  |
|[主成分分析](#6-主成分分析)  |次元削減  |なし |


#1. 線形回帰
出力の標本値から背後にある関数を推定し、その関数を利用して入力値から未知の出力値を推定する手法。

### 1-1. 単回帰
出力推定値$ \hat{y}_i $に対する入力値が一つだけの場合を単回帰と呼び、下記の式で表すことができる。

$$ \hat{\boldsymbol{y}} = w_0 + w_1\boldsymbol{x} + \boldsymbol{\epsilon} $$

ここで、
$ \hat{\boldsymbol{y}} = (\hat{y_1}, \hat{y_2}, ..., \hat{y_n})^T $
$ \boldsymbol{x} = (x_1, x_2, ..., x_n)^T $
$ \boldsymbol{\epsilon} = (\epsilon_1, \epsilon_2, ..., \epsilon_n)^T $
である。 $ \hat{y}_i $はi回目の出力推定値を意味する。

### 1-2. 重回帰
各出力値$ \hat{y}_i $に対する入力値が複数ある場合を重回帰と呼び、下記の式で表すことができる。

$$ \hat{\boldsymbol{y}} = (\boldsymbol{w}\boldsymbol{X})^T = \boldsymbol{X}^T\boldsymbol{w}^T　$$

ここで、
$$ \hat{\boldsymbol{y}} = (\hat{y_1}, \hat{y_2}, ..., \hat{y_n})^T $$

```math
\boldsymbol{X} = 
\begin{pmatrix}
1, 1, ...,1 \\
x_{11}, x_{12}, ..., x_{1n} \\
x_{21}, x_{22}, ..., x_{2n} \\ 
... \\
x_{m1}, x_{m2}, ..., x_{mn} 
\end{pmatrix}
```
$$ \boldsymbol{w} = (w_0, w_1, w_2, ..., w_m) $$
$$ \boldsymbol{\epsilon} = (\epsilon_1, \epsilon_2, ..., \epsilon_n)^T $$
である。例えば、$ \hat{y_1} = w_0 + w_1 x_{11} + w_2 x_{21} + ... + w_m x_{m1} +\epsilon_1 $となる。

### 1-3. 最小二乗法
推定値$ \hat{\boldsymbol{y}} $がより正しくなるような$ \boldsymbol{w} $を探す方法の１つとして最小二乗法がある。推定値$ \hat{\boldsymbol{y}} $と出力値$ \boldsymbol{y} $の平均二乗誤差が最小になるような$　\boldsymbol{w} $を探索する方法である。

推定値$ \hat{\boldsymbol{y}} $と出力値$ \boldsymbol{y} $の平均二乗誤差は以下のように式で表される。

```math
MSE = \frac{1}{n} \sum_{i=1}^n (\hat{y_i} - y_i)^2 
```
これを最小化する$ \boldsymbol{w} $は以下の式を満たす。

```math
\frac{\partial}{\partial \boldsymbol{w}} MSE = 0
```

次に$ \frac{\partial}{\partial \boldsymbol{w}} MSE $を求める。

```math
\begin{align}

\frac{\partial}{\partial \boldsymbol{w}} MSE &= \frac{\partial}{\partial \boldsymbol{w}} \frac{1}{n} \sum_{i=1}^n (\hat{y_i} - y_i)^2  \\
&= \frac{1}{n} \frac{\partial}{\partial \boldsymbol{w}} (\hat{\boldsymbol{y}} - \boldsymbol{y})^T(\hat{\boldsymbol{y}} - \boldsymbol{y}) \\
&= \frac{1}{n} \frac{\partial}{\partial \boldsymbol{w}} (\boldsymbol{X}^T\boldsymbol{w}^T - \boldsymbol{y})^T(\boldsymbol{X}^T\boldsymbol{w}^T - \boldsymbol{y}) \\
&= \frac{1}{n} \frac{\partial}{\partial \boldsymbol{w}} 
\boldsymbol{w}\boldsymbol{X}\boldsymbol{X}^T\boldsymbol{w}^T-\boldsymbol{w}\boldsymbol{X}\boldsymbol{y}-\boldsymbol{y}^T\boldsymbol{X}^T\boldsymbol{w}^T-\boldsymbol{y}^T\boldsymbol{y} \\
&= \frac{1}{n} \frac{\partial}{\partial \boldsymbol{w}} 
\boldsymbol{w}\boldsymbol{X}\boldsymbol{X}^T\boldsymbol{w}^T-\boldsymbol{w}\boldsymbol{X}\boldsymbol{y}-\boldsymbol{w}\boldsymbol{X}\boldsymbol{y}-
\boldsymbol{y}^T\boldsymbol{y} \\
&= \frac{1}{n} \frac{\partial}{\partial \boldsymbol{w}} 
\boldsymbol{w}\boldsymbol{X}\boldsymbol{X}^T\boldsymbol{w}^T-2\boldsymbol{w}\boldsymbol{X}\boldsymbol{y}-
\boldsymbol{y}^T\boldsymbol{y} \\
&= \frac{1}{n} (
2 \boldsymbol{X}\boldsymbol{X}^T\boldsymbol{w}^T-2\boldsymbol{X}\boldsymbol{y}）

\end{align}
```
となる。

```math
\frac{\partial}{\partial \boldsymbol{w}} MSE = 0
```
より、


```math
\begin{align}

\frac{1}{n} (
2 \boldsymbol{X}\boldsymbol{X}^T\boldsymbol{w}^T-2\boldsymbol{X}\boldsymbol{y}）&=0 \\
\boldsymbol{X}\boldsymbol{X}^T\boldsymbol{w}^T &= \boldsymbol{X}\boldsymbol{y} \\
\boldsymbol{w}^T &= (\boldsymbol{X}\boldsymbol{X}^T)^{-1}\boldsymbol{X}\boldsymbol{y} 

\end{align}
```
である。したがって、推定値$ \hat{\boldsymbol{y}} $と出力値$ \boldsymbol{y} $の平均二乗誤差$ MSE $を最小にする$ \boldsymbol{w} $は、

```math
\boldsymbol{w}^T = (\boldsymbol{X}\boldsymbol{X}^T)^{-1}\boldsymbol{X}\boldsymbol{y} 
```

である。ここから、推定値$ \hat{\boldsymbol{y}}  $は以下となる。 

```math
\begin{align} 

\hat{\boldsymbol{y}} 
&= \boldsymbol{X}^T\boldsymbol{w}^T　\\
&= \boldsymbol{X}^T(\boldsymbol{X}\boldsymbol{X}^T)^{-1}\boldsymbol{X}\boldsymbol{y} 

\end{align}
```


#2. 非線形回帰
###2-1. １次の非線形回帰
入力値が１つの場合の非線形回帰の式は次のように表すことができる。

```math
\hat{y_i} = w_0 + w_1 \phi_1(x_i) + ... + w_k \phi_k(x_i) + \epsilon_i
```
ここで$\phi_1(x_i)$は基底関数と呼ばれ、具体的には次のような関数が多く用いられる。
◆多項式関数(1次)
$$\phi_j(x_i) = x_i^j$$
◆ガウス基底関数(1次)

```math
\phi_j(x_i) = \exp \Biggl( \frac{(x_i-u_j)^2}{2h_j} \Biggl)
```

ここで、
$$\boldsymbol{w} = (w_0, w_1,...,w_k)$$
および、
$$\boldsymbol{\phi}(x_i) = (1, \phi_1(x_i),...,\phi_k(x_i))^T$$
とすると、入力値が１つの場合の非線形回帰の式は次のように表される。

```math
\hat{y_i} = \boldsymbol{w} \boldsymbol{\phi}(x_i)　+ \epsilon_i
```


###2-2. 2次以上の非線形回帰
入力値が複数の場合の非線形回帰の式は次のように表すことができる。

```math
\hat{y}_i = w_0 + w_1 \phi_1(\boldsymbol{x}_i) + ... + w_k \phi_k(\boldsymbol{x}_i) + \epsilon_i
```

関数$\phi_j$の引数はベクトル$\boldsymbol{x}_i $となっている。

```math
\boldsymbol{x}_i = (x_{i1}, x_{i2}, ..., x_{im})
```
ここで、
$$\boldsymbol{w} = (w_0, w_1,...,w_k)$$
および、

```math
\boldsymbol{\phi}(\boldsymbol{x}_i) = (1, \phi_1(\boldsymbol{x}_i),...,\phi_k(\boldsymbol{x}_i))^T
```
から、非線形回帰の式は次のように表すことができる。

```math
\hat{y}_i = \boldsymbol{w}\boldsymbol{\phi}(\boldsymbol{x}_i)+ \epsilon_i
```

さらに、

```math
\Phi = (\boldsymbol{\phi}(\boldsymbol{x}_1), ...,\boldsymbol{\phi}(\boldsymbol{x}_n))
```

とすると、

```math
\begin{align}
\hat{\boldsymbol{y}} 
&= (\hat{y}_1, ...,\hat{y}_n)^T \\
&= (\boldsymbol{w} \Phi )^T \\
&= \Phi^T \boldsymbol{w}^T
\end{align}
```
これは下記の重回帰の式で$\boldsymbol{X}$を$\Phi$で入れ替えたものであるから、
$$ \hat{\boldsymbol{y}} = (\boldsymbol{w}\boldsymbol{X})^T = \boldsymbol{X}^T\boldsymbol{w}^T　$$
推定値$ \hat{\boldsymbol{y}} $と出力値$ \boldsymbol{y} $の平均二乗誤差$ MSE $を最小にする$ \boldsymbol{w} $は、

```math
\boldsymbol{w}^T = (\boldsymbol{\Phi}\boldsymbol{\Phi}^T)^{-1}\boldsymbol{\Phi}\boldsymbol{y} 
```

である。ここから、推定値$ \hat{\boldsymbol{y}}  $は以下となる。 

```math
\begin{align} 

\hat{\boldsymbol{y}} 
&= \boldsymbol{\Phi}^T\boldsymbol{w}^T　\\
&= \boldsymbol{\Phi}^T(\boldsymbol{\Phi}\boldsymbol{\Phi}^T)^{-1}\boldsymbol{\Phi}\boldsymbol{y} 

\end{align}
```

ここで基底関数$\phi_j(x_i)$には次の関数が多く用いられる。
◆ガウス基底関数(2次以上)

```math
\phi_j(\boldsymbol{x}_i) = \exp \Biggl( \frac{(\boldsymbol{x}_i-\boldsymbol{u}_j) (\boldsymbol{x}_i-\boldsymbol{u}_j)^T }{2h_j} \Biggl)
```

### 2-2. 未学習と過学習
表現力が不十分なモデルだと、学習データに対して十分小さな誤差を得ることができない。これを未学習という。
反対にモデルの学習が行きすぎて、未知のデータに対して十分小さな誤差を得ることができないことを過学習という。

以下の青い点は、３次関数$ 3x^3 - x^2 + x + 20 $ にノイズ(平均0、分散0.3の正規分布に基づく)を加算しプロットしたものである。一方、赤線はn次の非線形回帰で推定したものであり、左から1次、5次、13次である。1次の場合には青い点に十分に沿った赤線が描けていないのに対し、５次の場合は青い点に近似する曲線が描けている。１３次の場合は大きくずれてしまっている。この例では１次の場合は表現力が不十分なため、未学習の状態になっている。反対に13次の場合は表現力が過多になっており、十分小さな誤差が得られていないことがわかる。

![グラフ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619163/328fb72c-fde7-ab6f-245d-88ebcb59a0ac.png)


未学習の場合には、表現力の高いモデルを利用する必要がある。

一方、過学習の場合には以下の対策が有効である。
・学習データを増やす
・不要な基底関数を削除して表現力を抑止
・正則化法を利用して表現力を抑止


### 2-3. 正則化法（罰則化法）


正則化法では、モデルの複雑さに伴ってその値が大きくなる正則化項 $ \lambda R(\boldsymbol{w}) $を課すことで過学習を防ぐ。

```math
E(\boldsymbol{w}) = (\hat{\boldsymbol{y}} - \boldsymbol{y})^T(\hat{\boldsymbol{y}} - \boldsymbol{y})+\lambda R(\boldsymbol{w})
```


このとき$ \frac{\delta}{\delta \boldsymbol{w}}E(\boldsymbol{w})=0 $となる$\boldsymbol{w}$を求める。

ここで、$ \lambda $ は正則化項をどれくらい重視するかを表す定数でハイパーパラメータと呼ばれる。

◆Ridge回帰
$ R(\boldsymbol{w}) $がL2ノルムとなる場合、つまり $ R(\boldsymbol{w}) = {∥\boldsymbol{w}∥}_2 $

である場合にRidge回帰と呼ぶ。

◆Lasso回帰
$ R(\boldsymbol{w}) $がL1ノルムとなる場合、つまり$ R(\boldsymbol{w}) = {∥\boldsymbol{w}∥}_1$である場合にLasso回帰と呼ぶ。

ここで、$L^p$ノルムは次のように表される。

```math
{∥\boldsymbol{w}∥}_p=( {|w_1|}_p + {|w_2|}_p+⋯+{|w_n|}_p)^{\frac{1}{p}}
```

### 2-4. 汎化性能
学習に使用した入力だけでなく、未知の入力に対する予測性能を汎化性能と呼ぶ。
汎化性能は学習データとは別に収集された検証データで性能を測ることで推定される。

◆バイアス・バリアンス分解
汎化性能推定の方法の一つにバイアス・バリアンス分解がある。真の値$ y $に対して、データ$D$を利用して推定した値を$\hat{y}_D $とすると、平均二乗誤差は次のようになる。

```math
E_D[(y-\hat{y}_D)^2] =\Bigr(y-E_D[\hat{y}_D]\Bigr)^2 + E_D\Bigr[\Bigr(\hat{y}_D-E_D[\hat{y}_D]\Bigr)^2\Bigr] 
```

ここで、第一項をバイアス、第二項をバリアンスと呼ぶ。

バイアスはデータが変わった時に平均的にどれくらい予測誤差が小さいかを表し、バリアンスはデータが変わった時に予測値がどのくらいばらつくかを表す。

バイアスが小さい　→　モデルが平均的にうまく予測できている
バリアンスが小さい　→　モデルの予測値にばらつきが少ない

つまり、バイアスとバリアンスが両方とも小さくなるようなモデルが汎化性能が高いと言える。

ちなみに上記の式で表せるのは、次のように式変形できるためである。

```math
\begin{align}
E_D[(y-\hat{y}_D)^2] &=(y-E_D[\hat{y}_D])^2 + E_D[(\hat{y}_D-E_D[\hat{y}_D])^2] \\
&= y^2 -2yE_D[\hat{y}_D]+E_D[\hat{y}_D]^2 + E_D\Bigr[\hat{y}_D^2-2\hat{y}_DE_D[\hat{y}_D]+E_D[\hat{y}_D]^2\Bigr] \\
&= y^2 -2yE_D[\hat{y}_D]+E_D[\hat{y}_D]^2 + E_D [\hat{y}_D^2] - 2E_D[\hat{y}_D] E_D[\hat{y}_D]+E_D[\hat{y}_D]^2 \\
&= y^2 -2yE_D[\hat{y}_D]+E_D[\hat{y}_D]^2 + E_D [\hat{y}_D^2] - 2E_D[\hat{y}_D]^2+E_D[\hat{y}_D]^2 \\
&= y^2 -2yE_D[\hat{y}_D]+ E_D [\hat{y}_D^2]
\end{align}
```

◆ホールドアウト法
未知の入力に対する予測性能を評価するためのデータ準備について考える。

ホールドアウト法ではデータを学習用と評価用にわけ、評価用データ＝未知の入力に対してうまく予測できているかを評価する。

ただ、この手法にはデメリットがある。学習用のデータを増やすと評価用のデータが減るため評価精度が低下する。一方、評価用データを増やすと学習用データが減ることで学習の精度が低下する。

つまり、そもそものデータ量が十分でない場合、良い性能評価にならないと言う欠点がある。

そこで、データ量が十分でない場合、次の交差検証法が用いられる。

◆交差検証法(クロスバリデーション)
データをk個に分割する。

k個に分割したデータのうち、１番目のデータセットを検証用とし、残りを学習用のデータとする。
これをもとにモデルの学習および評価を行う。

次に、k個に分割したデータのうち、2番目のデータセットを検証用とし、残りを学習用のデータとする。
これをもとにモデルの学習および評価を行う。

この作業を繰り返し、k回学習・評価を行う。その結果得られた評価値の平均を全体の評価値とする。


#3. ロジスティック回帰

### 3-1. 分類問題
ロジスティック回帰では、分類問題を扱う。
分類問題とは与えられた入力をクラスに分類する問題である。
m次元の入力が与えられた時、出力が0または1となるような問題である。
例えば、何らかの画像が与えられた時にそれが猫の画像であるか否かを判定するような問題である。

### 3-2. ロジスティック回帰モデル
ロジスティック回帰モデルではm次元の入力の線型結合をシグモイド関数の入力とする。

ここで、シグモイド関数を利用する理由は、シグモイド関数の出力が0~1の値を取り、確率を表現することできるためである。

重みパラメータ$ \boldsymbol{w} = (w_0, w_1, ..., w_m)^T $とする。

m次元の入力値を$ \boldsymbol{x} = (1, x_1, ..., x_m)^T $とする。

シグモイド関数の入力値は$ \hat{y} = \boldsymbol{w}^T \boldsymbol{x} $と表すことができる。

ここでシグモイド関数は以下の式で表される。

```math
\sigma(x) = \frac{1}{1+e^{-ax}}
```

また、シグモイドの導関数は以下となる。

```math
\frac{\partial}{\partial x}\sigma(x) = a \sigma(x) (1-\sigma(x))
```

ここで、シグモイド関数の出力が1となる確率を以下のように表す。

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

### 3-3. ベルヌーイ分布
ベルヌーイ分布は、Y=1とY=0となる確率をまとめて表現できる離散確率分布。
Y=1となる確率を$p$、Y=0となる確率を$1-p$とするとベルヌーイ分布は以下で表される。

```math
P(Y=y)= p^y(1-p)^{1-y}
```

n回の試行で$y_1, ..., y_n$がそれぞれ独立の場合、同時に起こる確率は以下となる。

```math
P(y_1,...,y_n)= \prod_{i=1}^n p^{y_i}(1-p)^{1-y_i}
```

### 3-4. 最尤推定
m次元の入力値と出力値のペアがn個ある。つまり、

```math
(\boldsymbol{x}_1, y_1), ..., (\boldsymbol{x}_n, y_n)
```

このとき、それぞれの確率はシグモイド関数を使って次のように表される。

```math
\begin{align}
P(y_i|\boldsymbol{x}_i)&= p_i^{y_i}(1-p_i)^{1-y_i} \\
&= \sigma(\boldsymbol{w}^T\boldsymbol{x}_i)^{y_i} (1-\sigma(\boldsymbol{w}^T\boldsymbol{x}_i))^{1-y_i}
\end{align}
```

このことからn個の入力値が与えられた時n個の出力値が起こる確率は以下となる。

```math
\begin{align}
P(y_1,...,y_n|w_0,...,w_n) &= \prod_{i=1}^n \sigma(\boldsymbol{w}^T\boldsymbol{x}_i)^{y_i} (1-\sigma(\boldsymbol{w}^T\boldsymbol{x}_i))^{1-y_i}
\end{align}
```

ここで、n個の出力が観察で得られることを元にして、上の条件付き確率を$w_0, ...,w_n$の関数$ L(\boldsymbol{w}) $として捉える。このとき、関数$ L(\boldsymbol{w}) $を尤度関数と呼ぶ。

```math
\begin{align}
L(\boldsymbol{w}) &= P(y_1,...,y_n|w_0,...,w_n) \\
&= \prod_{i=1}^n \sigma(\boldsymbol{w}^T\boldsymbol{x}_i)^{y_i} (1-\sigma(\boldsymbol{w}^T\boldsymbol{x}_i))^{1-y_i}
\end{align}
```

そして、この尤度関数を最大にするような$\hat{w}_0, ...,\hat{w}_n$を推定値とする。この手法を最尤推定法と呼ぶ。

```math
\boldsymbol{\hat{w}} = \arg \max_{\boldsymbol{w}}L(\boldsymbol{w})
```

ここでnが非常に大きい場合、数値計算で桁落ちするため、対数をとってやる。

```math
\begin{align}
E(\boldsymbol{w})&= log L(\boldsymbol{w}) \\
&= \sum_{i=1}^n y_i \log \sigma(\boldsymbol{w}^T\boldsymbol{x}_i)+ (1-y_i) \log (1-\sigma(\boldsymbol{w}^T\boldsymbol{x}_i))
\end{align}
```

この関数$E(\boldsymbol{w})$に対して、

```math
\frac{\partial}{\partial \boldsymbol{w}} E(\boldsymbol{w}) = 0
```

を満たす$\boldsymbol{w}$を求めれば良いのだが、上の偏微分を解くことは困難であるため、勾配降下法にという探索アルゴリズムにより$\boldsymbol{w}$を求める。

### 3-5. 勾配降下法
勾配降下法とは、パラメータ$\boldsymbol{w}$を

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

により繰り返し更新し、

```math
\frac{\delta}{\delta \boldsymbol{w}} E(\boldsymbol{w}_{(k)}) \leqq \epsilon
```

を満たす時、その$\boldsymbol{w}_{(k)}$を推定値とする探索アルゴリズムである。

### 3-6. 確率的勾配降下法
ここで

```math
\begin{align}
\frac{\partial}{\partial \boldsymbol{w}} E(\boldsymbol{w}_{(k)}) &= -\sum_{i=1}^n (y_i - p_i) \boldsymbol{x}_i
\end{align}
```

となるから、

```math
\boldsymbol{w}_{(k+1)} = \boldsymbol{w}_{(k)} + \eta \sum_{i=1}^n (y_i - p_i) \boldsymbol{x}_i
```

となる。ここで第二項はn個のデータの和となるが、nが巨大になった時に数値計算上メモリが足りない、計算時間が莫大になるといった問題が起きる。

そこで、これらの問題を確率的勾配降下法により解決する。

さきほどの式の第二項に対して、ランダムにi番目の値のみに絞って計算する。このようにパラメータを更新するランダム(確率的)に適当なi番目の入出力セットに絞って計算する勾配降下法を、確率的降下勾配法と呼ぶ。

```math
\boldsymbol{w}_{(k+1)} = \boldsymbol{w}_{(k)} + \eta (y_i - p_i) \boldsymbol{x}_i
```

### 3-7. 分類の評価方法
正解率＝正解した数/ 予測対象となった全データ数を使おうとしてしまいがちだが、これは意味を成さないことが多い。

例えば、スパム数が80件、普通のメールが20件というデータがあった場合、どんなデータでも全てスパムと判定するモデルでも正解率は80%となってしまう。

分類したいデータには偏りがあることが多いため、単純な正解率は意味をなさない。

そこで再現率と適合率という考え方がある。

まず、次の用語を定義する。

True Positive：陽性クラスと予測され結果も陽性クラスであった個数
True Negative：陰性クラスと予測され結果も陰性クラスであった個数
False Positive：陽性クラスと予測されたが結果は陰性クラスであった個数
False Negative：陰性クラスと予測されたが結果は陽性クラスであった個数

◆再現率(Recall)
再現率は「本当に陽性なものの中から、陽性と予測できる割合」のこと。以下の式で表される。
「陽性であるものを陰性と誤診(False Negative)」してしまうことを避けたい場合に利用される評価方法。

```math
\frac{True Positive}{True Positive+False Negative}
```

◆適合率(Precision)
適合率は「陽性と予測したものから、本当に陽性である割合」のこと。以下の式で表される。
「見逃し(False Negative)が多くてもより正確な」予測をしたい場合に利用される評価方法。

```math
\frac{True Positive}{True Positive+False Positive}
```

再現率と適合率は互いにトレードオフの関係にある。

例えば、ある病院の癌検診の例を考えた場合、この病院が保守的な検査を行い、たくさんの陽性(癌である宣告)を出したとする。
すると、たくさん陽性を出しているので、本当に陽性である人の的中率が上がり、再現率が高くなる。
反対に少しでも癌の兆候が見られればすぐ陽性と判断してしまっているため、適合率が下がる。

今度は、たくさんの陰性(癌ではない宣告)を出したとする。
すると、一般的には、陰性の患者数の方が多いため、たくさんの陰性判断をすることで適合率が上がる。
だが逆に、再現率は低くなってしまう。

◆F値
そこで、PrecisionとRecallの調和平均を考える。以下の式で表される。

```math
\frac{2 Recall \times Precision}{Recall+Precision}
```

#4. k近傍法
与えられたデータ(複数のクラスに分類されている)をプロットする。

未知のデータのからもっとも近いk個のデータを取得する。

k個のデータのうちもっとも多いクラスに未知のデータが属すると推定する。


#5. k-means
k個のクラスがあると仮定する。そのとき未知のデータがどのクラスに属するか(クラスタリング)を次のアルゴリズムで推定する教師なし手法。

0) クラスの個数kを決定する

1) 各クラスタ中心の初期値を設定する

2) 各データ点に対して、各クラスタ中心との距離を計算し、最も距離が近いクラスタを割り当てる

3) 各クラスタの平均ベクトル（中心）を計算する

4) 収束するまで2, 3の処理を繰り返す

初期値が近いとうまくクラスタリングできない。


#6. 主成分分析
（参考：https://www.slideshare.net/sanoche16/tokyor31-22291701?next_slideshow=1）

・多変量データの持つ構造をより少数個の指標に圧縮
・変量の個数を減らすことに伴う、情報の損失はなるべく小さくしたい
・少数変数を利用した分析や可視化(2・3次元の場合)が実現可能

→ばらつきが大きくなるような断面カット


例えば、いろんな会社がある場合に会社J、会社K、会社Lは下記のようにm次元の特徴量で表される。

```math
会社\text{J} = (x_{J1}, x_{J2},...,x_{Jm}) \\
会社\text{K} = (x_{K1}, x_{K2},...,x_{Km}) \\
会社\text{L} = (x_{L1}, x_{L2},...,x_{Lm}) \\
```

m個も特徴量があるとそれぞれの会社を比較するのが大変なので2個の特徴量にまとめたい。

そこで、新たな2個の特徴量は、m次元の特徴量の線形結合で表現する。

```math
会社\text{J}の特徴量① \ z_{J1} = a_{11} x_{J1} + a_{12} x_{J2} +...+a_{1m} x_{Jm} \\
会社\text{K}の特徴量① \ z_{K1} = a_{11} x_{K1} + a_{12} x_{K2} +...+a_{1m} x_{Km} \\
会社\text{L}の特徴量① \ z_{L1} = a_{11} x_{L1} + a_{12} x_{L2} +...+a_{1m} x_{Lm} 
```

```math
会社\text{J}の特徴量② \ z_{J2} = a_{21} x_{J1} + a_{22} x_{J2} +...+a_{2m} x_{Jm}  \\
会社\text{K}の特徴量② \ z_{K2} = a_{21} x_{K1} + a_{22} x_{K2} +...+a_{2m} x_{Km} \\
会社\text{L}の特徴量② \ z_{L2} = a_{21} x_{L1} + a_{22} x_{L2} +...+a_{2m} x_{Lm}
```


$z_{J1}, z_{K1}, z_{L1}$の分散を最大化する$\boldsymbol{a}_1$を見つける。

また$z_{J2}, z_{K2}, z_{L2}$の分散を最大化する$\boldsymbol{a}_2$を見つける。

ここで$\boldsymbol{a}_j, \boldsymbol{x}_i, \boldsymbol{x} $を以下とする。

```math
\boldsymbol{a}_j = 
\begin{pmatrix}
a_{j1} \\
a_{j2} \\
\vdots \\
a_{jm} 
\end{pmatrix}
```

```math
\boldsymbol{x}_i = (x_{i1}, x_{i2},...,x_{im})
```

```math
\boldsymbol{x} = 
\begin{pmatrix}
\boldsymbol{x}_{1} \\
\boldsymbol{x}_{2} \\
\vdots \\
\boldsymbol{x}_{n} 
\end{pmatrix}
```

ここで$m$はもとの情報の特徴量の個数、$n$は会社の個数である。

このとき$\boldsymbol{z}_{j}$は以下となる。

```math
\begin{align}
\boldsymbol{z}_{j} &= \boldsymbol{x} \boldsymbol{a}_j \\
&= \begin{pmatrix}
z_{1j} \\
z_{2j} \\
\vdots \\
z_{ij} \\ 
\vdots \\
z_{nj} 
\end{pmatrix}
= \begin{pmatrix}
\boldsymbol{x}_1 \boldsymbol{a}_j \\
\boldsymbol{x}_2 \boldsymbol{a}_j \\
\vdots \\
\boldsymbol{x}_i \boldsymbol{a}_j \\ 
\vdots \\
\boldsymbol{x}_n \boldsymbol{a}_j 
\end{pmatrix}
= \begin{pmatrix}
a_{j1} x_{11} + a_{j2} x_{12} + \dots +a_{j1} x_{1m} \\
a_{j1} x_{21} + a_{j2} x_{22} + \dots +a_{j1} x_{2m} \\
\vdots \\
a_{j1} x_{i1} + a_{j2} x_{i2} + \dots +a_{j1} x_{im} \\ 
\vdots \\
a_{j1} x_{n1} + a_{j2} x_{n2} + \dots +a_{j1} x_{nm} 
\end{pmatrix}
\end{align}
```

ここで$j$は次元削減後の各特徴量を表す添え字で、今回のm次元を2次元にするため、$j=1,2$となる。


例えば、m次元から3次元に次元削減する場合には、$j=1,2,3$となる。


さて、なるべく元の情報量を失わずに新たな特徴量$\boldsymbol{z}_j$へと次元削減するには、

その分散を最大にする$\boldsymbol{a}_j$を求めればよい。

$\boldsymbol{z}_j$の平均を以下とすると、

```math
\begin{align}
\bar{z}_j &= \frac{1}{n} \sum_{i=1}^n z_{ij} \\
&= \frac{1}{n} \sum_{i=1}^n \boldsymbol{x}_i \boldsymbol{a}_j \\
&= \bar{\boldsymbol{x}} \boldsymbol{a}_j
\end{align}
```

である。

ここで、

```math
\begin{align}
\bar{\boldsymbol{x}} &= \frac{1}{n} \sum_{i=1}^n \boldsymbol{x}_i \\
&= \frac{1}{n} \begin{pmatrix}
x_{11}+ x_{21}+\dots+x_{i1}+\dots+x_{n1} \\
x_{12}+ x_{22}+\dots+x_{i2}+\dots+x_{n2} \\
\vdots \\
x_{1m}+ x_{2m}+\dots+x_{im}+\dots+x_{nm}
\end{pmatrix}^T
\end{align}
```

である。

$\boldsymbol{z}_j$の分散は以下となる。

```math
\begin{align}
Var(\boldsymbol{z}_j) &= \frac{1}{n} \sum_{i=1}^n (z_{ij} - \bar{z}_j)(z_{ij} - \bar{z}_j) \\
&= \frac{1}{n} \sum_{i=1}^n (\boldsymbol{x}_i \boldsymbol{a}_j - \bar{\boldsymbol{x}} \boldsymbol{a}_j)^T(\boldsymbol{x}_i \boldsymbol{a}_j - \bar{\boldsymbol{x}} \boldsymbol{a}_j) \\
&= \frac{1}{n} \sum_{i=1}^n \bigr( (\boldsymbol{x}_i - \bar{\boldsymbol{x}}) \boldsymbol{a}_j \bigr)^T \bigr( (\boldsymbol{x}_i - \bar{\boldsymbol{x}}) \boldsymbol{a}_j \bigr) \\
&= \frac{1}{n} \sum_{i=1}^n \ \boldsymbol{a}_j^T (\boldsymbol{x}_i - \bar{\boldsymbol{x}})^T  (\boldsymbol{x}_i - \bar{\boldsymbol{x}}) \boldsymbol{a}_j \\
&= \ \boldsymbol{a}_j^T \frac{1}{n} \sum_{i=1}^n (\boldsymbol{x}_i - \bar{\boldsymbol{x}})^T  (\boldsymbol{x}_i - \bar{\boldsymbol{x}}) \boldsymbol{a}_j
\\
&= \boldsymbol{a}_j^T Var(\boldsymbol{x}) \boldsymbol{a}_j
\end{align}
```

ここで、

```math
Var(\boldsymbol{x})　=  \frac{1}{n} \sum_{i=1}^n (\boldsymbol{x}_i - \bar{\boldsymbol{x}})^T  (\boldsymbol{x}_i - \bar{\boldsymbol{x}}) 
```

である。$Var(\boldsymbol{x})$は分散共分散行列になっている。


したがって、分散$Var(\boldsymbol{z}_j)$を最大にする$\boldsymbol{a}_j$に関する式は以下のように表すことができる。

```math
 \arg \max_{\boldsymbol{a}_j \in \mathbb{R}^m} Var(\boldsymbol{z}_j) = \arg \max_{\boldsymbol{a}_j \in \mathbb{R}^m} \boldsymbol{a}_j^T Var(\boldsymbol{x}) \boldsymbol{a}_j
```

この式は$\boldsymbol{a}_j$が大きければ大きいほど、大きくなるので下記の束縛条件を設ける。

```math
\boldsymbol{a}_j^T \boldsymbol{a}_j = 1
```

つまり、L2ノルム$\parallel\boldsymbol{a}_j\parallel _2 = 1$となる条件を設ける。


ここでラグランジュの未定乗数法と呼ばれる束縛条件のもとで最適化を行う方法を用いる。

ラグランジュの未定乗数法では、ラグランジュ関数を微分したものが0になる点を求める。

ラグランジュ関数とは目的関数から束縛条件を引いたものである。

```math
E(\boldsymbol{a}_j) = \boldsymbol{a}_j^T Var(\boldsymbol{x}) \boldsymbol{a}_j - \lambda (\boldsymbol{a}_j^T \boldsymbol{a}_j-1)
```

これを微分したものが0になればよいから、

```math
\frac{\partial}{\partial \boldsymbol{a}_j} E(\boldsymbol{a}_j) = 2 Var(\boldsymbol{x}) \boldsymbol{a}_j - 2 \lambda \boldsymbol{a}_j = 0
```

```math
Var(\boldsymbol{x}) \boldsymbol{a}_j = \lambda \boldsymbol{a}_j
```

となる。この固有値問題を解くと、固有値と固有ベクトルのペアが(最大)m個出現する。


参考
https://www.math.uwaterloo.ca/~hwolkowi/matrixcookbook.pdf