开始使用免费开始使用

肾病案例研究 I:分类变量插补器

现在,您将继续练习在需要更多数据整理的数据集上使用流水线。慢性肾病数据集同时包含分类特征和数值特征,但缺失值很多。本练习的目标是:基于多种血液指标等特征,预测哪些人患有慢性肾病。

正如 Sergey 在视频中提到的,您将接触一个新库 sklearn_pandas。它可以在流水线中串联更多预处理步骤,超出当前 scikit-learn 原生所支持的范围。具体来说,您可以使用 DataFrameMapper() 类,将任意兼容 sklearn 的变换器应用到 DataFrame 的列上,且输出可以是 NumPy 数组或 DataFrame。

我们还创建了一个名为 Dictifier 的变换器,用于封装对 DataFrame 调用 .to_dict("records") 的过程,避免您显式编写该步骤(并确保其可在流水线中工作)。此外,我们还提供了特征名列表 kidney_feature_names、目标名 kidney_target_name、特征 X 和目标 y

在本练习中,您的任务是使用 sklearn 的 SimpleImputer 对数据集中的所有分类列进行插补。您可以参考数值插补映射器的创建方式作为模板。注意关键字参数 input_df=Truedf_out=True 吗?这样您就可以直接处理 DataFrame,而不是数组。默认情况下,变换器接收所选列构成的 numpy 数组作为输入,因此 DataFrame 映射器的输出也会是数组。历史上,scikit-learn 的变换器主要面向 numpy 数组设计,而不是 pandas DataFrame,尽管它们的基本索引接口相似。

本练习是课程的一部分

使用 XGBoost 的极端梯度提升

查看课程

练习说明

  • 使用 DataFrameMapper()SimpleImputer() 应用分类变量插补。SimpleImputer() 不需要传入任何参数。分类列包含在 categorical_columns 中。请务必指定 input_df=Truedf_out=True,并在列表推导中使用 category_feature 作为迭代变量。

交互式实操练习

通过完成这段示例代码来试试这个练习。

# 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=____
                                               )
编辑并运行代码