sklearn使用make_pipeline触发Last step of Pipeline should implement fit错误如何解决
sklearn pipeline构建报错解决方案
问题原因
你混淆了sklearn.pipeline下两个API的使用规则:
Pipeline类的构造参数是由(步骤名, 估计器)元组组成的列表,支持自定义每个步骤的名称make_pipeline是Pipeline的简化工厂函数,入参直接按顺序传入各个估计器对象即可,会自动以小写类名的形式为每个步骤生成默认名称,不接受列表作为入参
你给make_pipeline传入了整个列表,函数会把这个列表识别为pipeline的第一个(也是唯一一个)步骤,而列表本身没有实现fit方法,所以触发类型报错。
修复方案
有两种正确写法可选:
方案1:继续使用make_pipeline(不需要自定义步骤名时推荐)
直接按顺序传入两个估计器对象即可:
from sklearn.linear_model import Lasso from sklearn.preprocessing import PolynomialFeatures from sklearn.pipeline import make_pipeline pipeline = make_pipeline( PolynomialFeatures(include_bias=False), Lasso(fit_intercept=True, max_iter=1000) )
这种写法生成的步骤默认名称为polynomialfeatures和lasso。
方案2:改用Pipeline类(需要自定义步骤名时使用)
如果需要保留你自定义的步骤名,把make_pipeline替换为Pipeline即可:
from sklearn.linear_model import Lasso from sklearn.preprocessing import PolynomialFeatures from sklearn.pipeline import Pipeline pipeline = Pipeline([ ('PolynomialFeatures', PolynomialFeatures(include_bias=False)), ('Lasso', Lasso(fit_intercept=True, max_iter=1000)) ])
内容的提问来源于stack exchange,提问作者Boom
相关产品推荐
相关产品推荐

