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のカーネルは素晴らしいコンテンツですが、場合によっては最新の開発環境で動かないこともあるため、その際は自分でカスタマイズできる技術力も必要なんだな、と実感しました。

参考ページ

segafreder.hatenablog.com