始める無料で始める

層化K-Fold

ご覧のとおり、ランダムに分割すると各フォールド間で目的変数の分布がかなり異なります。今回のコンペでは致命的ではありませんが、目的変数に大きな不均衡がある分類コンペでは問題になる可能性があります。

これを防ぐため、目的変数で層化する層化K-Fold法を実装してみましょう。train DataFrame はすでにワークスペースに用意されています。

この演習はコースの一部です

Pythonで挑むKaggleコンペティション

コースを見る

演習の手順

  • 3 分割でシャッフルありの StratifiedKFold オブジェクトを作成します。
  • str_kf オブジェクトを使って各分割をループします。層化は "interest_level" 列に基づきます。
  • 各分割で、train_indextest_index を使って訓練フォールドとテストフォールドを選択します。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Import StratifiedKFold
from sklearn.model_selection import StratifiedKFold

# Create a StratifiedKFold object
str_kf = ____(n_splits=____, shuffle=____, random_state=123)

# Loop through each split
fold = 0
for train_index, test_index in ____.____(train, train['interest_level']):
    # Obtain training and testing folds
    cv_train, cv_test = ____.iloc[____], ____.iloc[____]
    print('Fold: {}'.format(fold))
    print('CV train shape: {}'.format(cv_train.shape))
    print('Medium interest listings in CV train: {}\n'.format(sum(cv_train.interest_level == 'medium')))
    fold += 1
コードを編集して実行