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
相关产品推荐
相关产品推荐

