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

LightGBM调用predict()提示训练与测试集分类特征不匹配如何解决

问题解决步骤

报错的核心原因是:预测时传入的数据集与训练时的数据集的分类特征集合/类别/类型不匹配,可按以下步骤逐一修复:

1. 先对齐特征列的结构

保证传入test_kfold函数的test数据集的列名、列顺序与训练集train完全一致,不要在predict环节临时删除列,提前将test中的目标列avg_power删除后再传入函数:

# 提前处理测试集,保证和train特征完全对齐
test_feat = test.drop(['avg_power'], axis=1)
# 确保列顺序和train完全一致
test_feat = test_feat[train.columns]
# 再传入函数
test_preds = test_kfold(params, train, train_y, test_feat, KFold(n_splits=5, random_state=7, shuffle=True))

同时删除函数内部test_preds += rlf.predict(test, num_iterations=rlf.best_iteration)这行里多余的drop操作,直接用传入的已对齐的test数据集即可。

2. 统一处理分类特征

手动指定分类特征,避免LightGBM自动识别出现不一致:

  • 第一步先提取所有分类特征的列名列表:
# 示例:所有object类型、category类型的列都是分类特征,可根据实际业务调整
cat_cols = train.select_dtypes(include=['object', 'category']).columns.tolist()
  • 第二步对齐训练集和测试集的分类特征类别:
for col in cat_cols:
    # 统一转成category类型
    train[col] = train[col].astype('category')
    # 测试集的分类类别完全对齐训练集
    test_feat[col] = pd.Categorical(test_feat[col], categories=train[col].cat.categories)
  • 第三步创建LGB数据集时显式传入分类特征参数:
lgb_train = lgb.Dataset(X_train, y_train, categorical_feature=cat_cols, free_raw_data=False)
# 验证集设置reference和训练集对齐特征规则
lgb_valid = lgb.Dataset(X_valid, y_valid, reference=lgb_train, free_raw_data=False)

3. 清理无效参数

回归任务不需要is_unbalance参数,该参数仅用于分类任务的样本不平衡处理,直接从params字典中删除即可,避免引发不必要的异常。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:36:03