当我的训练集中没有y负值时,为什么Gradient Boosting回归预测负值?


8

当我增加树木的数量在scikit学习GradientBoostingRegressor,我得到更多的负面预测,即使在我的训练或测试组没有负值。我有大约10个功能,其中大多数是二进制的。

我正在调整的一些参数是:

  • 树木/迭代次数;
  • 学习深度;
  • 和学习率。

负值的百分比似乎最大约为2%。1(树桩)的学习深度似乎是负值的最大百分比。随着树木的增多和学习率的降低,这一百分比似乎也有所增加。该数据集来自kaggle游乐场比赛之一。

我的代码是这样的:

from sklearn.ensemble import GradientBoostingRegressor

X_train, X_test, y_train, y_test = train_test_split(X, y)

reg = GradientBoostingRegressor(n_estimators=8000, max_depth=1, loss = 'ls', learning_rate = .01)

reg.fit(X_train, y_train)

ypred = reg.predict(X_test)

1
有可能使用代码和数据重现示例吗?
Spacedman 2014年

2
哪个运动会比赛?
TheAxeR 2014年

Answers:


8

一般而言,回归模型(任何回归模型)可以超出训练样本所覆盖范围的任意方式运行。特别是,他们可以自由地假设建模函数的线性,因此,例如,如果您训练带有点的回归模型:

X     Y
10    0
20    1
30    2

它是合理的构建模型f(x) = x/10-1,这对于x<10收益负值。

在您的数据点之间“也是如此”,由于假定的功能(可以通过特定方法建模)的功能性,您总是有可能从“训练样本中”获得值。

您可以用另一种方式来思考-“负值有什么特别之处?”,为什么您发现负值的存在很奇怪(如果在训练集中未提供),而又不因说出存在而感到震惊。 ..值2131.23?除非以这种方式开发,否则没有任何模型将对负值的对待与对正值的对待“不同”。这只是可以作为其他任何值获得的实际值的自然要素。


关于您的问题,我认为纯粹是负值更容易识别为异常,因为它们前面有“-”或在图表上明显低于零。问题很容易是“为什么梯度增强回归预测以前看不见的值?”。也许您可以尝试对此进行扩展?这肯定会让您获得我的投票。
乔什(Josh)2013年

@lejlot-一般来说,这是不正确的。具有逻辑或tanh激活的回归模型通常可以保证输出在一定范围内。
user48956 '16

@ user48956回答状态“可以以任意方式表现”,我并不是说您不能强加某些约束,当然可以。-仅回答没有“数据相关”约束(除非您有非常具体的模型具有此约束)内置的结构)-如果您手动将其添加为专家,则取决于您。
lejlot

5

请记住,GradientBoostingRegressor(假设误差损失平方函数)将回归树连续拟合到上一阶段的残差。现在,如果阶段i中的树预测的值大于特定训练示例的目标变量,那么该示例中阶段i的残差将为负,因此阶段i + 1的回归树将面临负目标值(这是第i阶段的残差)。随着Boosting算法将所有这些树加起来以做出最终预测,我相信这可以解释为什么即使训练集中的所有目标值都是正的,您也可能最终得到负面的预测,尤其是当您提到这种情况发生得更多时通常当您增加树木数量时。


这是正确的答案。
hahdawg
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.