層化K-Fold
ご覧のとおり、ランダムに分割すると各フォールド間で目的変数の分布がかなり異なります。今回のコンペでは致命的ではありませんが、目的変数に大きな不均衡がある分類コンペでは問題になる可能性があります。
これを防ぐため、目的変数で層化する層化K-Fold法を実装してみましょう。train DataFrame はすでにワークスペースに用意されています。
この演習はコースの一部です
Pythonで挑むKaggleコンペティション
演習の手順
- 3 分割でシャッフルありの
StratifiedKFoldオブジェクトを作成します。 str_kfオブジェクトを使って各分割をループします。層化は "interest_level" 列に基づきます。- 各分割で、
train_indexとtest_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