Pythonではじめる機械学習　レポート⑤

#5章　モデルの評価と改良
　回帰と教師あり学習のクラス分類のモデル評価と
パラメータの選択について述べる。

##5.1 交差検証(cross-validation)
　交差検証において最もよく使うやり方は、
**k分割交差検証(k-fold cross-validation)**である。
　k:ユーザが設定するパラメータ(5～10が一般的)

以下に例を示す。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/49bdff1e-c50b-20c8-02c6-fc888120112a.png)
終了後、各結果の精度を算出して平均値をとる。

###5.1.1 層化k分割交差検証(stratified k-fold cross-validation)
　層化k分割交差検証は、多クラス分類のデータを分割する時に、
各分割に含まれるクラスの割合が同じになるように分割する。
以下に例を示す。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/d7ef820d-2615-a455-e257-7358724def00.png)

####5.1.1.1 1つ抜き交差検証(leave-one-out)
　k分割交差検証の個々の分割を1サンプルになるように分割する。
つまり、n個データがあれば分割がn個できるようにする方法である。

####5.1.1.2 シャッフル分割交差検証(shuffle-split cross-validation)
　シャッフル分割交差検証では、以下の3つのパラメータを指定する。

・train_size:訓練データとして使うデータの数
・test_size :テストデータとして使うデータの数
・n_iter    :繰り返す数

　データが10個、train_sizeが5、test_sizeが2、n_iterが4の場合の例を以下に示す。

|回数|データ1|データ2|データ3|データ4|データ5|データ6|データ7|データ8|データ9|データ10|
|:----:|:----:|:----:|:-----:|:-----:|:----:|:----:|:-----:|:-----:|:----:|:-----:|
| 1    |      |訓練  |訓練    |テスト |      |訓練   |訓練   |       |訓練  |テスト  |
| 2    |      |訓練  |        |訓練  |訓練   |テスト |訓練   |       |テスト |訓練   |
| 3    |訓練  |訓練   |       |      |訓練   |訓練   |訓練   |テスト |テスト |       |
| 4    |      |訓練  |        |テスト |訓練  |訓練   |テスト |訓練   |訓練   |       |

##5.2 グリッドサーチ(grid search)　
　パラメータを調整してモデルの汎化性能を上げるためによく使われるのが
**グリッドサーチ**である。

###5.2.1 シンプルなグリッドサーチ
　最も簡単なグリッドサーチは、2つのパラメータに対してforループを使い、
パラメータの組み合わせの全通りに対してクラス分類器を訓練して評価する。

例)SVMの場合、gammaとCにそれぞれ
0.001, 0.01, 0.1, 1, 10, 100
の6通りを当てはめるので、
6 × 6 = 36通りの評価を比較する。

###5.2.2 パラメータの過剰適合の危険性
　テストデータをパラメータの調整に使ってしまうと、
そのテストデータは評価用データとして使うことはできない。
そのため、データをもう一度分割し、以下の3つのセットにすると良い。

・訓練セット...モデル適合用
・検証セット...パラメータ選択用
・テストセット...評価用

###5.2.3 交差検証の結果の解析
　グリッドサーチは計算コストが高いため、
粗めの小さなグリッドから始める方がいい。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/d6042f74-5c0f-d74e-14bd-5f4446a16b8d.png)

##5.3 評価基準とスコア
###5.3.1 最終的な目標を見失わない
　機械学習を始める前に、そのビジネスで達成すべき目標を
**ビジネス評価基準(business metric)**という。
(Webサイトなら多くのユーザを会員登録させるなど)

　目標を達成できるようにモデルを構築し、評価する段階になったとき
より簡単に計算できる評価方法を見つける必要がある。
例えば、自動運転する車の歩行者回避機能を評価するには、
どういう風にテストするか？を考えたとき、
とりあえず走ってみるのではなく、
歩行者と歩行者以外の画像を用意し、
クラス分類の精度を測定する方法がある。

###5.3.2 2クラス分類における基準
####5.3.2.1 エラーの種類
　エラー(間違い方)は2つある。
例えば、癌の患者を発見するモデルの場合、

1.健康な人を癌と判定する
→**偽陽性(false positive)**という。

2.癌の人を癌ではないと判定する
→**偽陰性(false negative)**といい、
こちらが起きるのはよろしくない。

####5.3.2.2 偏ったデータセット
　Web広告をクリックしたかどうかを示すデータがあるとする。
このとき、ほとんどのデータが「クリックしていない」データである。
このように偏ったデータセットをimbalanced datasetsもしくは
datasets with imbalanced classesという。

　上記の例のクラス分類器を作ったとする。
これは、「クリックしていない」と判定するだけで
精度が90%以上になる。そのため、
良いモデルなのか、単に「クリックしていない」と返すだけなのか
判別がつかない。

####5.3.2.3 混同行列(confusion matrix)
　混同行列とは、2クラス分類の評価結果を表現する方法である。
以下に、数字が9かどうかを判別する2クラス分類の評価結果を示す。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/c933ccfd-7fbe-bb92-8f23-8a229b8764b5.png)

TN：予想がNOで、正解もNOだったデータ数
FN：予想がNOで、正解がYESだったデータ数
TP：予想がYESで、正解がYESだったデータ数
FP：予想がYESで、正解がNOだったデータ数

　このとき、精度を以下の式で表すことができる。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/ca6e7229-0d35-1803-cd1b-6619785528c5.png)
　また、適合率(陽性的中率：陽性と判断してデータの精度)は、
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/edc0ad94-6a3d-a3fe-b68c-036b0703cd95.png)
で求められる。

また、再現率(感度、ヒット率、真陽性率)は、
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/3edc6a81-9f37-1f39-8119-e9854d1984b0.png)
で求められる。

f-値(f-measure)は、
適合率と再現率の調和平均で、
偏ったデータの場合は精度よりも信頼できる。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/be711fa9-8d64-f625-da95-77cfdb6821c7.png)

####5.3.2.4 適合率と再現率
　適合率と再現率はトレードオフの関係にあるため、
どこを落としどころとするかはビジネスゴールによって決めるとよい。

####5.3.2.5 受信者動作特性(Receiver Operating Characteristics curve)とAUC(Area Under the Curve) 
　ROCカーブは、**偽陽性率(false positive rate)**と再現率のグラフである。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/4f1573d4-ab8c-d5dc-46a0-3c6c342f7acb.png)
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/314381/61da67a3-12f5-f3aa-d436-dc1895baa2f6.png)
偏ったデータの場合は、精度ではなくAUCを基準した方が信頼できる。

###5.3.3 多クラス分類の基準
　一般的に、多クラス分類の結果は2クラス分類の結果よりも
理解することが困難であることに留意しておく。