提升树
来源:互联网 发布:淘宝生意参谋 编辑:程序博客网 时间:2024/05/21 10:52
提升树
提升树是以决策树为弱分类器的提升方法,通常使用CART树。提升树被认为是统计学习中性能最好的方法之一。
提升树模型
提升树方法实际采用:加法模型 + 前向分布算法 + CART树(基函数)。
在Adaboost的例子中看到的弱分类器x<v或x>v,可以看做是由一个根结点直接连接两个叶结点的简单决策树,即所谓的决策树桩。提升树模型可以表示为决策树的加法模型:
其中,T(x,θm)表示决策树;θm为决策树的参数;M为树的个数。
提升树算法
既然提升树采用前向分布算法,那就将前向分布算法的步骤的思想套用到这里吧。
首先,确定初始提升树f0(x)= 0,于是第m步的模型就是:
其中fm-1(x)是当前模型,通过经验风险极小化确定下一棵决策树的参数θm,
由于树的线性组合可以很好的拟合训练数据,即使数据中的输入与输出之间的关系很复杂也可以很好的拟合。所以提升树是一个高功能的学习算法。
下面讨论针对不同问题的提升树学习算法,其主要区别在于使用的损失函数不同。包括用平方误差损失函数的回归问题,用指数损失函数的分类问题,以及用一般损失函数的一般决策问题。
对于二类分类问题,提升树算法只需将Adaboost中的弱分类器限制为二类分类树即可,这里不再细数。下面叙述回归问题的提升树:
已知一个训练数据集T={(x1,y1), (x2, y2), ..., (xN, yN)},x∈X⊆ Rn,X为输入空间,yi∈Y⊆ R,Y为输出空间。如果将输入空间X划分为J个互不相交的区域R1, R2, ..., RJ,并且在每个区域上确定输出的常亮cj,那么树可以表示为:
其中,参数θ={(R1,c1), (R2, c2), ..., (RJ, cJ)}表示树的区域划分和各区域上的常数,J是回归树的复杂度即叶子节点的个数。
对8.26式举个例子的话就像下面这样:
回归问题提升树使用以下前向分布算法:
在前向分布算法的第m步,给定当前模型fm-1(x),需求解
即得到第m棵树的参数。
当采用平方误差损失函数时,
L(y,f(x)) = (y - f(x))2
其损失变为:
L(y,fm-1(x) + T(x;θm))
=[y - fm-1(x) - T(x;θm)]2
=[r - T(x;θm)]2
这里
r= y - fm-1(x) (8.27)
是当前模型拟合数据的残差。所以对回归问题的提升树算法来说,只需简单的拟合当前模型的残差。这样,算法是相当简单的。
现将回归问题的提升树算法叙述如下
输入:
训练数据T={(x1,y1), (x2, y2), ..., (xN, yN)},xi∈X⊆ Rn,yi∈Y⊆ R
输出:
提升树fM(x)
解:
1,初始化f0(x)= 0
2,对m = 1, 2,..., M
a,按式8.27计算残差:rmi= yi - fm-1(xi), i = 1, 2, ..., N
b,拟合残差rmi学习一个回归树,得到T(x;θm)
c,更新fm(x)= fm-1(x) + T(x;θm)
3,得到回归问题提升树
梯度提升
上面的提升树算法利用加法模型与前向分步算法实现学习的优化过程。虽然当损失函数时平方损失和指数损失函数时,每一步的优化很简单,但对于一般损失函数而言,往往每一步的优化并不那么容易。而梯度提升(gradient boosting)算法就是解决这个问题的。
梯度提升算法利用最速下降法的近似方法,其关键是利用损失函数的负梯度在当前模型的值
作为回归问题提升树算法中残差的近似值,拟合一个回归树。
梯度提升算法描述
输入:
训练数据T={(x1,y1), (x2, y2), ..., (xN, yN)},xi∈X⊆ Rn,yi∈Y⊆ R;损失函数L(y, f(x))
输出:
回归树。
解:
解释:
第1步:估计使损失函数极小化的常数值,它是只有一个根结点的树。
第2(a)步:计算损失函数的负梯度在当前模型的值,将它作为残差的估计。对于平方损失函数,它就是通常所说的残差;对于一般损失函数,它就是残差的近似值。
第2(b)步:估计回归树的叶结点区域,以拟合残差的近似值。
第2(c)步:利用线性搜索估计叶结点区域的值,使损失函数极小化。
第2(d)步:更新回归树。
第3步:得到最终的输出模型。
- 提升树
- 提升树
- 提升树
- 统计学习方法----提升树
- 提升树GBDT详解
- 回归提升树 算法
- 提升树算法
- 提升树GBDT 详解
- 提升树和GBDT
- 提升树GBDT详解
- 提升
- 提升
- 提升
- 提升
- 提升
- 提升算法 AdaBoost元算法 提升树算法 in Python
- 提升方法 - 2 - 前向分布算法和提升树
- 提升方法之AdaBoost、提升树(GBDT)
- MY LITTLE GAME | 第一次用Construct2制作html游戏
- 宏定义、内联函数、普通函数的区别
- 1.二维数组-定义 2.二维数组--重点 3.二维数组-遍历
- XMLHttpRequest对象的基本属性:
- 洛谷 1057 传球游戏
- 提升树
- Tomcat项目部署和启动
- 程序化交易与机器学习思路梳理
- 串联超前校正网络
- Pig 三 自定义函数
- Android Activity个人理解
- 学习生物信息的系列书籍
- Jzoj4594 Dynamic len (待填)
- 配置wamp环境