一文理清集成学习知识点(BoostingBagging)
点击上方“AI遇见机器学习”,选择“星标”公众号
原创干货,第一时间送达
???? 导读
相信这个环节的内容大家都会比较熟悉的,因为我们经常用到的XGBoost、GBDT就是集成模型,今天这里就给大家系统地梳理一下知识点和原理,做到了然于胸。
???? Index
集成学习的主要类型
集成学习的基本步骤
谈谈基分类器
GBDT与XGBoost的区别与联系
算法实践Demo
???? 集成学习的主要类型
集成学习是一大类模型融合策略和方法的统称,我们经常用到的两类是Boosting和Bagging,这两者的区别与联系经常会被问到,在回答这些问题前,需要对两者的原理进行统一了解。
???? Boosting
Boosting方法在训练基分类器时采用的是串行的方法,每一个基分类器依赖前面的结果。它的基本思路就是将基分类器层层叠加,每层在训练时都会对前一层基分类器的分类错误情况去改变当前样本的分布,具体来说就是将分类错误的样本给予更高的权重,所以每一次的迭代,数据分布都是不一样的。
Boosting的迭代过程与人类的学习过程有点类似,也就是说我们在学习新知识的时候,会记住部分信息,也会遗忘部分信息,所以在下一次中会着重去关注没记住的内容,加强训练,这样子不断地去循环学习,直到我们能够全部吸收。
Boosting通过逐步聚焦于基分类器分错的样本,减少集成分类器的偏差。
???? Bagging
而对于Bagging,它则是并行训练的,各个基分类器之间无依赖,而且每个基分类器训练的样本都是一样的(也可以不同),但由于每个基分类器的"学习能力"不同,会出现很多的学习结果,最终的决策会参考这些基分类器的结果,一般是采用投票的方式,基分类器之间的权重都是一样的。
Bagging采取分而治之的策略,通过对训练样本多次采样,并分别训练出多个不同模型,然后做综合,来减少集成分类器的方差。
???? 集成学习的基本步骤
集成学习一般可以分为以下3个步骤:
1、找到误差互相独立的基分类器
2、训练基分类器
3、合并基分类器的结果
合并基分类器的方法有voting和stacking两种,前者是用投票的方法,将获得最多选票的结果作为最终的结果。后者则是使用串行的方法,把前一个基分类器的结果输出到下一个基分类器中,将所有基分类器的输出结果相加融合作为输出。
比如,针对Adaboost,大致的步骤如下:
(1) 确定基分类器:一般都是采用树形模型,因为它结构简单且随机性强。
(2) 训练基分类器:假设有T个基分类器,则可以按照如下过程来训练基分类器:
(3) 合并基分类器:给定一个未知样本z,输出分诶结果为加权投票的结果。
从上面的例子中我们可以看出来Boosting一个很重要的思想,那就是它会对分类错误的样本进行权重的加强,对分类正确的样本降低权重,在最后的模型融合时根据错误率对基分类器进行加权融合,错误率低的分类器也拥有更大的"话语权"。
还有一种比较流行的Boosting模型,那就是梯度提升决策树(GBDT)。 其核心思想就是每一棵树学的是之前所有树结论和的残差,这个残差是一个加预测值后能得到真实值的累加(减)量。
???? 谈谈基分类器
基分类器作为Boosting的基本单元,而且一般也是会采用决策树来作为分类器,原因有三:
(1) 决策树可以较为方便地将样本的权重整合到训练过程中,而不需要使用过采样的方法来调整样本权重;
(2) 决策树的表达能力和泛化能力都是有很大的调节性,比如可以通过数的深度来调整;
(3) 决策树的随机性较强,所以不同的训练集都会比较随机地生成不同的决策树模型,这样子的"不稳定学习器"更能胜任基分类器的职责,很好的解决了数据样本扰动的影响,同时解决过拟合情况。
Q:可否将RF中的决策树基分类器,替换为K-Mean或者线性分类器呢?
有了上面我们对于基分类器的认识,因为RF属于Bagging,它要求的基分类器最好是对样本分布较为敏感,这样子基分类器之间的方差就会较大,然后综合起来之后就可以达到一个较优的结果。而如果换成K-Mean或者线性分类器,这些分类器本身会非常稳定,这样子的话其实基分类器训练出来的模型都是十分相似,方差很小,即便Bagging之后不能获得更好的表现,失去了Bagging的优势。
???? GBDT与XGBoost的区别与联系
???? GBDT
Gradient Boosting Decision Tree,简称GBDT,中文名为梯度提升决策树,作为"网红"算法,时常出现在各大竞赛平台和商业应用,它的核心思想就是从错误中学习,基于决策树预测的残差进行迭代优化学习,具体做法就是根据当前模型损失函数的负梯度信息来训练新加入的弱分类器,然后将训练好的弱分类器以累加的形式结合到现有模型中。
???? XGBoost
作为一个比GBDT更加"网红"的机器学习算法,XGBoost可谓是鼎鼎大名,它高效地实现了GBDT算法并进行算法和工程层面上的优化改进,它直接并行训练模型(这里的并行指的是节点分裂上的并行,模型的训练还是串行的,毕竟还是属于Boosting),然后对过拟合做了一些优化措施,也优化了Cost Function。
???? 区别与联系
这里就罗列一些内容:
(1) 在使用CART作为基分类器的时候,XGBoost显式地加入了正则项来控制模型的复杂度,有利于改善模型的过拟合情况,从而提高模型的泛化能力;
(2) GBDT在训练模型的时候只是使用Cost Function的一阶导数部分信息,而XGBoost则是进行二阶泰勒展开,用到了二阶导数;
(3) 传统的GBDT只是采用CART作为基分类器,而XGBoost支持多种基分类器,比如线性分类器;
(4) GBDT每次训练模型的样本都是一样的,但是XGBoost则支持对数据进行采用,数据分布有可能会发生改变;
(5) GBDT没有对缺失值进行处理,XGBoost对这块有针对性的解决措施。
???? 算法实践Demo
先前的一篇文章中,有读者在咨询有没有调用这些算法的例子,这边的话就根据算法的官方文档,整理出一份demo,希望也可以帮助到正在初学的朋友????。
???? XGBoost
我们在Python里用XGBoost,主要就是通过调用Scikit_learn的包,里面有一个类叫 xgboost。当我们对样本进行处理后,得到一个很规范的DataFrame格式的数据集,这个时候就可以调用这个算法类来进行模型构建,具体参数如下:
Scikit-Learn Wrapper interface for XGBoost.
class xgboost.XGBRegressor(max_depth=3, learning_rate=0.1, n_estimators=100, verbosity=1, objective= reg:squarederror , booster= gbtree , tree_method= auto , n_jobs=1, gamma=0, min_child_weight=1, max_delta_step=0, subsample=1, colsample_bytree=1, colsample_bylevel=1, colsample_bynode=1, reg_alpha=0, reg_lambda=1, scale_pos_weight=1, base_score=0.5, random_state=0, missing=None, num_parallel_tree=1, importance_type= gain , **kwargs)
下面是一个具体的实例,大家可以结合代码里的注释来理解这段代码:
# 导入相关库
import xgboost as xgb
from xgboost.sklearn import XGBClassifier# 初始化xgb
xgb = XGBClassifier(learning_rate =0.1,eta=0.5, max_depth=3,min_child_weight=2,gamma=0.2, subsample=0.7, colsample_bytree=0.9,objective= binary:logistic , scale_pos_weight=10, seed=10) # 用样本数据训练模型
xgb.fit(X_train, y_train)# 对训练好的模型进行预测应用,分别对训练集和测试集进行计算
train_y_pred = xgb.predict(X_train)
train_y_predprob = xgb.predict_proba(X_train)[:,1]
test_y_pred = xgb.predict(X_test)
test_y_predprob = xgb.predict_proba(X_test)[:,1]# 计算KS值,并打印出来,看模型效果(这里除了KS值,还有很多其他的指标,具体根据实际情况选择)
get_ks = lambda y_pred,y_true: ks_2samp(y_pred[y_true==1], y_pred[y_true!=1]).statistic
print( 训练KS值: %s %get_ks(train_y_predprob,y_train))
print( 验证KS值: %s %get_ks(test_y_predprob,y_test))
???? References
[1] 百面机器学习 Chapter12 (文中为标识来源的图片均来自本书内容)
[2] XGBoost Documentation
https://xgboost.readthedocs.io/en/latest/
推荐阅读
干货|学术论文怎么写
资源|NLP书籍及课程推荐(附资料下载)
干货|全面理解N-Gram语言模型
资源|《Machine Learning for OpenCV》书籍推荐
欢迎关注我们,看通俗干货!
一文理清集成学习知识点(BoostingBagging)相关推荐
- MLK | 一文理清集成学习知识点(BoostingBagging)
???? 前情回顾 MLK | 那些常见的特征工程 MLK | 模型评估的一些事 MLK | 机器学习的降维"打击" MLK | 非监督学习最强攻略 MLK | 机器学习采样方法大 ...
- MLK | 一文理清深度学习循环神经网络
MLK,即Machine Learning Knowledge,本专栏在于对机器学习的重点知识做一次梳理,便于日后温习,内容主要来自于<百面机器学习>一书,结合自己的经验与思考做的一些总结 ...
- 【机器学习】集成学习知识点总结二
GBDT原理概述 GBDT是集成学习Boosting的一种.算法流程详见集成学习之梯度提升树GBDT. Gradient boosting的主要思想是,每一次建立单个学习器时,是在之前建立的模型的损失 ...
- 【机器学习】集成学习知识点总结一
集成学习算法概述 严格意义上来说,集成学习算法不算是一种机器学习算法,而更像是一种优化手段或策略,它通常是结合多个简单的弱机器学习算法,去做更可靠的决策.有人把它称为机器学习中的"屠龙刀&q ...
- MLK | 一文理清 深度学习前馈神经网络
MLK,即Machine Learning Knowledge,本专栏在于对机器学习的重点知识做一次梳理,便于日后温习,内容主要来自于<百面机器学习>一书,结合自己的经验与思考做的一些总结 ...
- 【直播】李祖贤:集成学习答疑直播之八-- 集成知识点回顾与补充
集成学习答疑直播之八-- 集成知识点回顾与补充 集成学习是首个横跨3个周期的长期组队学习,在第25期组队学习中进行到"第三期-模型融合与数据实战"阶段.组队学习期间,课程设计者每周 ...
- 13、《Libevent中文帮助文档》学习笔记13:Linux下集成、运行libevent
Linux下编译libevent的指导可以参考<4.<Libevent中文帮助文档>学习笔记4:Linux下编译libevent>,完成编译.安装,生成so库后,其他程序即可依 ...
- 一文看懂集成学习(详解 bagging、boosting 以及他们的4点区别)
2019-10-18 00:12:13 在机器学习中,我们讲了很多不同的算法.那些算法都是单打独斗的英雄.而集成学习就是将这些英雄组成团队.实现"3 个臭皮匠顶个诸葛亮"的效果. ...
- 机器学习知识点(十六)集成学习AdaBoost算法Java实现
理解http://blog.csdn.net/fjssharpsword/article/details/61913092中AdaBoost算法,从网上找了一套简单的代码加以理解. 1.基分类器,实现 ...
最新文章
- shell 实现memcache缓存命中率监控脚本
- Unix编程艺术——Unix哲学
- 2018年下半年网络公式考试案例分析真题
- java自动推断类型_推断:Facebook的新Java静态分析工具
- java虚引用_深入了解JAVA 虚引用
- shell下的常用语句
- Pycharm 字体大小快捷方式设置
- 基础数据类型{dict:'字典'}
- k近邻算法 r语言_推荐 :R语言中K邻近算法的初学者指南(从菜鸟到大神-附代码&链接)...
- opencv_3.4.2_vc14_vc15.exe下载
- OptiSystem应用:激光雷达系统设计
- WIN7远程桌面连接显示凭据不工作的解决方法
- android模拟器动态调试,Unity Android模拟器调试
- 计算机计算投资回收期公式,投资回收期年限的自动计算(带公式).xlsx
- ideal上初写mapreduce程序出现的报错信息解决
- Android 将签名布局旋转90度,Android签名生成和互转(示例代码)
- 三维马氏距离_马氏距离2
- 在新的固态硬盘中安装windows系统(旧固态硬盘已安装ubuntu系统)
- 数据库--聚集函数及其应用
- 创建区块计算次数_区块链计算的四个阶段