boost与decision tree

来源:互联网 发布:校园网络拓扑图设计 编辑:程序博客网 时间:2024/06/05 03:51

在提升与决策树相互结合的时候,就衍生出一些更加高效的算法,这里我先简述一些:
1)提升树算法:提升树是以分类树或回归树为基本分类器的提升方法。
对于分类问题的提升树,将adaboost里面的基分类器限制为二类分类树即可;
对于回归问题的提升树,是拟合当前模型的残差来递归得到新的分类树,然后用加法模型结合这些分类树。
2)GBDT算法:全称是梯度提升决策树算法。
首先解释梯度提升,梯度提升的关键是利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值。
决策树在这里是特定指回归树,关于回归树的知识在李航的书中关于决策树一章中可找到。
所以其实GBDT就是这两者的结合。
从这句话中我们知道,GBDT只针对回归问题,并且是回归问题提升树的一个进阶版(简化版),只是将残差找到了一个近似替代而已。
3)随机森林
随机森林其实与前两种不太一样,它是基于bagging的基础上扩展的一个变体,它希望的是根据每一组尽量不同的数据集来训练出一个基学习器,因此在训练过程中引入了随机属性选择。
首先在总数据集中随机选取一部分样本,共选取T(基学习器的总数)次,选取目的是希望这T次的样本集尽量不同,一般选取的是自助采样法。
根据每一个样本集,在训练决策树的时候,先随机选取k个属性(不是全部的属性),然后在这k个属性中选择一个最优属性用于划分。
最后将训练出来的多个基学习器组合起来。
4) xgboost (主要参考陈天奇PPT整理)
首先讲监督学习的参数求取方式。线性模型和非线性模型取决于假设函数的选取,一般选择
y^i=sumjwjxij,这就是线性模型。
优化对象Obj(Θ)=L(Θ)+Ω(Θ), 选取cost function和regularization时却有不同的选择,比如前者使用平方误差函数时为线性回归,使用指数损失函数时为逻辑回归,后面的正则项也可以使用1范数2范数或其他。
但是在boost tree中,因为要训练的参数不是一个具体数值,而是一个函数,
y^i=sumKk=1fk(xi),然后有Obj=sumni=il(yi,y^i)+sumKk=1Ω(fk),定义cost function和regularization的方式就决定了我们所采用的模型!比如说一般的提升树中,回归问题采用的是平方误差损失函数,分类问题采用的是指数损失函数。但正则项如何表示?cost function和正则项之间的trade-off如何处理?这些都还没有给出答案。
如何学习这个目标函数呢,采用的是集成方法,每增加的一个函数fk(xi)都要使的最终的结果更好。
如前所述,当采用的是平均误差损失函数的时候,

可以看出圈出的那部分就是残差,所以说回归树训练就是递归的使用新函数来拟合残差。扩展到一般情况呢?
下面的推导过程参考xgboodt原理

注意几点:
1.每次对第t颗树的创建都是为了优化整个模型的objective,所以我们每次研究的都是对t颗树增加一个分割点是否对全局判断有益;
2.选取分割点的时候其实就是选取特征的最佳分割点的时候,当该分割点没有使得增加的增益大过其带来的冗余则不增加该特征值,结束对该特征的遍历;
3.需要自定义损失函数,损失函数决定了gi,hi
4.参数调节,例如λ,γ

原创粉丝点击