梯度提升中的少量估计器

数据挖掘 机器学习 xgboost 超参数 超参数调整 lightgbm
2021-10-14 16:07:40

我正在调整基于回归梯度提升的模型,以使用 4 折交叉验证来确定适当的超参数。更具体地说,我对模型使用 XGBoost 和 lightGBM,对超参数搜索(hyperopt)使用贝叶斯优化算法

在每个模型使用的估计器数量中调整的超参数之一。对于第一轮测试,我从 100-300 范围内的估计数开始。超参数优化算法的结果是最佳估计数是 100。我重复了相同的分析,将估计数的范围修改为 50-300,这次超参数优化算法的结果是最佳估计数是 50。我第三次重复相同的分析,将可能的估计数范围设置为 2-300(只是为了检查极端情况),这次超参数优化算法的结果是最佳估计数是 2。 XGBoost 和 lightGBM 模型的结果相同。

这对我的模型和数据有什么影响?这是否意味着最好的模型是随机森林而不是梯度提升?通过固定超参数值(例如,150)和调整所有其他参数来“强制”估计器的数量是否明智?

训练数据集有 > 0.5M 样本,其中约 90% 的数据为零,其余是正值和负值的混合。我应该考虑使用不同的对象函数而不是 MSE 吗?

LightGBM 的调整参数范围为:

'max_depth': 5 ==> 15
'colsample_bytree': .6==> .9
'subsample':.5 ==> .8
'reg_alpha': np.log(1e-4) ==> np.log(1e-1)
'reg_lambda': np.log(1e-4) ==> np.log(1e-1)
'n_estimators': 50 ==> 300
'num_leaves': 10 ==> 150, 2
'min_child_samples': 20 ==> 800
'subsample_for_bin': 20000 ==> 300000
'subsample_freq': 1 ==> 20

输出:{'subsample_freq':16,'num_leaves':10,'max_depth':6,'colsample_bytree':0.7577614465604802,'subsample_for_bin':80000,'min_child_samples':415,'n_estimators':56,'subsample':0.65931478 ,“reg_alpha”:0.025744268683186224,“reg_lambda”:0.0001729942781329532}

XGBoost 的调整参数范围为:

'colsample_bytree',.6 ==> .9
'max_depth', 4 ==> 9
'n_estimators', 50 ==> 300
'reg_alpha', np.log(1e-4) ==> np.log(1e-2)
'subsample',.5 ==> .8
'gamma', 0 ==> 4

输出:{'gamma':2.4257700330471357,'max_depth':4,'n_estimators':57,'subsample':0.5568564232616263,'reg_alpha':0.0009876777981446033,'colsample_bytree':0.707732793

1个回答

首先什么是 n_estimators:

n_estimatorsinteger, optional (default=10) 森林中的树数。

Gradient Boosting 和 Random Forest 是决策树集成,这意味着它们适合几棵树,然后对它们进行平均(集成)。

如果你有 n_estimators=1,意味着你只有一棵树,如果你有 n_estimators=3 意味着你有 3 棵树,并且它预测每棵树的结果,然后它“平均”结果以获得最好的结果。

强制超参数不是一个好主意,交叉验证是超参数选择的方式。

如果您将搜索扩大一点,您可能会找到不同的结果。每个示例在子样本中移动更宽,在惩罚中,在最大深度中......

更多的搜索参数意味着更多的计算时间。