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

XGboost模型生成精度指标时出现负R²值,求排查原因

XGBoost模型负R²值问题排查

公式正确性检查

  • 基础R²公式是正确的:
    1 - sum((predictions_list_pc[[i]] - y_test_pc[, i])^2) / sum((y_test_pc[, i] - mean(y_test_pc[, i]))^2)
    
    该公式本质是1 - 残差平方和(SS_res)/总平方和(SS_tot),当SS_res > SS_tot时,R²为负,说明模型预测效果差于直接用测试集均值预测。
  • 调整R²公式存在错误:正确公式应为1 - ((1 - R²)*(n-1))/(n-p-1),你的代码误将(1-R²)写成了R²,修正后代码如下:
    adjusted_r_squared_list_pc <- lapply(1:length(target_variables), function(i) {
      n <- length(y_test_pc[, i])
      p <- length(xgb_models_pc[[i]]$model$feature_names)
      1 - ((1 - r_squared_list_pc[[i]]) * (n - 1)) / (n - p - 1)
    })
    

模型与数据层面的潜在问题

1. PCA处理流程错误

若你用全数据集拟合PCA后再拆分训练/测试集,会导致数据泄露——测试集的统计信息被提前用于主成分计算,模型在训练时学到了测试集的信息,最终在测试集上泛化能力极差。正确流程应为:仅用训练集拟合PCA,再用该PCA转换训练集和测试集。

2. XGBoost超参数未优化

默认参数下的XGBoost可能在主成分特征空间中出现严重欠拟合或过拟合:

  • 欠拟合:树深度太小、学习率过高、树数量不足,导致模型无法捕捉数据规律;
  • 过拟合:树深度过大、无正则化(lambda/alpha为0)、subsample比例过高,模型过度拟合训练集噪声。

3. 主成分未保留有效信息

主成分是基于特征方差最大化提取的,未必与目标变量强相关。若你仅保留了少数主成分,可能丢失了与目标变量相关的关键信息,导致模型无法有效预测。

4. 数据划分不合理

80/20随机划分若未考虑目标变量分布,可能导致训练集与测试集的目标分布差异过大,模型无法泛化到测试集。

排查步骤

  1. 验证PCA流程:确认仅用训练集拟合PCA,再转换测试集;
  2. 对比基准模型:计算测试集均值预测的MSE,若XGBoost的MSE更高,说明模型确实不如基准,需调整;
  3. 调优XGBoost超参数:尝试降低学习率(eta=0.01~0.1)、增加树数量(nrounds=100~1000)、调整max_depth(3~7)、加入正则化参数;
  4. 评估主成分相关性:计算每个主成分与目标变量的相关性,若相关性极低,考虑保留更多主成分或更换降维方法;
  5. 修正调整R²公式,避免后续指标计算错误。

内容的提问来源于stack exchange,提问作者Chris J. Ephgrave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:39:57