sklearn.cross_validation.KFoldをsklearn.model_selection.KFoldに置き換えた話
背景
kaglleのTitanicで投票数が2番目のカーネルの写経をしていたところ、 カーネルで使っているsklearn.cross_validation.KFoldが、 最新のsklearnで使えなくなっており、コンパイルエラーになってしまいました。 その代わりにsklearn.model_selection.KFoldを使うよう置き換えた話です。
オリジナルソース
※ソースコード量が多いので、ポイント以外は省略します。
from sklearn.cross_validation import KFoldn
...省略
train = train.shape[0]
ntest = test.shape[0]
SEED = 0 # for reproducibility
NFOLDS = 5 # set folds for out-of-fold prediction
kf = KFold(ntrain, n_folds=NFOLDS, random_state=SEED)
...省略
for i, (train_index, test_index) in enumerate(kf):
...省略
修正後
from sklearn.model_selection import KFold ←sklearn.cross_validationをsklearn.model_selectionに変更
...省略
train = train.shape[0]
ntest = test.shape[0]
SEED = 0 # for reproducibility
NFOLDS = 5 # set folds for out-of-fold prediction
kf = KFold(n_splits=NFOLDS, shuffle=False, random_state=SEED) ←コンストラクタの引数が変わる
...省略
for i, (train_index, test_index) in enumerate(kf.split(train)): ←クラス自体をイテレータとして使うやり方から、splitメソッドを使うやり方に変更
...省略
無事、コンパイルエラー解消しました!
おわりに
kaggleのカーネルは素晴らしいコンテンツですが、場合によっては最新の開発環境で動かないこともあるため、その際は自分でカスタマイズできる技術力も必要なんだな、と実感しました。