编写我的第一个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
最佳答案Functiontransformer用于将函数“提升”到转换,我认为这可以帮助完成一些数据清理步骤.想象一下,你有一个主要是数字的数组,你想用变换器转换它,如果它得到一个nan(如normalize),它将会出错.你最终会得到像这样的东西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函数变换器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)