scikit-learn--cross-validated(クロス検証)

1497 ワード

scikit-learnではtrain_を使用できますtest_splitは、データセットをトレーニングデータとテストデータに迅速に分けます.異なる設定(スーパーパラメータ)を評価すると、モデルが最適になるまでパラメータを調整し続けるため、テストセットにオーバーフィットのリスクが残っています.この過程で,テストセットに関する知識がモデルに「漏れる」ことになり,評価指標も一般化しなくなった.この問題を解決するために、データセットの一部を「検証セット」として、トレーニングセットでデータを訓練し、モデルが成功するように見えるまで検証セットで検証し、テストセットで最終的に評価します.しかしながら,データセットを3つの部分に分け,モデルを学習するためのトレーニングデータが減少し,モデル結果はデータセットを分割する特定の乱数に依存する.cross‐validation(CV)プロセスを用いてこの問題を解決した.テスト・データセットは、最終的な評価に使用されますが、検証セットは不要です.k折CV法は,訓練データをk個の小データセットに分割し,k−1折データを訓練に用い,残りのデータを評価に用いる.k折CV法は再帰計算における平均値をモデル評価として用い,この方法は大きな計算量をもたらすが,データの浪費はない.

CV指標の計算


CVの最も簡単な方法はcross_を使うことですval_score関数.
from sklearn.model_selection import cross_val_score
clf = svm.SVC(kernel='linear', C=1)
scores = cross_val_score(clf, iris.data, iris.target, cv=5)
scores        

CV反復ごとのスコアは、モデルのスコア計算計算計算をデフォルトで使用します.scoringパラメータ(scoring='f 1_など)で変更することもできます.macro'. パラメータcvが整数の場合は、KFoldまたはStratifiedKFoldポリシーを使用し、他の分割ポリシーを使用することもできます.cross_val_preditは、各入力について、テストセットに入力された予測値を返します.cvポリシーが入力したすべての要素をテストセットに一度割り当てた場合にのみ使用できます.

階層データのクロス検証(Cross-validation iterators with stratification based on class labels.)


アンバランス分類の問題については、StratifiedKFoldおよびStratifiedShuffleSplitを使用して、トレーニングおよびテストセットにおいて近似的な周波数を維持することを推奨します.

パケットデータのクロス検証


GroupKFold LeaveOneGroupOut LeavePGroupsOut GroupShuffleSplit

時系列データのクロス検証


TimeSeriesSplit
ソース:http://scikit-learn.org/stable/modules/cross_validation.html