集成学习Ensemble和Boosting算法

在完成Kaggle竞赛(一)预测泰坦尼克号幸存者 数据导入和预处理后,我们已经使用了分类里最基本的算法

我们既然已经由随机森林接触到集成学习Ensemble中的bagging算法,现在我们进一步来看集成学习中另一大类boosting算法。

代码

未完待补充。。

原理

首先给个大致的概念,同为ensemble算法,boosting和bagging的最大区别在于选择hyperspace的时候给样本加了一个权值,使得loss function尽量考虑那些分错类的样本(i.e.分错类的样本weight大)。

怎么做的呢?

  • boosting重采样的不是样本,而是样本的分布,对于分类正确的样本权值低,分类错误的样本权值高(通常是边界附近的样本),最后的分类器是很多弱分类器的线性叠加(加权组合),分类器相当简单。

下面我们具体来看一下两种常用的boosting算法:Adaboost和Gradient Boosting的具体原理。

Adaboost

Adaboost算法在分类问题中的主要特点:通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类性能。 AdaBoost-算法描述(伪代码)如下:

Gradient Boosting

提升树方法是利用加法模型与前向分布算法实现整个优化学习过程。Adaboost的指数损失和回归提升树的平方损失,在前向分布中的每一步都比较简单。但对于一般损失函数而言(比如绝对损失),每一个优化并不容易。

针对这一问题。Freidman提出了梯度提升(gradient boosting)算法。该算法思想:

利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中残差的近似值,拟合一个回归树。

未完待补充。。

参考文献

[1]. 统计学习方法——CART, Bagging, Random Forest, Boosting http://blog.csdn.net/abcjennifer/article/details/8164315

[2]. CAML technology sharing platform http://www.52caml.com/head_first_ml/ml-chapter6-boosting-family/