Validationの備忘録です
Visualizing cross-validation behavior in scikit-learn — scikit-learn 0.24.1 documentationVisualizing cross-validation behavior in scikit-learn — scikit-learn 0.24.1 documentation
基本的な分割方法
Kfold
全てのデータが一度は検証データとして使われます。ただ、不均衡データには不向きです。Fold 0を見ると3クラスあるうち、茶色のクラスが学習データに含まれていないことがわかります。不均衡データに対して適用した場合うまく予測することができなくなってしまいます。
GroupKfold
訓練データと検証データで同じグループが含まれないようにする分割方法です。訓練データと検証データで同じユーザのログを含めたくない場合に使えます。
ShuffleSplit
データを最初にシャッフルしてから分割します。なので分割した各Foldでデータの重複を許容します。
StratifiedKFold
不均衡データに適した分割方法となります。訓練データとテストデータにクラスがうまく分割されていることがわかります。
複合的な分割
GroupShuffleSplit
GroupKfoldとShuffleSplitを混ぜた分割方法です。訓練データにはテストデータと同じグループは含まれないようランダムにシャッフルしてるので、検証データとして一度も使われてない Groupがあります。
StratifiedShuffleSplit
StratifiedKFoldとShuffleSplitを混ぜた分割方法です。クラスの分布を担保したまま分割してるので不均衡データに強い分割方法となります。
ランダムにシャッフルしてるので、検証データとして一度も使われてないデータも出てきます。
StratifiedGroupKFold
StratifiedKFoldとGroupKfoldを複合させた分割方法です。クラスの分布を担保し、かつ訓練データと検証データで同じグループのユーザが含まれないよう分割します。不均衡データかつ、訓練データとテストデータに同じユーザが含まれている場合リークを防ぐのに役立ちます。
Stratified Group KFoldを実装してみた - Naoism's Blog
時系列データの分割
目的としてはGroupKFoldと似てますが、時系列データは過去のデータしか使うことができないため、未来のデータを訓練データに含めないよう分割する必要があります。