本日のまとめ(モデルの評価、チューニング)
パイプラインによるワークフローの効率化
make_pipeline
は、入力としてsklearnの変換器(ex.StandardScaler, PCA)と、推定器(ex. LogisticRegression)を受け取る- 変換器はいくつ指定してもよい
- 変換器は、fit & transform, 推定器はfit & predictをもつ
- pipelienのfit()コール時は、変換器はfit & transformを実行し、最終的に推定器のfitが実行される
- pipelineのpredict()コール時は、変換器はtransformを実行し、最終的に推定器のpredict()が実行される
k分割交差検証を使ったモデル性能評価
- 学習不足(バイアス高)と、過学習(バリアンス高)のバランスをとるために、ホールドアウト法と、K分割交差検証という手法を利用する
ホールドアウト法の概要
- 推定器やハイパーパラメータのモデル選択の際に、テストデータセットを利用してしまうのはよくない。。
- モデル選択のステップように、トレーニングデータセットをさらに、「トレーニングデータセット」と「検証データセット」に分ける。
- チューニングに満足したら、テストデータセットを利用する。
k分割交差検証
- モデルのチューニングに利用される
- ホールドアウト法の強化版がk分割交差検証と思えばよい。
- トレーニングデータセットをランダムにk個に分割し、そのうちk-1個をトレーニング、1個を性能の評価に使用する
- 個々のサブセットに基づいて、モデルの平均性能を計算する
- 充分なハイパーパラメータが見つかったら、トレーニングデータセット全体でモデルを再トレーニングする→トレーニングサンプルは多ければ多いほうが良いため。
- k分割交差検証は非復元再抽出法
- 大体はk=10を使用する。サンプルが多い場合は、時間かかるので、k=5にしたりする。サンプルが少ない場合は、kを大きくしたりする。
- 層化k分割交差検証(stratified k-fold cross-validation)では、各サブセットでクラスの比率を維持する
学習曲線と検証曲線によるアルゴリズムの診断
- scikit-learnの
learning_curve
を使用する。デフォルトで、層化k分割交差検証を使って交差検証の正解率を計算する -検証曲線は、サンプルサイズではなくパラメータの値を変化させたときのスコアをプロットする。 - 検証曲線を描くには
validation_curve
を使用する
グリッドサーチによる機械学習モデルのチューニング
GridSerachCV
クラスにより、様々なハイパーパラメータから最適解を求められる
入れ子式交差検証によるアルゴリズムの選択
- パラメータチューニングを、外と内で分けて実施。例えば、5*2など。
様々な性能評価指標
- 適合率(precision), 再現率(recall), F1-score
混同行列
- 混同行列は、真陽性(true positive)・偽陽性(false positive)・真陰性(true negative)・偽陰性(false negative)を報告する正方行列
- scikit-learnでは
confusion_matrix
関数が用意されている
誤分類率・再現率、適合率、F1
- 誤分類率,(ERR) 再現率(ACC)は以下のように表される
- 真陽性率(TPR),偽陽性率(FPR)は、以下のようにあらわされる
- 適合率(PRE) , 再現率(REC)は以下尿に表される
-GridSearch
のscoringに上記の指標を用いることも可能
- 適合率(PRE)と再現率(REC)を組み合わせてたF1-scoreがよく使用される
- これらは
sklearn.metrics
モジュールからインポートできる
ROC曲線
- Receiver Operation Characteristic 曲線
- ROC曲線では、真陽性率(TPR) と、偽陽性率(FPR)が選択の基準となる。
- 対角線がランダムな推定として解釈でき、対角線を下回るものはランダムよりも劣る。
- 完璧なものは左上隅にプロットされる