Studi kasus penyakit ginjal I: Categorical Imputer
Sekarang Anda akan melanjutkan eksplorasi penggunaan pipeline dengan himpunan data yang memerlukan penanganan jauh lebih kompleks. Himpunan data penyakit ginjal kronis berisi fitur kategorikal dan numerik, tetapi memiliki banyak nilai hilang. Tujuannya di sini adalah memprediksi siapa yang memiliki penyakit ginjal kronis berdasarkan berbagai indikator darah sebagai fitur.
Seperti yang disebutkan Sergey dalam video, Anda akan diperkenalkan dengan pustaka baru, sklearn_pandas, yang memungkinkan Anda merangkai lebih banyak langkah pemrosesan di dalam sebuah pipeline dibandingkan yang saat ini didukung oleh scikit-learn. Secara khusus, Anda dapat menggunakan kelas DataFrameMapper() untuk menerapkan transformer apa pun yang kompatibel dengan sklearn pada kolom DataFrame, dengan keluaran yang dapat berupa array NumPy atau DataFrame.
Kami juga membuat sebuah transformer bernama Dictifier yang membungkus proses mengonversi DataFrame menggunakan .to_dict("records") tanpa perlu Anda lakukan secara eksplisit (dan agar dapat bekerja di dalam pipeline). Terakhir, kami juga menyediakan daftar nama fitur dalam kidney_feature_names, nama target dalam kidney_target_name, fitur pada X, dan target pada y.
Dalam latihan ini, tugas Anda adalah menerapkan SimpleImputer dari sklearn untuk melakukan imputasi pada semua kolom kategorikal dalam himpunan data. Anda dapat merujuk pada cara pembuatan numeric imputation mapper sebagai templat. Perhatikan argumen kata kunci input_df=True dan df_out=True. Ini agar Anda dapat bekerja dengan DataFrame alih-alih array. Secara bawaan, transformer menerima array numpy dari kolom yang dipilih sebagai masukan, dan sebagai akibatnya, keluaran DataFrame mapper juga berupa array. Transformer scikit-learn secara historis dirancang untuk bekerja dengan array numpy, bukan DataFrame pandas, meskipun antarmuka pengindeksan dasarnya serupa.
Latihan ini adalah bagian dari kursus
Extreme Gradient Boosting dengan XGBoost
Petunjuk latihan
- Terapkan categorical imputer menggunakan
DataFrameMapper()danSimpleImputer().SimpleImputer()tidak memerlukan argumen apa pun. Kolom-kolomnya terdapat padacategorical_columns. Pastikan untuk menyetelinput_df=Truedandf_out=True, serta gunakancategory_featuresebagai variabel iterator Anda dalam list comprehension.
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
# 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=____
)