运行fit.transform时触发AttributeError:'Assignment4Transformer'无'y'属性
问题分析与解决
错误根源
你的自定义Assignment4Transformer类在执行过程中尝试访问实例属性self.y,但该属性并未在fit方法中完成初始化,导致属性不存在的报错。
Scikit-learn的Pipeline调用fit_transform时,会先执行Transformer的fit方法,再执行transform方法。若你的Transformer需要在fit阶段留存目标变量y,必须在fit方法内显式为self.y赋值,否则后续访问必然报错。
修复步骤
- 检查并修正
Assignment4Transformer的fit方法:
确保方法接收X和y参数(即便不需要y,也要保留y=None的参数位以符合sklearn接口规范),且在需要使用y的场景下完成赋值。示例框架如下:from sklearn.base import BaseEstimator, TransformerMixin class Assignment4Transformer(BaseEstimator, TransformerMixin): def fit(self, X, y=None): # 若需使用y,在此处保存到实例属性 self.y = y # 其他fit逻辑代码 return self def transform(self, X): # 此处可安全访问self.y # 实现你的数据转换逻辑 return transformed_X - 确认Transformer继承了
BaseEstimator和TransformerMixin,这是自定义Transformer与Pipeline兼容的必要前提。 - 单独测试
Assignment4Transformer的fit和transform方法,确认无属性错误后,再加入Pipeline运行。
额外注意事项
- 若Transformer不需要使用目标变量
y,fit方法仍需保留y=None参数,避免Pipeline传递y时触发参数不匹配错误。 - 检查
full_pipeline的构造代码,确保Assignment4Transformer被正确加入步骤列表,无语法错误。
内容的提问来源于stack exchange,提问作者Kdoyle73
相关产品推荐
相关产品推荐

