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

Sklearn自定义DateTimeTransformer列计数错误问题排查

问题排查:DateTimeTransformer生成特征列翻倍的原因

以下是几种最可能导致特征列从预期9变成18的情况,以及对应的排查方向:

  • 传入了多个日期列到转换器
    如果你在ColumnTransformer的列选择参数里指定了2个日期列(比如['date1', 'date2']),而你的DateTimeTransformer会对每个输入列提取9个特征,最终就会得到2×9=18列。先检查ColumnTransformer中该transformer对应的列参数,确认是否只传入了目标日期列。

  • 转换器内部重复生成特征
    检查你的transform方法逻辑,是否不小心重复执行了特征提取步骤。比如代码中错误地拼接了两次相同的特征组:

    def transform(self, X, y=None):
        df = pd.DataFrame(X, columns=['date'])
        # 第一次生成9个特征
        features1 = pd.concat([df['date'].dt.day, df['date'].dt.month, ...], axis=1)
        # 不小心又重复生成了一次
        features2 = pd.concat([df['date'].dt.day, df['date'].dt.month, ...], axis=1)
        return pd.concat([features1, features2], axis=1).values
    

    这种情况会直接导致输出列数翻倍。单独测试转换器:用单日期列调用fit_transform,查看输出的.shape[1],如果结果是18,说明问题出在转换器本身。

  • ColumnTransformer重复注册了同一个转换器
    如果你在transformers列表里两次添加了同一个DateTimeTransformer,且都指向同一日期列,就会导致该列被处理两次,输出9×2=18列。比如:

    ct = ColumnTransformer([
        ('dt_trans1', DateTimeTransformer(), ['date_col']),
        ('dt_trans2', DateTimeTransformer(), ['date_col'])
    ])
    

    检查你的ColumnTransformer配置,确保只对目标列应用一次转换器。

  • 转换器的fit方法错误保存多组状态
    如果你的fit方法中对输入列进行了重复处理,保存了多组特征提取规则,那么transform时会按多组规则生成特征。比如在fit里循环处理了两次输入列,导致后续transform输出重复特征。检查fit方法的逻辑,确保只针对目标列生成一次提取规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:29:52