lightGBM 中的 init_score 是什么?

数据挖掘 gbm 自习
2021-09-17 19:11:31

从 lightGBM R 中现有预测进行提升的教程中,函数中有一个init_score参数setinfo我想知道什么 init_score意思?在帮助页面中,它说:

init_score:初始分数是lightgbm将从中提升的基础预测

另一件事是lightGBM中的“提升”是什么意思?

2个回答

省略技术细节,boosting 是一种统计技术,我们训练许多额外的弱模型来尝试纠正我们迄今为止所学的先前模型的错误。在梯度提升的每​​次迭代中,都会训练一个新模型(通常是决策树),该模型试图拟合现有模型集的预测残差。

init_score值表示您尝试通过第一次提升迭代更正的预测。默认情况下,这可能会预测所有示例的多数类或随机选择的类,但如果您愿意,您可以在此处输入任何其他模型输出的预测。

LightGBM 学习的第一棵树将尝试纠正这个初始预测的错误。在您链接的示例中,他们为一次迭代训练 LightGBM 模型,并使用分数继续训练另一个 LightGBM 模型。所以在实践中,他们在这个例子中所做的有点毫无意义,因为他们可能从一开始就训练了一个 LightGBM,但我想这只是为了说明这个概念以及它是如何工作的。

LGB(LightGBM) 中的初始分数与 XGB(XGBoost) 中的基本分数相似。

该值的函数用于初始化梯度提升算法。这主要是为了加快收敛速度​​。

如果您有足够的时间等待模型收敛,则不必使用此参数。以我个人的经验,将此设置为您的训练标签平均值,您将节省时间并获得不错的结果。


这是默认设置之间的比较,使用基本分数和使用焦点损失。

# Focal loss
[100]   fit's focal_loss: 0.00191792    val's focal_loss: 0.00359477
[200]   fit's focal_loss: 0.00082206    val's focal_loss: 0.00287949
[300]   fit's focal_loss: 0.000403044   val's focal_loss: 0.00262565
[400]   fit's focal_loss: 0.000212066   val's focal_loss: 0.00258044
[500]   fit's focal_loss: 0.000117509   val's focal_loss: 0.00265192

Test's ROC AUC: 0.98168
Test's logloss: 0.00242


# Base score 
[100]   fit's logloss: 0.00191083   val's logloss: 0.00358371
[200]   fit's logloss: 0.000825181  val's logloss: 0.00286873
[300]   fit's logloss: 0.000403679  val's logloss: 0.00262094
[400]   fit's logloss: 0.000212998  val's logloss: 0.00257289
[500]   fit's logloss: 0.0001183    val's logloss: 0.00262522

Test's ROC AUC: 0.98170
Test's logloss: 0.00242

# default
[100]   fit's focal_loss: 0.203631  val's focal_loss: 0.203803
[200]   fit's focal_loss: 0.0710043 val's focal_loss: 0.0712822
[300]   fit's focal_loss: 0.0263409 val's focal_loss: 0.0267795
[400]   fit's focal_loss: 0.0103281 val's focal_loss: 0.011038
[500]   fit's focal_loss: 0.00422448    val's focal_loss: 0.00539362

Test's ROC AUC: 0.95715
Test's logloss: 0.00688

在 AUC 和 log loss 的性能中,Focal loss 或 base score 优于默认值。

最小示例CoLab Notebook(focal_loss_on_init_score.ipynb)受这篇文章的启发。