正如你所说,每棵树都被赋予相同的权重eta
,整体预测是每棵树的预测之和。
您可能会期望较早的树比后者的树具有更大的权重,但这不是必需的,因为响应在每棵树之后更新的方式。这是一个玩具示例:
假设我们有 5 个观察值,响应为 10、20、30、40、50。第一棵树已构建并给出 12、18、27、39、54 的预测。
现在,如果eta
= 1,则传递给下一棵树的响应变量将为 -2、2、3、1、-4(即预测与真实响应之间的差异)。然后下一棵树将尝试学习第一棵树没有捕获的“噪音”。如果nrounds
= 2,那么来自两棵树的预测之和将给出模型的最终预测。
如果取而代之eta
= 0.1,则所有树的预测将按比例缩小eta
,因此第一棵树将改为“预测”1.2、1.8、2.7、3.9、5.4。传递给下一棵树的响应变量将具有值 8.8、18.2、27.3、36.1、44.6(缩放预测与真实响应之间的差异)然后第二轮使用这些响应值构建另一棵树 - 并再次预测被缩放eta
。所以树 2 预测说,7、18、25、40、40,一旦缩放,就会变成 0.7、1.8、2.5、4.0、4.0。和以前一样,第三棵树将传递这些值与前一棵树的响应变量之间的差异(例如 8.1、16.4、24.8、32.1、40.6)。同样,所有树的预测总和将给出最终预测。
显然,当eta
= 0.1 且base_score
为 0 时,您至少需要 10 轮才能获得接近合理的预测。通常,您需要绝对最少 1/eta
轮,通常更多。
使用 small 的基本原理eta
是模型受益于对预测采取的小步骤,而不是让树 1 完成大部分工作。这有点像结晶——慢慢冷却,你会得到更大、更好的晶体。缺点是您需要增加nrounds
,从而增加算法的运行时间。