カテゴリ列のエンコード I: LabelEncoder
XGBoost で住宅価格データを扱うために必要な準備が見えたところで、手順を一つずつ進めていきます。
まずは欠損値の補完です。先ほど見たように、LotFrontage 列には多くの欠損があります。次に、データセット内のカテゴリ列を one-hot エンコーディングで数値に変換する必要があります。アイデアの復習には、Supervised Learning with scikit-learn のこの動画をご覧ください。
このデータには 5 つのカテゴリ列があります:MSZoning、PavedDrive、Neighborhood、BldgType、HouseStyle。Scikit-learn には、各カテゴリ列の値を整数に変換する LabelEncoder 関数があります。ここではこれを使う練習をします。
この演習はコースの一部です
XGBoost で学ぶ極限の勾配ブースティング
演習の手順
sklearn.preprocessingからLabelEncoderをインポートします。.fillna()を使って、LotFrontage列の欠損値を0で埋めます。- カテゴリ列用のブールマスクを作成します。
df.dtypesがobjectに等しいかどうかで判定できます。 LabelEncoderオブジェクトを作成します。これは他の scikit-learn 推定器と同様にインスタンス化します。- すべてのカテゴリ列を
LabelEncoder()で整数にエンコードします。これには、与えられたラムダ関数内でleの.fit_transform()メソッドを使います。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Import LabelEncoder
____
# Fill missing values with 0
df.LotFrontage = ____
# Create a boolean mask for categorical columns
categorical_mask = (____ == ____)
# Get list of categorical column names
categorical_columns = df.columns[categorical_mask].tolist()
# Print the head of the categorical columns
print(df[categorical_columns].head())
# Create LabelEncoder object: le
le = ____
# Apply LabelEncoder to categorical columns
df[categorical_columns] = df[categorical_columns].apply(lambda x: ____(x))
# Print the head of the LabelEncoded categorical columns
print(df[categorical_columns].head())