在看完好多文章后发现没有几个文章解决了我的问题,我自己写一下
gbdt是什么?
gbdt是gradient boosting Decision Tree,梯度提升树。这里boosting是一种集成学习的一种方式,建立一棵树是在前一棵树上做的提高。
BDT
我们先不说梯度,就说提升树是怎么提升的。 BDT的核心就在于,每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。比如小王的真实身高是175cm,我们训练的时候,第一棵树的拟合过后预测身高是180cm,我们与真实数据比对,发现差了5cm,即残差为5cm。那么在第二棵树里我们把 小王的身高设为5cm去拟合学习,如果第二棵树真的能把小王分到的身高5cm的叶子节点,那累加两棵树的结论就是小王的真实身高;如果第二棵树的结论是7cm,则A仍然存在2cm的残差,第三棵树里小王的升高就变成2cm,继续学。。。
然后最后把这个小王在这些树上的残差加上第一棵树的值累加起来就输出了预测值。
我的树是像决策树或是随机森林里 基于gini或是entropy来分支的吗?
以预测身高为例,该预测值等于这个叶子节点所有人的身高的平均值。进行分支的时候,会遍历没一特征的每个阈值来找出分割点,但是评估的标准不再是熵减的最大,而是最小化均方差 -即(实际身高-预测身高)^2 总和/ n。被预测错的人越多,就错得越离谱,均方差越大,通过最小化均方差来找到最靠谱的分支特征与阈值。分支到什么时候停止呢?分支直到每个叶子节点的年龄都唯一(这个好像不大可能,)或者达到预先设置的终止条件,如叶子节点的案例数。
gbdt核心思想就如以上,但是普通的树和gbdt结果一样,那为什么还需要gbdt呢?
原因是过拟合
GB(Gradient Boosting)
我们前面一直都在讨论GBDT的基本原理,是从宏观上对于这种算法有个感性的认识。但是我们要想进一步理解GBDT,就得知道负梯度拟合,或者我们也叫梯度提升
我们都知道,在机器学习算法中,为了降低误差函数,我们会有一个方法叫做梯度下降法。其做法是误差函数中,每一步都走当前的梯度方向,也就是下降最快的方向进行下降,这样多次迭代步长之后,误差函数就会降到一个局部最低点(凸函数中也是全局最低点),也就得到了最小的误差函数。
我在掘金上看到一个技术博主写得很好我就引用过来了
网友评论