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

为何XGBoost提示数据集为空但实际含数据?附代码与报错

问题解决

1. 「数据集为空/仅含正负样本」警告的原因及修复

你遇到的警告是因为在多分类任务中误用了二分类的AUC指标。XGBoost的auc指标默认针对二分类场景,当你在多分类任务(multi:softprob)中使用它时,XGBoost会对每个类别单独做二分类AUC计算。而交叉验证的fold中,可能存在某个类别样本数量为0,或者该fold里只有这类样本的情况,就会触发这个警告。

修复方法很简单:移除参数里的"auc"指标,保留多分类适用的mlogloss和merror即可:

results = xgb.cv(
  params, dtrain_clf,
  num_boost_round=n,
  nfold=5,
  metrics=["mlogloss", "merror"],  # 移除auc指标
)

另外,你的代码里有个语法错误:train_test_split语句末尾多了一个方括号],需要删掉:

X_train, X_test, y_train, y_test = train_test_split(X, y_encoded, random_state=1, stratify=y_encoded)

2. 关于计算RMSE的需求

RMSE是回归任务的评估指标,你当前的任务是多分类(目标变量cut是分类类型),直接在分类任务里用RMSE不合适。如果你的实际需求是有序回归(比如cut的等级是有序的:Fair < Good < Very Good < Premium < Ideal),可以调整任务类型为回归:

回归任务调整步骤:

  1. 修改目标函数为回归类型,移除多分类专用的num_class参数:
params = {"objective": "reg:squarederror", "tree_method": "hist"}
  1. 用rmse作为评估指标:
results = xgb.cv(
  params, dtrain_clf,
  num_boost_round=n,
  nfold=5,
  metrics=["rmse"],
)

注意:你用OrdinalEncoder对y做的序数编码,刚好适合有序回归任务,因为编码后的数值对应cut的顺序等级,回归模型可以学习这种顺序关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 03:10:05