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

如何用LabelEncoder对多列编码且训练集测试集使用相同转换规则

错误原因
  • LabelEncoder仅支持输入1维数组,你直接传入10列的二维DataFrame触发了维度校验错误
  • 原代码中le.fit(categorical_columns)是对列名列表做拟合,完全不符合需求,拟合对象应该是训练集对应列的实际数据
修复方案

方案1:逐列使用LabelEncoder

为每个类别列单独训练并保存编码器,保证训练集、测试集使用相同转换规则:

from sklearn.preprocessing import LabelEncoder

categorical_columns = train.columns[:10].tolist()
# 用字典存储每个列对应的编码器,方便后续复用
encoder_dict = {}

for col in categorical_columns:
    le = LabelEncoder()
    # 仅在训练集的当前列上拟合规则
    le.fit(train[col])
    # 分别转换训练集和测试集的当前列
    train[col] = le.transform(train[col])
    test[col] = le.transform(test[col])
    encoder_dict[col] = le

方案2:使用OrdinalEncoder(原生支持多列编码,代码更简洁)

OrdinalEncoder是sklearn专门设计用来做多列类别特征编码的工具,适配你的批量处理需求:

from sklearn.preprocessing import OrdinalEncoder

categorical_columns = train.columns[:10].tolist()

oe = OrdinalEncoder(handle_unknown='use_encoded_value', unknown_value=-1)
# 直接在训练集所有类别列上拟合规则
oe.fit(train[categorical_columns])
# 同时转换多列
train[categorical_columns] = oe.transform(train[categorical_columns])
test[categorical_columns] = oe.transform(test[categorical_columns])
注意事项

上面方案2的handle_unknown和unknown_value参数是用来处理测试集出现训练集未见过的类别的情况,遇到未知类别时会统一编码为你指定的数值(示例中为-1),避免程序抛出错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 04:09:04