我正在使用 XGBoost,当我将验证集的平均绝对误差从 0.05 更改为 0.03 时,我的平均绝对误差会上升,我认为较小的学习率只会使其运行速度变慢,并且如果有任何影响,它会提高模型的准确性,因为它所做的一切是使步幅更小,因此如果有的话,它不太容易过度射击。
所以也许我并不像我想象的那样了解学习率。
为什么会这样?
PS。除了反复试验之外,有没有一种很好的方法来计算学习率和其他参数,如 n_estimators(在本例中为 XGBoost)等等?
我正在使用 XGBoost,当我将验证集的平均绝对误差从 0.05 更改为 0.03 时,我的平均绝对误差会上升,我认为较小的学习率只会使其运行速度变慢,并且如果有任何影响,它会提高模型的准确性,因为它所做的一切是使步幅更小,因此如果有的话,它不太容易过度射击。
所以也许我并不像我想象的那样了解学习率。
为什么会这样?
PS。除了反复试验之外,有没有一种很好的方法来计算学习率和其他参数,如 n_estimators(在本例中为 XGBoost)等等?
ML 算法中的优化器函数使用学习率更新自身以收敛局部最小值。当步长(这里的学习率 = eta)变小时,函数可能不会收敛,因为这个小学习率(步长)没有足够的步长。
您应该增加学习率或步数,同时保持学习率恒定以处理问题。
您可能想查看梯度下降:https ://en.wikipedia.org/wiki/Gradient_descent
下图也很好地解释了如何调整学习率。(来源:https ://www.jeremyjordan.me/nn-learning-rate/ )
确保在降低 learning_rate 时增加n_estimators的值,否则模型会过早停止而无法找到最优值。这应该在调整其他参数之后完成。
这里有一些关于超参数调整的好教程:
https://blog.cambridgespark.com/hyperparameter-tuning-in-xgboost-4ff9100a3b2f