kfoldとその種類について
kfold
- 通常のランダムのスプリット
StratifiedKFold
- 非対称データセットに対して同じ比率でfoldを切るとき
- カテゴリ変数を目的にするだけでなく、回帰でもbinを切れば使える
from sklearn.model_selection import StratifiedKFold
skf = StratifiedKFold(n_splits=5,shuffle=True,random_state=777)
bin_ys = ys // 0.5
for idx, (trn_idx, val_idx) in enumerate(skf.split(xs, bin_ys)):
print(f'now fold={idx:02d} split size is', skf.get_n_splits())
trn_data = lgb.Dataset(xs.iloc[trn_idx], label=ys.values[trn_idx], categorical_feature=cats_index)
val_data = lgb.Dataset(xs.iloc[val_idx], label=ys.values[val_idx], categorical_feature=cats_index)
num_round = n_estimators
clf = lgb.train(param, trn_data, num_round, valid_sets=[
trn_data, val_data], verbose_eval=verbose, early_stopping_rounds=early_stopping_rounds)
oof_predictions[val_idx] = clf.predict(xs.iloc[val_idx])
test_predictions += clf.predict(XT) / skf.get_n_splits()
....
GroupKFold
- 時系列など
- 並び順を保持して、ブロックでKFoldを分割する