Python在调用sklearn Pipeline对象的方法时引发AttributeError
问题
我在一个叫做 Pipeline
的对象上调用 fit_transform()
和 transform()
方法,但每次尝试时,Python 都会报一个错误,叫做 AttributeError。下面是我尝试运行的代码,还有相关的导入部分。(注意:训练和测试的数据分割已经完成)
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline
pipe = Pipeline([('mean_impute', SimpleImputer()),
('norm', StandardScaler()),
('sklearn_lm', LinearRegression())])
pipe.fit_transform(x_train, y_train) #<-- error here
x_transform = pipe.transform(x_test) #<-- and here if previous line is absent
错误信息是这样的:
AttributeError: This 'Pipeline' has no attribute 'fit_transform'
到底出了什么问题?我觉得应该是个简单的错误。
我尝试过的事情:
- 查看了 sci-kit learn 的文档,确认 这些方法确实在 sklearn 的 Pipeline 对象中存在
- 检查了
x_train
和y_train
的大小,确保它们是一样的,并且都有表头 - 重新安装了
sci-kit learn
2 个回答
0
在这个网站上说,这个方法只有在最后的估计器(也就是模型)要么实现了fit_transform,要么分别实现了fit和transform时才有效。我不太清楚什么是最后的估计器,但这可能就是你遇到的问题(我知道这不是很有帮助,但我尽力了)。
1
关于 sklearn.pipeline.Pipeline.fit_transform
的说明中提到,它的使用条件是“只有在最后的估计器要么实现了 fit_transform
,要么同时实现了 fit
和 transform
。”这句话可能有点模糊,但其实有两种情况可以满足这个条件:第一种是最后的估计器实现了 fit_transform
,第二种是最后的估计器实现了 fit
和 transform
。
你的最后一个估计器是 sklearn.linear_model.LinearRegression
,它实现了 fit
,但是没有实现 transform
。这就是为什么会出现错误的原因。