为分类变量sklearn创建我的自定义Imputer

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为分类变量sklearn创建我的自定义Imputer相关的知识,希望对你有一定的参考价值。

我有一个缺少很多分类值的数据集,我想制作一个自定义填充物,它将用等于"no-variable_name"的值填充空值。

例如,如果列"Workclass"的值为Nan,则将其替换为"No Workclass"

我这样做

X_train['workclass'].fillna("No workclass", inplace = True)

但是我想创建一个Imputer,所以我可以在管道中传递它。

答案

您可以使用TransformerMixin定义自定义转换器。这是一个简单的示例,该示例如何定义一个简单的转换器并将其包含在管道中:

TransformerMixin

想法是适合使用df = pd.DataFrame('workclass':['class1', np.nan, 'Some other class', 'class1', np.nan, 'class12', 'class2', 'class121'], 'color':['red', 'blue', np.nan, 'pink', 'green', 'magenta', np.nan, 'yellow']) # train test split of X df_train = df[:3] df_test = df[3:] print(df_test) workclass color 3 class1 pink 4 NaN green 5 class12 magenta 6 class2 NaN 7 class121 yellow 数据框,并在df_train上复制转换。我们可以定义继承自df_test

的自定义转换类
TransformerMixin

然后将其包含在您的管道中(仅在此处使用from sklearn.pipeline import Pipeline from sklearn.base import TransformerMixin class InputColName(TransformerMixin): def fit(self, X, y): self.fill_with = X.columns return self def transform(self, X): return np.where(X.isna(), 'No ' + self.fill_with, X) 来使示例保持简单)并使其与训练数据匹配:

InputColName

现在,如果我们尝试使用看不见的数据进行转换:

pipeline = Pipeline(steps=[
  ('inputter', InputColName())
])
pipeline.fit(df_train)
另一答案

您可以定义一个自定义函数并使用print(pd.DataFrame(pipeline.transform(df_test), columns=df.columns)) workclass color 0 class1 pink 1 No workclass green 2 class12 magenta 3 class2 No color 4 class121 yellow 进行调用:

FunctionTransformer
另一答案

您可以像这样自定义FunctionTransformer

from sklearn.preprocessing import FunctionTransformer

def custom_fillna(X):
    return X.fillna('NONE')

custom_imputer = FunctionTransformer(custom_fillna)
custom_imputer.transform(X)
simpleImputer

以上是关于为分类变量sklearn创建我的自定义Imputer的主要内容,如果未能解决你的问题,请参考以下文章

机器学习实战基础:sklearn中的数据预处理和特征工程 数据预处理 Preprocessing & Impute 之 处理分类特征:处理连续性特征 二值化与分段

机器学习实战基础:sklearn中的数据预处理和特征工程 数据预处理 Preprocessing & Impute 之 处理分类特征:处理连续性特征 二值化与分段

sklearn.impute.IterativeImputer 的实现

尽管安装了最新的 sklearn (0.19.1),但出现“ModuleNotFoundError: No module named 'sklearn.impute'”

GridSearchCV 的 sklearn 中的自定义“k 精度”评分对象

No module named 'sklearn.impute',更新scikit-learn