Mã hóa cột phân loại I: LabelEncoder
Bây giờ bạn đã thấy cần làm gì để chuẩn bị dữ liệu nhà ở cho XGBoost, hãy đi qua quy trình từng bước.
Trước tiên, bạn sẽ cần điền giá trị khuyết — như đã thấy, cột LotFrontage có khá nhiều giá trị thiếu. Tiếp theo, bạn cần mã hóa mọi cột phân loại trong tập dữ liệu bằng one-hot encoding để chúng được biểu diễn dưới dạng số. Bạn có thể xem video này từ khóa học Supervised Learning with scikit-learn để ôn lại ý tưởng.
Dữ liệu có năm cột phân loại: MSZoning, PavedDrive, Neighborhood, BldgType và HouseStyle. Scikit-learn có hàm LabelEncoder chuyển các giá trị trong mỗi cột phân loại thành số nguyên. Bạn sẽ thực hành sử dụng công cụ này tại đây.
Bài tập này là một phần của khóa học
Gradient Boosting Cực Mạnh với XGBoost
Hướng dẫn bài tập
- Import
LabelEncodertừsklearn.preprocessing. - Điền các giá trị thiếu trong cột
LotFrontagebằng0với.fillna(). - Tạo một mặt nạ boolean cho các cột phân loại. Bạn có thể làm điều này bằng cách kiểm tra
df.dtypescó bằngobjecthay không. - Tạo một đối tượng
LabelEncoder. Bạn có thể khởi tạo theo cách tương tự như bất kỳ estimator nào của scikit-learn. - Mã hóa tất cả các cột phân loại thành số nguyên bằng
LabelEncoder(). Để làm điều này, hãy dùng phương thức.fit_transform()củaletrong hàm lambda đã cung cấp.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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())