python - 为分类变量 sklearn 创建我的自定义输入器

标签 python pandas machine-learning scikit-learn sklearn-pandas

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

例如,如果一列 "Workclass"有一个 Nan值,将其替换为 "No Workclass" .

我这样做

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

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

最佳答案

您可以使用 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

关于python - 为分类变量 sklearn 创建我的自定义输入器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61278575/

相关文章:

python - Pandas 中的日期格式

python - 如何从 3 类数据帧的前 2 类中删除 1 行?

python - Tensorflow 将 tf.Variable 数组格式化为字符串作为另一个文件中的输入

python-3.x - 无法导入tpot

python - 使用 Python 获取通过 SMS 发送的 Twitter 消息

python - 如何使用 beautifulsoup 获取隐藏输入的值?

pandas - seabornfacetgrid点图问题

hadoop - OpenIMAJ 库中的 K-Means 聚类

python - 如何处理已安装模块的方法的轻微更改?

python - 当将索引定位为 x 轴时,从 df.pivot 绘图返回 AttributeError