如何用category_encoders编码无目标列的未知测试数据集?
问题解决方法
核心原因
你初始化ce.TargetEncoder时,把train的**全部33列(包含目标列Target_column)**都设为了需要编码的列,但test.csv没有目标列,编码器转换时找不到对应列,直接触发了列数不匹配的错误。
修正步骤
- 先把训练集的特征列和目标列分开,只针对特征列做编码处理
- 用筛选后的特征列初始化编码器,重新拟合训练数据
- 再用这个编码器转换测试集,就能正常运行
修正后的代码:
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
相关产品推荐
相关产品推荐

