提升树

分类问题和回归问题的提升树

Posted by MrTriste on May 1, 2017

Boosting Tree

提升树,是一种以决策树为基函数的提升方法。

它的基本思想是每次都对前面一棵树学习的残差再次进行学习,而不是与前面的学习过程是独立的,每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。比如A的真实年龄是18岁,但第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树里我们把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里A的年龄就变成1岁,继续学。

分类问题的过程就是AdaBoost提升方法的过程,回归问题的过程是前向分布加法算法的特例,有以下三种:

  1. 回归问题:平方误差损失函数,决策树的类型就是回归树。
  2. 分类问题:指数损失函数,决策树的类型就是分类树。
  3. 一般决策问题:一般损失函数

分类问题的提升树

(1). 初始化权值分布,

(2).迭代过程

a.根据权值分布找到分类误差率最小的切分点,得到基本分类器(这里对应的应该就是回归问题的计算损失函数的部分,分类问题没有用到具体的损失函数,就是根据分类误差率的大小判断)

比如:

b.计算分类器的误差率:

c.计算的系数:

d.更新权值分布,用于下次迭代的a步,具体的更新公式就不展开了。

(3).最终的分类器:

PS:在(2)的a,b部分,我们使用的是分类误差率作为选择最优特征的标准,其实还有Gini指数、熵这些也可以作为标准,在二分类问题中,基尼指数、熵之半与分类误差率很接近。

回归问题的提升树:

我们首先要知道我们接下来的目的是什么,我们知道如果将输入空间划分为个互不相交的区域,并且在每个区域上确定输出的常量,那么树可以表示为

我们的目的就是找到这样的划分点,将其划分成若干个不想交的区域。

以下是具体的过程:

(1).初始化

(2).迭代过程,对于

a.计算残差(在m=1时,初始样本数据集就可以当成残差,因此不需要计算)

b.拟合残差学习一个回归树,得到

对于二分类回归问题,这里的具体过程是:

  1. 遍历切分点,根据以下的公式求解最优的切分点(note:注意这里符合我们上述说的目的)

  2. 根据上面求得的切分点,将N个残差数据分裂成两个部分,我们可以根据定义好的损失函数计算出代表的输出常量和代表的输出常量来使损失达到最小,一般常用的损失函数为平方损失函数,容易计算得():

  3. 得到拟合残差的回归树,形如:

c.更新

(3).最终的分类器: