Kaggleでスコアを上げるために、スタッキングを勉強しようと思い立ちました。
幸い、スタッキングについてはTitanicコンペのカーネルで丁寧に説明されているものがあり、それを解読することにします。
ところが、、、ちょこちょこエラーが発生し、コード通りでは動きません。
幸い自分がちょっと調べたらわかるくらいの範囲のエラーでしたので、修正できました。
修正箇所と内容をメモしておこうと思います。(KFoldの使い方が古いようです)
同じようにこのカーネルで勉強しようと思っている方の助けになれば幸いです。
対象のカーネルはこちらです↓
https://www.kaggle.com/arthurtok/introduction-to-ensembling-stacking-in-python
修正箇所
修正するのは3か所です。
修正その1

まずはしょっぱなのライブラリのインポートで発生します。
”No module named ‘sklearn.cross_validation”
とのことですので、こうKFoldのライブラリのインポートの仕方が異なるようです
from sklearn.cross_validation import KFold
(After)
from sklearn.model_selection import KFold
修正その2
お次はこちら

Helperクラスの宣言の箇所です、
6行目の kf=KFold( ~
の箇所で、n_foldsが指定されていますが、そんな引数は想定されていなかったよう。
KFoldの引数は、分割数を示すn_splitsと、シャッフル、シードの3つだった記憶ですので、そのように変更するとエラーが消えます。
kf = KFold(ntrain, n_folds=NFOLDS, random_state=SEED)
(After)
kf = KFold(n_splits=NFOLDS, random_state=SEED)
※やっぱり正しいようです。(下記リンクはsklearnのHP)
https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html
修正その3

こちらはget_oof関数を実行時に、get_oof関数内のKFoldがうまくできなかったみたいです。
ですので、get_oof関数内のコードを修正します。
ちょっとさかのぼって、以下のキャプチャのところを見てください。

修正箇所は6行目です。またもやKFoldの使い方の問題ですね。
for i, (train_index, test_index) in enumerate(kf):
(After)
for i, (train_index, test_index) in enumerate(kf.split(x_train,y_train):
※ここを修正して、その前に一度実行した箇所をもう一度実行していくと、

こんなふうに”Survived”でキーエラーが出てきますが、これは無視して大丈夫です。
一度trainから”Survived”カラムをドロップして、もう一度trainから”Survived”カラムをドロップする、という操作になってしまいます。
当然2回目はドロップした後なので、Survivedはtrain内にありませんよね。
本来2回実行する予定ではないところを2回実行したために出たエラーなので、無視でOKです。
おわり
というわけで、エラーはみんなKFold関連のものでした。
このカーネルめちゃくちゃ勉強になるので、もしエラー出るからいいや、、と敬遠していた方いたらぜひ取り組んでみてください!
最後まで読んでいただきありがとうございました。