1
关于xgboost中的过拟合问题的讨论
我的设置如下: 我正在遵循“应用的预测建模”中的指导原则。因此,我过滤了相关功能并得出以下结果: 训练集中的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是否趋于过度拟合?