提升树是一种以分类树或者回归树为基本分类器的提升方法。
对于分类树只需将adaboost算法中的基函数设置为二分类二叉树即可。
而回归树则是根据残差来训练下一个分类器的回归二叉树。下面主要介绍一下回归提升树的算法。
回归提升树
回忆一下,回归树就是将输入空间分割成个不相关的区域,即回归树为
下面我们用前向分步算法推导下回归提升树,有:
$ f(0) = 0 $
$ fm(x) = f{m-1}(x) + T(x,\theta_m) $
则
令损失函数为二次损失,则:
其中,为残差,拟合当前模型的残差。
回归提升树即用残差来拟合后续的分类器。
输入
训练数据
过程
- $ f(0) = 0 $
- 对
- $ \gamma{mi} = y_i - f{m-1}(x_i) $
- 利用残差拟合回归树
- 更新
- 得到提升树
输出
提升树
梯度提升算法
上面的平方损失函数,利用上面的残差公式$ \gamma{mi} = y_i - f{m-1}(xi) $可以很方便的进行优化,如果对于更一般的损失函数而言,上面的残差公式$ \gamma{mi} = yi - f{m-1}(x_i) $就不适合了,因此这里引入梯度提升来计算残差
针对梯度提升,上面的算法有两个地方需要修改
一个是初始化:
一个是残差的计算,利用梯度提升公式计算:
bagging算法
上面的提升树算法我们利用了所有的训练数据,串行的的得到分类器,这种方法效率比较低下,无法并行操作,因此发明了bagging算法,可以并行的进行集成学习。
所谓的bagging算法,就是在训练数据中采样出m个训练样本的采样集,针对每个采样集训练一个基学习器,然后将这些基学习器组合生成最终的学习器。
对于分类任务,可以用简单投票的方式确定结果,对于回归任务,可以用平均值的方式得到最终的结果。
同时每次未被采样的数据还可以作为cross-validation的验证集。
bagging算法简单,并且可以并行,速度很快。由于采样集的样本不一致,因此天然的能够抗过拟合。但是对样本的数目要求一般比较高。
随机森林
树多的地方就是森林,因此随机森林就是以决策树作为基学习器的学习算法。
RF(Random Forest)是在以决策树为基学习器构建bagging的基础上,在决策树的训练过程中引入了随机属性的选择。
RF算法对决策树的每个节点,先从该节点的属性集合中随机选择一个包含k个属性的子集,然后在子集中选择一个最优属性用于划分输入空间(一般大家都选择)。
由于RF算法既随机选择了训练样本集,又随机选择了属性集,因此RF算法中的基学习器的多样性不仅来自于样本的扰动,还来自于属性的扰动,因此有很强的泛化能力。