交差検証

scikit-learn による教師あり学習

George Boorman

Core Curriculum Manager, DataCamp

交差検証の動機

  • モデルのパフォーマンスは、データの分割方法によって変動する

  • 未知のデータに対するモデルの汎化能力を表すものではない

解決策 交差検証!

scikit-learn による教師あり学習

交差検証の基礎

表の見出し: split 1、fold 1、fold 2、fold 3、fold 4、fold 5

scikit-learn による教師あり学習

交差検証の基礎

1分割 テストセット用

scikit-learn による教師あり学習

交差検証の基礎

2~5分割 学習データ

scikit-learn による教師あり学習

交差検証の基礎

これらの分割でメトリックを計算

scikit-learn による教師あり学習

交差検証の基礎

2分割 テストデータ

scikit-learn による教師あり学習

交差検証の基礎

folds 1, 3, 4, 5トレーニングデータ

scikit-learn による教師あり学習

交差検証の基礎

メトリクスを再計算

scikit-learn による教師あり学習

交差検証の基礎

3分割で繰り返す

scikit-learn による教師あり学習

交差検証の基礎

4分割で繰り返す

scikit-learn による教師あり学習

交差検証の基礎

5分割で繰り返す

scikit-learn による教師あり学習

交差検証とモデル性能

  • 5分割 = 5-fold CV

  • 10分割= 10-fold CV

  • k分割 = k fold CV

  • 分割が多い = 計算コストが高い

scikit-learn による教師あり学習

scikit-learn における交差検証

from sklearn.model_selection import cross_val_score, KFold

kf = KFold(n_splits=6, shuffle=True, random_state=42)
reg = LinearRegression()
cv_results = cross_val_score(reg, X, y, cv=kf)
scikit-learn による教師あり学習

交差検証の性能を評価する

print(cv_results)
[0.70262578, 0.7659624, 0.75188205, 0.76914482, 0.72551151, 0.73608277]
print(np.mean(cv_results), np.std(cv_results))
0.7418682216666667 0.023330243960652888
print(np.quantile(cv_results, [0.025, 0.975]))
array([0.7054865, 0.76874702])
scikit-learn による教師あり学習

練習しましょう!

scikit-learn による教師あり学習

Preparing Video For Download...