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

如何用category_encoders编码无目标列的未知测试数据集?

问题解决方法

核心原因

你初始化ce.TargetEncoder时,把train的**全部33列(包含目标列Target_column)**都设为了需要编码的列,但test.csv没有目标列,编码器转换时找不到对应列,直接触发了列数不匹配的错误。

修正步骤

  1. 先把训练集的特征列和目标列分开,只针对特征列做编码处理
  2. 用筛选后的特征列初始化编码器,重新拟合训练数据
  3. 再用这个编码器转换测试集,就能正常运行

修正后的代码:

import category_encoders as ce
import numpy as np

# 提取训练集目标列
target_train = train['Target_column']
# 筛选出所有特征列(排除目标列)
feature_cols = [col for col in train.columns if col != 'Target_column']

# 仅对特征列初始化目标编码器
encoder = ce.TargetEncoder(cols=feature_cols)
# 拟合训练特征与目标值
Tar_encoded_train = encoder.fit_transform(train[feature_cols], target_train)

# 正常转换测试集
X_unseen = encoder.transform(test)

额外提醒

目标列是用来监督编码过程的,本身不需要被编码器处理,绝对不能把它加入cols参数里。如果训练集里还有其他不需要编码的列,也可以在feature_cols里进一步筛选,只保留需要做目标编码的类别特征。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:30:54