始める無料で始める

カテゴリ列のエンコード II: OneHotEncoder

さて、カテゴリ列を数値にエンコードできました。では、いよいよパイプラインと XGBoost に進めるでしょうか? まだです!このデータセットのカテゴリ列には、要素同士に自然な順序関係がありません。例として、LabelEncoder を使った場合、NeighborhoodCollgCr5Veenker24Crawfor6 にエンコードされました。VeenkerCrawforCollgCr より「大きい」のでしょうか? いいえ。モデルがこのような自然な順序を仮定してしまうと、性能が下がる可能性があります。

そのため、もう一段階必要な処理があります。ワンホットエンコーディングを適用して、二値の「ダミー」変数を作成する必要があります。これは scikit-learn の OneHotEncoder を使って行えます。

この演習はコースの一部です

XGBoost で学ぶ極限の勾配ブースティング

コースを見る

演習の手順

  • sklearn.preprocessing から OneHotEncoder をインポートします。
  • OneHotEncoder オブジェクト ohe を作成します。キーワード引数 sparse=False を指定します。
  • .fit_transform() メソッドを使って OneHotEncoderdf に適用し、結果を df_encoded として保存します。出力は NumPy の配列になります。
  • df_encoded の先頭5行を表示し、さらに dfdf_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)
コードを編集して実行