我的设置如下:
我遵循“应用预测建模”中的指导方针。因此,我过滤了相关特征并最终得到以下结果:
- 训练集中4900个数据点,测试集中1600个数据点。
- 我有 26 个特征,目标是一个连续变量。
caret
我使用该包应用 5 折交叉验证来训练模型。当我应用 MARS 模型时,我在训练集和测试集上得到大约 4 的平均绝对误差 (MAE)。
但是应用 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
andmin_child_weight = 5
: 这样做我试图减少过拟合。
如果我减少 max_depth ,那么训练和测试错误会更接近,但仍然存在很大差距并且测试错误更大(略高于 3)。
使用线性助推器,我在最佳参数上得到大致相同的训练和测试误差:
lambda = 90
和 `alpha = 0:通过交叉验证发现,lambda 应该防止过拟合。colsample_bytree = 0.8
,subsample = 0.8
andmin_child_weight = 5
: 这样做我试图减少过拟合。
我的感觉是 xgboost 仍然过拟合 - 但训练错误和据我在实时测试中看到的(我在现实中使用 xgboost 模型和它们的集合 4 天)看起来不错(错误是大于测试误差,但在现实生活中对特征和其他变量的预测存在更多不确定性)。
你怎么看:如果(如果可能的话)现实生活中的表现更好,我能接受过拟合吗?我的设置中的 xgboost 是否倾向于过度拟合?