您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 管道中的sklearn函数变换器

5b51 2022/1/14 8:21:52 python 字数 3205 阅读 496 来源 www.jb51.cc/python

编写我的第一个sk-learn管道时,我只是遇到一些问题,只有一部分列被放入管道:mydf = pd.DataFrame({'classLabel':[0,0,0,1,1,0,0,0], 'categorical':[7,8,9,5,7,5,6,4], 'numeric1':[7,8

概述

编写我的第一个sk-learn管道时,我只是遇到一些问题,只有一部分列被放入管道:

mydf = pd.DataFrame({'classLabel':[0,1,0],'categorical':[7,8,9,5,7,6,4],'numeric1':[7,'numeric2':[7,"N.A"]})
columnsNumber = ['numeric1']
XoneColumn = X[columnsNumber]

我使用functionTransformer,如:

def extractSpecificColumn(X,columns):
    return X[columns]

pipeline = Pipeline([
    ('features',FeatureUnion([
        ('continuous',Pipeline([
            ('numeric',FunctionTransformer(columnsNumber)),('scale',StandardScaler())
        ]))
    ],n_jobs=1)),('estimator',RandomForestClassifier(n_estimators=50,criterion='entropy',n_jobs=-1))
])

cv.cross_val_score(pipeline,XoneColumn,y,cv=folds,scoring=kappascore)

这导致:TypeError:启用函数转换器时,’list’对象不可调用.

编辑:

如果我实例化如下所示的ColumnExtractor,则不会返回错误.但是不是函数变换器只是意味着像这样的简单情况,应该只是工作吗?

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

    def transform(self,X,*_):
        return X[self.columns]

    def fit(self,*_):
        return self

df.fillna(0,inplace=True)
...
cross_val_score(pipeline,...)

但也许你只有一次变换需要填充,所以不要像上面那样使用fillna,而是拥有

normalize = make_pipeline(
    FunctionTransformer(np.nan_to_num,validate=False),Normalize()
)

最终会根据需要对其进行标准化.然后,您可以在更多地方使用该代码段而不会乱丢您的代码.fillna(0)

在你的例子中,你传入的是”numeric1′]这是一个列表,而不是像类似类型的df [[‘numeric1’]]那样的提取器.你可能想要的更像是

FunctionTransformer(operator.itemgetter(columns))

但是仍然无法工作,因为最终传递到FunctionTransformer的对象将是np.array而不是DataFrame.

为了对DataFrame的特定列进行操作,您可能希望使用像sklearn-pandas这样的库,它允许您按列定义特定的变换器.

总结

以上是编程之家为你收集整理的python – 管道中的sklearn函数变换器全部内容,希望文章能够帮你解决python – 管道中的sklearn函数变换器所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶