Python在调用sklearn Pipeline对象的方法时引发AttributeError

0 投票
2 回答
41 浏览
提问于 2025-04-14 15:38

问题

我在一个叫做 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'

到底出了什么问题?我觉得应该是个简单的错误。

我尝试过的事情:

2 个回答

0

这个网站上说,这个方法只有在最后的估计器(也就是模型)要么实现了fit_transform,要么分别实现了fit和transform时才有效。我不太清楚什么是最后的估计器,但这可能就是你遇到的问题(我知道这不是很有帮助,但我尽力了)。

1

关于 sklearn.pipeline.Pipeline.fit_transform 的说明中提到,它的使用条件是“只有在最后的估计器要么实现了 fit_transform,要么同时实现了 fittransform。”这句话可能有点模糊,但其实有两种情况可以满足这个条件:第一种是最后的估计器实现了 fit_transform,第二种是最后的估计器实现了 fittransform

你的最后一个估计器是 sklearn.linear_model.LinearRegression,它实现了 fit,但是没有实现 transform。这就是为什么会出现错误的原因。

撰写回答