【问题标题】:How to select only few columns in scikit learn column selector pipeline?如何在 scikit learn 列选择器管道中只选择几列?
【发布时间】:2020-10-06 12:25:45
【问题描述】:

我正在阅读有关列转换器的 scikitlearn 教程。给定的示例 (https://scikit-learn.org/stable/modules/generated/sklearn.compose.make_column_selector.html#sklearn.compose.make_column_selector) 有效,但是当我尝试仅选择几列时,它给了我错误。

MWE

import numpy as np
import pandas as pd
import seaborn as sns

from sklearn.compose import make_column_transformer
from sklearn.compose import make_column_selector

df = sns.load_dataset('tips')
mycols = ['tip','sex']


ct = make_column_transformer(make_column_selector(pattern=mycols)
ct.fit_transform(df)

必填

我只想要输出中的选择列。

注意
当然,我知道我可以做df[mycols],我正在寻找 scikit 学习管道示例。

【问题讨论】:

  • 你的 scikit 和 python 版本是什么?
  • sklearn.__version__ # '0.22.2.post1'

标签: python pandas scikit-learn


【解决方案1】:

如果你不介意mlxtend,它有内置的转换器。

使用 mlxtend

from mlxtend.feature_selection import ColumnSelector

pipe = ColumnSelector(mycols)
pipe.fit_transform(df)

对于 sklearn >= 0.20

from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
import seaborn as sns

df = sns.load_dataset('tips')
mycols = ['tip','sex']

pipeline = Pipeline([
    ("selector", ColumnTransformer([
        ("selector", "passthrough", mycols)
    ], remainder="drop"))
])

pipeline.fit_transform(df)

对于 sklearn
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.pipeline import Pipeline

class FeatureSelector(BaseEstimator, TransformerMixin):
    def __init__(self, columns):
        self.columns = columns

    def fit(self, X, y=None):
        return self

    def transform(self, X, y=None):
        return X[self.columns]


pipeline = Pipeline([('selector', FeatureSelector(columns=mycols))
                     ])

pipeline.fit_transform(df)[:5]

【讨论】:

  • 但是mlextendColumnSelector在管道中跟随编码器时效果不佳。在我的情况下,为此编写自定义估算器已经解决,我可以在其中获得数字和分类 pieplines 所需的列名。
【解决方案2】:

我可能有点晚了,但您也可以使用 sklearn 的 ColumnTranformer() 选择列,方法是将转换器设置为“passthrough”和 remainder='drop'

from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline


pipe = Pipeline([
    ("selector", ColumnTransformer([
        ("selector", "passthrough", mycols)
    ], remainder="drop"))
])

【讨论】:

    猜你喜欢
    • 2015-08-10
    • 1970-01-01
    • 2020-12-29
    • 2018-02-24
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    相关资源
    最近更新 更多