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

训练与测试数据列数一致但OneHotEncoder编码后特征数不匹配问题

问题解决:OneHotEncoder编码后训练/测试集特征数不匹配

错误根源

你对训练集和测试集都调用了fit_transform(),这会让OneHotEncoder分别基于两个数据集的分类特征拟合独立的编码规则。由于测试集的分类特征类别数量/种类可能和训练集存在差异,最终导致编码后的特征矩阵维度不一致,模型自然无法匹配输入。

修正方案

核心原则:只在训练集上学习编码规则(fit),测试集直接复用该规则做转换(transform),修正后的代码如下:

one_hot= OneHotEncoder()
transformer= ColumnTransformer([("one_hot",one_hot,categorical_features)],
                              remainder="passthrough")

# 训练集:同时完成规则学习和数据转换
train_transformed_X = transformer.fit_transform(pd.DataFrame(bigdata_zeros,columns=categorical_features))
# 测试集:仅用训练好的规则做转换,不重新学习
train_transformed_X_test=transformer.transform(pd.DataFrame(bigdata_test_zeros,columns=categorical_features))

额外优化建议

  • 如果测试集可能出现训练集从未见过的分类类别,初始化OneHotEncoder时添加handle_unknown='ignore'参数,遇到未知类别时会跳过该特征的编码,避免报错:
    one_hot= OneHotEncoder(handle_unknown='ignore')
    
  • 提前检查训练集和测试集的分类特征类别一致性,比如对比每个分类特征的唯一值集合,从源头避免类别差异问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:57:32