梯度提升(gradient boosting)
/ GRAY-dee-ent BOOS-ting /
梯度提升用一长串弱模型搭出一个强模型,每一个都在为上一个的错误「赔不是」。想象一个学生做习题集:第一遍错了很多,于是他专挑做错的题去钻研;第二遍改对了一些,剩下一小堆错误留待下回攻克;如此往复。每个新模型都专门针对「迄今合计」仍然做错的部分来训练,整支队伍便一次一处、有的放矢地变得更聪明。
具体而言,你通常用小小的决策树作为弱学习器。第一棵树做出一个粗糙的预测。然后你算出残差——每个预测偏离了多少——并让下一棵树去拟合的不是原始目标,而是这些剩下的误差。把它(缩小后)的修正加到合计预测上,重新算出新的、更小的误差,再训练一棵树去拟合它们。「梯度」指的是用微积分给每棵树指出最能减小误差的方向;「提升」则是把这些弱学习器叠成一个强者的动作。
提升是面对日常表格数据时最准的技术之一,常常在数据科学竞赛中夺冠。但它比随机森林娇气:因为树是一棵接一棵地去追错误,推得太狠,它最终会开始拟合噪声——过拟合——所以你必须用一个小的学习率、浅一点的树和提前停止来勒住它。它还是按顺序训练而非并行,这会让它拟合得更慢。随机森林是把彼此独立的树平均掉以削减方差;提升是把彼此依赖的树叠加起来以削减偏差——同样的食材,相反的策略。
预测房价。第1棵树给一套实际值35万美元的房子猜了30万——差了+5万。第2棵树只在这些剩余误差上训练,添上比如+3万。现在差距只剩2万。第3棵树把它修到8千。几百次微小修正之后,合计值就落到了接近真实价格的地方。
每棵树都从「合计」剩下的误差里学习——一次修正接一次修正。
学习率就是刹车踏板:取得越小(让每棵树的修正算得越轻),通常泛化越好,但需要更多的树。正因为提升是不知疲倦地追着误差跑,如果你不及早叫停,它比随机森林更容易过拟合。