为分类变量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'”