Nghiên cứu tình huống bệnh thận I: Bộ gán giá trị cho biến phân loại
Giờ bạn sẽ tiếp tục khám phá cách dùng pipeline với một bộ dữ liệu cần tiền xử lý phức tạp hơn nhiều. Bộ chronic kidney disease dataset chứa cả đặc trưng phân loại và số, nhưng có rất nhiều giá trị khuyết. Mục tiêu là dự đoán ai mắc bệnh thận mạn tính dựa trên các chỉ số máu làm đặc trưng.
Như Sergey đề cập trong video, bạn sẽ làm quen với thư viện mới, sklearn_pandas, cho phép bạn xâu chuỗi nhiều bước xử lý hơn bên trong một pipeline so với những gì scikit-learn hỗ trợ hiện tại. Cụ thể, bạn có thể dùng lớp DataFrameMapper() để áp dụng bất kỳ bộ biến đổi tương thích sklearn nào lên các cột của DataFrame, với đầu ra có thể là mảng NumPy hoặc DataFrame.
Chúng tôi cũng đã tạo một bộ biến đổi tên là Dictifier để bao gói thao tác chuyển đổi DataFrame bằng .to_dict("records") mà bạn không cần tự làm (và để nó hoạt động trong pipeline). Cuối cùng, chúng tôi cũng cung cấp danh sách tên đặc trưng trong kidney_feature_names, tên biến đích trong kidney_target_name, ma trận đặc trưng trong X, và biến đích trong y.
Trong bài này, nhiệm vụ của bạn là áp dụng SimpleImputer của sklearn để gán giá trị cho tất cả các cột phân loại trong bộ dữ liệu. Bạn có thể tham khảo cách tạo mapper cho biến số làm mẫu. Lưu ý các tham số input_df=True và df_out=True? Điều này giúp bạn làm việc với DataFrame thay vì mảng. Mặc định, các bộ biến đổi sẽ nhận một mảng numpy của các cột đã chọn làm đầu vào, và vì thế đầu ra của DataFrame mapper cũng là một mảng. Lịch sử, các bộ biến đổi của scikit-learn được thiết kế để làm việc với mảng numpy, không phải pandas DataFrame, dù giao diện chỉ mục cơ bản của chúng khá giống nhau.
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
- Áp dụng bộ gán giá trị cho biến phân loại bằng
DataFrameMapper()vàSimpleImputer().SimpleImputer()không cần truyền đối số nào. Các cột nằm trongcategorical_columns. Nhớ chỉ địnhinput_df=Truevàdf_out=True, và dùngcategory_featurelàm biến vòng lặp trong list comprehension.
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 necessary modules
from sklearn_pandas import DataFrameMapper
from sklearn.impute import SimpleImputer
# Check number of nulls in each feature column
nulls_per_column = X.isnull().sum()
print(nulls_per_column)
# Create a boolean mask for categorical columns
categorical_feature_mask = X.dtypes == object
# Get list of categorical column names
categorical_columns = X.columns[categorical_feature_mask].tolist()
# Get list of non-categorical column names
non_categorical_columns = X.columns[~categorical_feature_mask].tolist()
# Apply numeric imputer
numeric_imputation_mapper = DataFrameMapper(
[([numeric_feature], SimpleImputer(strategy="median")) for numeric_feature in non_categorical_columns],
input_df=True,
df_out=True
)
# Apply categorical imputer
categorical_imputation_mapper = ____(
[(category_feature, ____) for ____ in ____],
input_df=____,
df_out=____
)