You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sklearn Pipeline中自定义Transformer的get_feature_names_out实现错误解决

解决Sklearn Pipeline中自定义转换器get_feature_names_out参数错误问题

错误原因

你遇到的TypeError是因为自定义转换器NameTransformer的get_feature_names_out方法不符合Sklearn的API规范:Sklearn要求该方法必须接受一个可选的input_features参数(默认值为None),当Pipeline串联多个转换器时,会自动将前一步的特征名作为参数传递给当前转换器的get_feature_names_out方法,而你的实现没有定义这个参数,导致参数不匹配。

修复方案

修改NameTransformer的get_feature_names_out方法,添加input_features=None参数(可以忽略该参数的具体值,因为你的转换器固定输出Title_cat特征):

class NameTransformer(BaseEstimator, TransformerMixin):

    def __init__(self) -> None:
        super().__init__()
        self.name_col = 'Name'

    def fit(self, X, y=None, **fit_params):
        return self

    def transform(self, X: pd.DataFrame, y=None, **fit_params):
        return pd.DataFrame(X.apply(get_title_cat, axis='columns'), columns=['Title_cat'])

    # 修改此处,添加input_features参数
    def get_feature_names_out(self, input_features=None):
        return ['Title_cat']

验证效果

修改后重新运行代码,调用name_pipe.get_feature_names_out()会正确返回经过OneHotEncoder编码后的特征名,示例输出如下:

array(['Title_cat_Braund,', 'Title_cat_Cumings,', 'Title_cat_Heikkinen,',
       'Title_cat_Byles,'], dtype=object)

内容的提问来源于stack exchange,提问作者Anton Troitsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:23:08