Boosted Trees 可以预测低于训练标签的最小值吗?

数据挖掘 回归 助推 自然梯度提升
2021-10-11 08:29:20

我正在使用梯度梯度增强树(使用 Catboost)进行回归任务。GBtrees 可以预测低于训练中看到的最小值(或高于最大值)的标签吗?例如,如果标签的最小值是 10,那么 GBtrees 是否能够预测 5?

4个回答

的,梯度提升树可以在训练标签范围之外进行预测。这是一个简单的例子:

from sklearn.datasets import make_classification
from sklearn.ensemble import GradientBoostingRegressor

X, y = make_classification(random_state=42)

gbm = GradientBoostingRegressor(max_depth=1,
                                n_estimators=10,
                                learning_rate=1,
                                random_state=42)
gbm.fit(X,y)
preds = gbm.predict(X)
print(preds.min(), preds.max())

输出-0.010418732339562916 1.134566081403055(并且make_classification只给出输出 0 和 1)。

现在,由于多种原因,这是不现实的:我正在使用回归模型来解决分类问题,我正在使用学习率 1,深度仅为 1,没有正则化等。所有这些都可以变得更合适,我们仍然可以找到预测超出训练范围的示例,但构建这样的示例会更加困难。我想说的是,在实践中,您不太可能从训练范围内获得任何东西

请参阅通过此 cv.se 帖子找到的 xgboost github 问题的此评论中的(更理论的)示例


需要明确的是,决策树、随机森林和自适应提升都无法在训练范围之外做出预测。这是特定于梯度增强树的。

决策树的预测将位于目标的范围内,因为最后,如果深度不受控制,记录将落入特定的目标叶,或者它将是多个目标的平均值。 使用第二种方法,它也无法越过目标的限制。

来到 Ensembling -

Bagging -
Bagging 只是平均多棵树。所以再次预测将保持在目标的极限


自适应提升
在这里我们为连续树上的记录添加权重。
这不会影响单个树的预测。在这里,我们对所有树进行加权平均。同样,预测将保持在目标的限制内


Gradient Boosting
这里我们根据前三个的预测误差添加新树。
用一种非常简单的语言,让我们假设 100 是一个目标。第一棵树预测 70。然后将在这 30 上训练第二棵树。假设它预测 20。通过这种方法,我们种植了许多树。然后,我们将有这些预测 -
70 + 20 + 6 + 2 + 1 + 0.5 + 0.2 + ......
它不会超过 100。

编辑本的评论-

如果您的学习率太高,上述逻辑(对于 GB)将不起作用,因为这将使残差值随着每棵下一棵树的增长而增长,并且可以达到任何值。
Gradientboost 在函数本身上使用梯度下降。因此,下一棵树的目标取决于残差和学习率。树木太多,价值会爆炸

看这个LR=2.1和Tree=100的代码片段,398可以变成150万

from sklearn.datasets import make_regression
from sklearn.ensemble import GradientBoostingRegressor

X, y = make_regression()

model = GradientBoostingRegressor(max_depth=1, n_estimators=100, learning_rate=2.1, random_state=42)

model.fit(X,y)
preds = model.predict(X)
print(preds.min(),y.min(), preds.max(),y.max()) 

-1246776.29 || -487.87 || 1586302.24 || 398.12

如果 n_estimators=10,那么它还没有被炸毁。需要更多的树来繁殖

-277.83 || -393.27 || 118.32 || 594.82

因此,您的问题的答案是否定 理论上因为我们大多保持 LR<1.0 以便顺利学习

在 Catboost(梯度提升)中我不知道,但在决策树和随机森林中,答案是否定的。

最终预测是根据离开的实例的“平均值”来完成的。我说“意思”,但它不是意思。因为随机森林是那个平均值的平均值。

现在你的问题是,我可以有一个大于火车最大值的预测值吗?在决策树中 - 不,在随机森林中 - 不,对于梯度提升 - 我不知道,对于线性模型 - 是

对于梯度提升,答案是肯定的,它不需要一些奇怪的超参数选择。

我刚刚有一个模型对一个约 3000 个测试集返回约 80 个负预测,其中训练集没有负值。学习率设置为 0.1。

查看此处给出的示例: 与 Ben 发布的相同链接当该用户得到意外的负值时,他的学习率也为 0.1。