Mengodekan kolom kategorikal I: LabelEncoder
Sekarang setelah Anda melihat apa saja yang perlu dilakukan agar data perumahan siap untuk XGBoost, mari kita jalani prosesnya selangkah demi selangkah.
Pertama, Anda perlu mengisi nilai yang hilang—seperti yang Anda lihat sebelumnya, kolom LotFrontage memiliki banyak nilai hilang. Lalu, Anda perlu mengodekan semua kolom kategorikal dalam himpunan data menggunakan one-hot encoding agar nilainya direpresentasikan secara numerik. Anda dapat menonton video ini dari Supervised Learning with scikit-learn sebagai pengingat konsep tersebut.
Data memiliki lima kolom kategorikal: MSZoning, PavedDrive, Neighborhood, BldgType, dan HouseStyle. Scikit-learn memiliki fungsi LabelEncoder yang mengonversi nilai pada setiap kolom kategorikal menjadi bilangan bulat. Anda akan berlatih menggunakannya di sini.
Latihan ini adalah bagian dari kursus
Extreme Gradient Boosting dengan XGBoost
Petunjuk latihan
- Impor
LabelEncoderdarisklearn.preprocessing. - Isi nilai yang hilang pada kolom
LotFrontagedengan0menggunakan.fillna(). - Buat mask boolean untuk kolom kategorikal. Anda dapat melakukannya dengan memeriksa apakah
df.dtypessama denganobject. - Buat objek
LabelEncoder. Anda dapat melakukannya dengan cara yang sama seperti menginstansiasi estimator scikit-learn lainnya. - Kodekan semua kolom kategorikal menjadi bilangan bulat menggunakan
LabelEncoder(). Untuk melakukannya, gunakan metode.fit_transform()dariledalam fungsi lambda yang disediakan.
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
# 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())