レポート(機械学習)

##要点メモ

###第1章 線形回帰モデル
説明変数、特徴量と問題文に出てきたら回帰の問題。
出力値はスカラー値。目的変数とも呼ばれる。

####線形回帰とは
・教師あり学習の回帰手法の一つ。

```math
\hat{y} = w^tx + b = \sum_{k=1}^{n} w_jx_j + b
```
```math
(\hat{y}・・・予測値)
``` 

#####線形単回帰モデル
・データは回帰直線に誤差が加わり観測されていると仮定される。

```math
y = w_0 + w_1x_1 + \epsilon(誤差)
```
※特徴
・外れ値に敏感である
・説明変数間に相関があると、良い推定ができない可能性がある(多重共線性)
・モデルの表現力を下げた方が良い場合もある(過学習しやすくなるので、説明変数の数を減らしたり、正則化などをすることでモデルの表現力を下げることもある)

多重共線性とは・・・説明変数間での相関が高いことを意味する。(分散が大きくなってしまい、パラメータの有意差検定が意味をなさなくなる)


#####データの分割
・データを検証用と学習用に分割
　→学習用でモデルを学習し、検証用で汎化性能を測る。
#####パラメータの推定
・平均二乗誤差
　→データとモデルの出力の二乗誤差
　→小さいほど直線とデータの距離が近い

```math
\textrm{MSE} = \frac{1}{n}\sum_{i=1}^{n} (\hat{y}_i - y_i)^2
```

####ハンズオン
・ボストン住宅価格
![boston_dataset.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381843/1aa3aabc-f779-7a71-3c63-64a6bc6e126a.png)

[線形回帰モデルハンズオン](https://qiita.com/taka0429/items/d3fa805b897eed956872)

・考察
　DESCR変数の中身を確認したが、英語の意味が理解できず、英語の重要性を再認識した。図式化等で分析をしていくうちになんとなくわかるようになった。
　単回帰分析だとすんなり理解でき、図も見やすいが、データが複雑になると、線形回帰モデルでは汎化性能はよくならないと(上手く図示できないので直観的に)感じた。

coef_・・・係数(coefficientの略)
intercept_・・・切片
###第2章 非線形回帰モデル
#####非線形単回帰モデル
基底関数を選択し、その関数と推定パラメータの線形結合を考える。

```math
y_i = w_0 + \sum_{i=1}^{m} w_j\phi_j(x_i) + \epsilon_i
```

よく使われる基底関数
・多項式関数
・ガウス基底関数
・スプライン関数/Bスプライン関数


・多項式(1~9次)

```math
\phi_j = x^j
```

・ガウス型基底

```math
\phi_j(x) =
\textrm{exp}
\Bigl\{
\frac{(x-\mu_j)^t(x-\mu_j)}{2h_j}\
\Bigr\}
```
#####正則化法
モデルの過学習を緩和するための方法。

![正則化.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381843/e6b5e77d-7f7c-e700-e464-6a8bfcf2c866.png)

L1ノルム・・・Ridge推定量。いくつかのパラメータを0に推定
L2ノルム・・・Lasso推定量。パラメータを0に近づけるよう推定
ノルム・・・距離

・リッジ回帰コスト関数

```math
\textrm{J}(θ) = \textrm{MSE}(θ) + α\frac{1}{2}\sum_{i=1}^{n}θ^2_i
```

・ラッソ回帰コスト関数

```math
\textrm{J}(θ) = \textrm{MSE}(θ) + α\sum_{i=1}^{n}|θ_i|
```

####ホールドアウト法
・手元にあるデータを学習用とテスト用に二分割する方法
→学習用を多くすればテスト用が減り(性能評価の精度が悪くなる)、テスト用を多くすればテスト用が減ってしまう(学習の精度が悪くなる)。
→手元に大量のデータがある場合を除いて、良い性能を与えないという欠点がある。

![1.Hold-out.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381843/94910624-9356-3e5c-1cf2-7bdf26a0f646.png)


####クロスバリデーション(交差検証)
・手元にあるデータをそれぞれm個のグループに分割し、m-1個のグループのデータを使って識別器を学習し、残りの1つのグループで検証を行う。
→m回繰り返してそれらの誤り率(平均2乗誤差)の平均を予測値とする。
→手元にあるすべてのデータを学習とテストに利用するので、良い性能予測を行うことができる。

![2.Cross-Validation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381843/84b52477-82a1-5205-1986-6d93369c010f.png)

###第3章 ロジスティック回帰モデル
####ロジスティック回帰とは
・教師あり学習の分類手法の一つ。
・学習の際に尤度関数の最大化を行う。
・出力は0 or 1の値。

#####シグモイド関数
・出力は0~1の値になる。
・出力結果を確率で表し、結果が0.5以上なら1、それ未満なら0となる。

```math
\sigma_h = \frac{1}{1 + \textrm{exp}^{(-h)}}
```
![シグモイド.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381843/faf1c44d-f931-f0fd-41e7-f63d750b5c68.png)

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

#####最尤推定
・尤も有り得そうなパラメータを推定する手法。
・ベルヌーイ分布(コイントスの表裏)に従う。

```math
\textrm{P}(\textrm{Y} = 1 | x) = p
```

```math
\textrm{P}(\textrm{Y} = 0 | x) = 1 - p
```

```math
\textrm{P}(\textrm{Y} = t | x) = p^t(1 - p)^{1-t}
```

```math
\textrm{P}(\textrm{Y} = 1 | x)・・・データが与えられた際にY=1になる確率
```
#####対数尤度関数の最大化
・尤度関数より対数尤度関数を最大化するほうが楽。
→尤度関数と対数尤度関数が最大になる点は同じ。
→積を和、指数が積の演算に変換できる(logになるため)。

#####勾配降下法
・学習によりパラメータを更新し、最適値を求める手法。
・η(学習率：イータ)と呼ばれるハイパーパラメータで収束のしやすさを調整。
・データが巨大になったときにオンメモリに載せる容量が足りない、計算時間が膨大になるという問題がある。

```math
w^{(k+1)}=w^{(k)}-\eta\frac{\partial E(w, b)}{\partial w}
```
#####確率的勾配降下法(SGD：stochastic gradient descent)
・データを１つずつランダムに選んでパラメータを更新。
・勾配降下法でパラメータを1回更新するのと同じ計算量でパラメータをn回更新できるできるので効率よく最適な解を探索可能。
・データに対する反復回数を「エポック(epoch)」と呼ぶ.
・各エポックごとのデータをシャッフルして学習の隔たりが生じにくくなり、より最適な解を得やすくなる。

#####ミニバッチ勾配降下法
・n個のデータをm (< n)個ずつのかたまり(ミニバッチ)に分けて学習を行う。(一般的にはm=50~500くらい)
・メモリ不足になることなく線形演算を行えるので、データ 1個ずつの繰り返しよりも計算が高速になる。

#####分類の評価
・正解率：予測に対する結果が正しいかどうかの指標

```math
\frac{\textrm{TP + TN}}{\textrm{TP + FN + FP + TN}}
```
・適合率：見逃しを許容し、誤判定を許容しない場合の指標(迷惑メール)

```math
\frac{\textrm{TP}}{\textrm{TP + FP}}
```
・再現率：見逃しを許容せず、誤判定を許容する場合の指標(がん検診)

```math
\frac{\textrm{TP}}{\textrm{TP + FN}}
```
・F値：適合率と再現率はトレードオフのため、見逃しと誤判定の最適値を適用する際の指標

```math
\frac{2}{\frac{1}{適合率} + \frac{1}{再現率}} =
\frac{\textrm{TP}}{\textrm{TP} + \frac{\textrm{FN + TP}}{2}}
```
![分類評価.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381843/7ca33409-f24d-cc57-4dc9-b6039f25e501.png)

####ハンズオン
[ロジスティック回帰モデルハンズオン](https://qiita.com/taka0429/items/54b2ae02fb48c5e94a74)

境界線の式
   w_1・x + w_2・y + w_0 = 0
   ⇒ y = (-w_1・x - w_0) / w_2

・考察
　ハンズオンを通してモデルの性能の評価に様々な視点で見れることがわかった。
　一見、1変数より2変数のほうが全体的にスコアが伸びているように見えたが、2変数のほうがFalseNegativeの値が増加していた。次元を大きくすると適合率があがって、再現率が下がったように見える。実際に手を動かすことによって、トレードオフの関係の理解がさらに深まった。
　

###第4章 主成分分析
・分散が最大になる方向に線形変換を求める手法である。
・次元を減らし、かつ情報の損失を少なくする必要がある。
・ラグランジュ関数を最大にする係数ベクトルを見つける。

ラグランジュ関数・・・ラグランジュの未定乗数法(設計変数をxとしたときに(複数可)、xの1次関数である制約条件の下、xの2次関数である目的関数を最適化するアルゴリズム)

```math
\textrm{E}(a_j)=a^T_j\textrm{Var}(\overline{X})a_j-\lambda(a^T_ja_j-1)
\\
\frac{\partial\textrm{E}(a_j)}{\partial a_j}=
2\textrm{Var}(\overline{X})a_j-2\lambda a_j=0
\\⇒(解)
\textrm{Var}(\overline{X})a_j=\lambda a_j
```

#####主成分
・最大固有ベクトルを第一主成分と呼ぶ。
・k番目の固有値に対応する固有ベクトルで変換された特徴量を第k主成分と呼ぶ。

#####寄与率
・第k主成分の分散の全分散に対する割合を第k成分の寄与率という

###第5章 アルゴリズム
####1.k近傍法/k平均法
#####k近傍法(kNN)
・分類問題のための手法
・近傍k個のデータを識別する。
・kを変えると結果も変える。k=1の場合を最近傍法という。
・kが小さい場合は、近傍の点に大きく左右されてしまうので、バリアンスが高いような状態となる。
・kが大きいほうが、決定境界は滑らかになる。

#####K平均法(k-means)
・教師なし学習。
・クラスタリング手法。
・与えられたデータをk個のクラスタに分類する。
・中心の初期値を変えるとクラスタリング結果も変わりうる。
・kの値を変えるとクラスタリング結果も変わる。

#####アルゴリズム
1) 各クラスタ中心の初期値を設定する(ランダム)
2) 各データ点に対して、各クラスタ中心との距離を計算し、最も距離が近いクラスタを割り当てる
3) 各クラスタの平均ベクトル（中心）を計算する
4) 収束するまで2, 3の処理を繰り返す



###第7章 サポートベクターマシーン
####サポートベクターマシーン(SVM)
・2クラス分類のための教師あり機械学習手法(分類にも回帰に使われる)。
・マージンを最大化する決定境界（識別面）を求める。
・データ点を正負によって分類する。
・決定的な出力をする。
・マージンの外側のデータは予測に影響を与えない。

マージン・・・決定境界と最も近いデータ点との距離
サポートベクトル・・・マージン上にあるデータ点(最低二個)

#####ソフトマージンSVM
・サンプルを線形分離できないとき。
・誤分類を許容し、誤差に対してペナルティを与える。

誤差を表す変数εを導入する。

```math
\epsilon_i=1-t_i(w^tx+b) > 0
```

パラメータCの大小で決定境界が変化
・Cが小さいときは誤差をより許容する(マージンが大きくなる)
・Cが大きいときは誤差をあまり許容しない(マージンが小さくなる)

#####非線形分離
・線形分離できないとき、特徴空間に写像し、その空間で線形に分離する。

#####カーネルトリック
・高次元のベクトルの内積をスカラー関数で表現。
・特徴空間が高次元でも計算コストを抑えられる。

####ハンズオン
[サポートベクターマシンハンズオン](https://qiita.com/taka0429/items/498be434b19632117d01)

・考察
タイタニック
scikit-learn の SVM に関しては、汎用のSVMと線形限定のSVMがあり、今回の学習結果ではほぼ同様の結果が得られると考えられる。
また、汎用のSVMとロジスティック回帰の図は似ているように思われる。
RBFカーネルの学習結果は、過学習を起こしているように思える。(ギザギザがすごい)
多項式カーネルに関しては、もっともらしい境界が得られているように思える。

MNIST
学習に長い時間がかかることが分かった。
SVMでも、MNIST の手書き数字データに対して 93% という正解率が得られることが分かった。(想像以上に正解していた)

IRIS Dataset
ソフトマージンSVMにおいて、コストパラメータCの値で境界の形状が変化することが確認できた。
ハイパーパラメータ(X, γ)に関しては、グリッド探索により最適なパラメータを探索することができることが確認できた。