使用XGBoost训练回归模型时RMSE、MAE数值过大是什么原因?
XGBoost回归模型RMSE数值偏大的原因及优化方案
结合你提供的代码和运行结果,可从以下几个方向排查问题:
- 迭代次数不足:当前你设置的
num_boost_round仅为5,从输出结果可以看到,每一轮训练集和测试集的RMSE都处于持续下降的状态,没有出现收敛趋势,说明boosting树的数量还远远不够,模型尚未充分拟合数据规律。可先将该参数调整为50、100甚至更高,观察RMSE何时趋于平稳不再下降。 - 目标值本身量级较高:从初始RMSE超过14万的数值来看,你预测的目标大概率是房价这类本身取值就很高的变量,绝对数值的RMSE大不代表模型效果差。你可以计算相对误差(RMSE除以目标值的均值或中位数)来判断误差是否真的异常,比如目标值均值为100万的情况下,5万的RMSE对应5%的相对误差,属于正常水平。
- 超参数未做调优:当前你仅配置了
max_depth和目标函数,其余关键参数均为默认值,限制了模型的拟合能力:- 替换已废弃的
reg:linear目标函数为reg:squarederror - 默认学习率
eta=0.3偏大,可调整为0.1、0.05等更小的数值,配合更多的迭代次数获得更精细的拟合效果 - 可适当调高
max_depth到6~8,增加单棵树的拟合能力 - 补充正则化参数如
subsample、colsample_bytree、lambda,在提升模型拟合度的同时避免过拟合
- 替换已废弃的
- 特征预处理缺失:你的代码中没有展示特征预处理的步骤,如果特征存在量级差异大、缺失值、异常值未处理,或者分类特征未做正确编码,都会大幅影响模型的拟合效果。
- 数据集本身信噪比低:如果特征和目标标签的相关性本身较低,或者数据集噪声过大,也会导致模型无法进一步降低误差。
以下是优化后的参考代码:
# Create the DMatrix: housing_dmatrix housing_dmatrix = xgb.DMatrix(data=X, label=y) # 调优后的参数字典 params = { "objective":"reg:squarederror", "max_depth":6, "eta":0.1, "subsample":0.8, "colsample_bytree":0.8, "lambda":1 } # 增加迭代次数,添加早停逻辑避免过拟合 cv_results = xgb.cv( dtrain=housing_dmatrix, params=params, nfold=4, num_boost_round=100, early_stopping_rounds=10, metrics="rmse", as_pandas=True, seed=123 ) # Print cv_results print(cv_results) # Extract and print final boosting round metric print((cv_results["test-rmse-mean"]).tail(1))
内容的提问来源于stack exchange,提问作者Regnas01
相关产品推荐
相关产品推荐

