我的设置如下:
我正在遵循“应用的预测建模”中的指导原则。因此,我过滤了相关功能并得出以下结果:
- 训练集中的4900个数据点和测试集中的1600个数据点。
- 我有26个功能,目标是一个连续变量。
我使用5倍交叉验证来训练使用该caret
软件包的模型。当我应用MARS模型时,在训练集和测试集上我得到的平均绝对误差(MAE)约为4。
但是,使用xgboost(树算法或线性算法),在训练集上得到的像是0.32(!),在测试集上得到的像是2.4。
因此,如果测试误差是训练误差的8倍,那么我会说:我已经过度拟合了训练数据。无论如何,我仍然在测试中遇到了一个较小的错误。
我在xgboost上使用以下参数:
nrounds = 1000
和eta = 0.01
(增加nrounds和减少eta可能有所帮助,但我的内存不足并且运行时间太长)max_depth = 16
:如果我比较其他帖子和默认帖子6,则看起来很大,但问题非常复杂-在这种情况下,也许16不太大。colsample_bytree = 0.7
,subsample = 0.8
并且min_child_weight = 5
:这样做,我尝试减少过拟合。
如果我减小max_depth,则训练和测试误差会更接近,但仍然存在较大的差距,并且测试误差会更大(略高于3)。
使用线性助推器,我得到最佳参数的大致相同的训练和测试误差:
lambda = 90
和`alpha = 0:通过交叉验证发现,lambda应该防止过拟合。colsample_bytree = 0.8
,subsample = 0.8
并且min_child_weight = 5
:这样做,我尝试减少过拟合。
我的感觉是xgboost仍然过拟合-但训练错误以及据我在实时测试中看到的(我已经使用过xgboost模型,并且实际上已经将它们集成了4天了)看起来还不错(错误是大于测试误差,但现实生活中有关特征和其他变量的预测存在更多不确定性。
您如何看待:如果(如果可能的话)现实生活中的表现优越,我可以接受过拟合吗?我的设置中的xgboost是否趋于过度拟合?