集成学习的集成对象是学习器
Bagging(可并行):有放回地采样同数量部分样本训练每个学习器(单一的学习算法),再一起集成(简单投票或者求平均)
- 学习器间不存在强依赖关系, 学习器可并行训练生成, 集成方式一般为投票;
- Random Forest属于Bagging的代表, 放回抽样, 每个学习器随机选择部分特征去优化;
Droupout与Bagging的区别:
- Bagging:所有模型都是独立的
- Droupout:模型参数共享
Gradient boosting(GB)
目标:优化或者说最小化loss function
思想:迭代生成多个弱的模型,将每个弱模型相加,后面的模型F_(m+1)基于前面学习模型F_(m)的效果生成
Gradient boosting Decision Tree(GBDT)
在函数空间中利用梯度下降法进行优化
GD与DT的结合,这里的决策树是回归树,每棵树是从之前所有树的残差中来学习的
Xgboost
在函数空间中用牛顿法进行优化
xgboost中的基学习器除了可以是CART(gbtree)也可以是线性分类器(gblinear)
Boosting(串行):使用全部样本(可调权重)依次训练每个学习器, 迭代集成(平滑加权)
算法迭代必须串行,但在处理每个特征列时可以并行
- 学习器之间存在强依赖关系、必须串行生成, 集成方式为加权和;
- Adaboost:加法模型+指数损失+前向分布;属于Boosting, 采用指数损失函数替代原本分类任务的0/1损失函数;提高误分样本的权值
- 原理:首先使用初始训练数据,训练弱分类器,对于分错的样本要在增大它的权值,分对样本要减小它的权值。迭代进行,最后将各个若分类器学习到的结果进行加权,分类误差率大的分类器权重大,小的权重小。
- GBDT:属于Boosting的优秀代表, 对函数残差近似值(此近似值为损失函数的负梯度在模型的值)进行梯度下降, 用CART回归树做学习器, 集成为回归模型;
- GB:负梯度,拟合残差
- DT:使用的决策树是回归树,寻找最佳划分点,平方误差(回归树中的样本标签是连续值)
- xgboost:属于Boosting的集大成者, 对函数残差近似值进行梯度下降, 迭代时利用了二阶梯度信息, 集成模型可分类也可回归. 由于它可在特征粒度上并行计算, 结构风险和工程实现都做了很多优化, 泛化, 性能和扩展性都比GBDT要好。
- 原理: xgboost是在传统GBDT上的一个提升
传统的GBDT使用回归树,xgboost还支持线性分类器
GBDT只用到了一阶导数信息,xgboost对代价函数进行了二阶泰勒展开,并且可以自定义损失函数,只要求它二阶可导
Xgboost增加了正则化项,用于控制模型的复杂度,防止过拟合
Xgboost还支持子采样(使用部分数据),列采样(使用部分特征),防止过拟合;样本不放回(每轮计算样本不重复)
- 原理: xgboost是在传统GBDT上的一个提升
对于基学习器,常用的有决策树,其学习过程是从根建立树,关于各种方法叶子节点分裂的方法有:
ID3/C4.5:信息增益/信息增益比
CART:基尼指数
gbdt:基尼指数
xgboost:二阶泰勒展开系数
RF(随机森林)与GBDT:
RF(Bagging) | GBDT(Boosting) |
---|---|
1、多棵树组成,2、结果有多棵树决定 | 同RF |
分类树、回归树 | 回归树 |
可并行 | 只能串行 |
多数表决 | 加权累加 |
对异常值不敏感 | 对异常值敏感 |
减少模型方差提高性能 | 减少模型偏差提高性能 |
不需要特征归一化 | 需要特征归一化 |
xgboost类似于gbdt的优化版,不论是精度还是效率上都有了提升。与gbdt相比,xgboost具体的优点有:
1.二阶泰勒展开;损失函数是用泰勒展式二项逼近,而不是像gbdt里的就是一阶导数
2.节点分数惩罚;对树的结构进行了正则化约束,防止模型过度复杂,降低了过拟合的可能性
3.节点分裂的方式;gbdt是用的gini系数,xgboost采用优化推导公式
xgboost使用二阶泰勒展开的原因:
收敛快,分布式
参考:
https://blog.csdn.net/timcompp/article/details/61919851
https://www.julyedu.com/question/big/kp_id/23/ques_id/1568