カテゴリ列のエンコード II: OneHotEncoder
さて、カテゴリ列を数値にエンコードできました。では、いよいよパイプラインと XGBoost に進めるでしょうか? まだです!このデータセットのカテゴリ列には、要素同士に自然な順序関係がありません。例として、LabelEncoder を使った場合、Neighborhood の CollgCr は 5、Veenker は 24、Crawfor は 6 にエンコードされました。Veenker は Crawfor や CollgCr より「大きい」のでしょうか? いいえ。モデルがこのような自然な順序を仮定してしまうと、性能が下がる可能性があります。
そのため、もう一段階必要な処理があります。ワンホットエンコーディングを適用して、二値の「ダミー」変数を作成する必要があります。これは scikit-learn の OneHotEncoder を使って行えます。
この演習はコースの一部です
XGBoost で学ぶ極限の勾配ブースティング
演習の手順
sklearn.preprocessingからOneHotEncoderをインポートします。OneHotEncoderオブジェクトoheを作成します。キーワード引数sparse=Falseを指定します。.fit_transform()メソッドを使ってOneHotEncoderをdfに適用し、結果をdf_encodedとして保存します。出力は NumPy の配列になります。df_encodedの先頭5行を表示し、さらにdfとdf_encodedの shape も出力して違いを確認します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Import OneHotEncoder
____
# Create OneHotEncoder: ohe
ohe = ____
# Apply OneHotEncoder to categorical columns - output is no longer a dataframe: df_encoded
df_encoded = ____
# Print first 5 rows of the resulting dataset - again, this will no longer be a pandas dataframe
print(df_encoded[:5, :])
# Print the shape of the original DataFrame
print(df.shape)
# Print the shape of the transformed array
print(df_encoded.shape)