机器学习集成学习算法——boosting系列_boosting可以集成几个算法-程序员宅基地

技术标签: 算法对比学习  机器学习基础  机器学习  

本篇基于机器学习(edt:周志华)的集成学习章节,衍生学习多种boosting集成学习算法。

集成学习(ensemblelearning)通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-calssifiersystem)。


目前的集成学习方法大致可以分为两大类:

个体学习器间存在强依赖关系、必须串行生成的序列化方法
个体学习器间不存在强依赖关系、可同时生成的并行化方法

前者的代表是Boosting,后者的代表是Bagging


Boosting 是一种将弱分离器        组合起来形成强分类器F(x)的框架,一般地,Boosting算法有三个要素:

1)函数模型:Boosting是加法函数,又叫叠加型的:

2)目标函数:选定某种损失函数作为优化目标:

3)优化算法:贪婪地逐步优化,即

以下介绍几种典型的boosting算法,包括:AdaBoost、GBDT、XGBoost、lightGBM、CatBoost


一、AdaBoost算法


AdaBoost算法的主要原理:

通过给已有模型预测 错误的样本更高 的权重,不断更新样本数据分布,每轮训练中(根据训练后的分类对错,调整样本权重)为每个训练样本重新赋予一个权重。

优点:

Adaboost 作为分类器时,分类精度很高
作为简单的二元分类器时,构造简单,结果可理解。
不容易发生过拟合
Adaboost 的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。

缺点:

对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。
scikit-learnAdaBoostClassifier使用了两种Adaboost分类算法的实现

  • base_estimator:基学习器,默认CART分类树
  • n_estimators:最大的弱学习器的个数,默认50
  • learning_rate:每个弱学习器的权重缩减系数
  • Algorithm:SAMME和SAMME.R(默认)

二、GBDT算法(Gradient Boosting Decision Tree

AdaBoost是通过提升错分数据点的权重来定位模型的不足,而Gradient Boosting是通过算梯度(gradient)来定位模型的不足。

模型可以表示为:

弱分类器的损失函数:

模型一共训练M轮,每轮产生一个弱分类器 T(x;θm)

算法目的:损失函数能够 不断的减小 损失函数能够尽可能快的减小

过程:利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值去拟合一个回归树。gbdt每轮迭代的时候,都去拟合损失函数在当前模型下的负梯度。这样每轮训练的时候都能够让损失函数尽可能快的减小,尽快的收敛达到局部最优解或者全局最优解。

优点:

1)可以灵活处理各种类型的数据,包括连续值和离散值。

2)在相对少的调参时间情况下,预测的准确率也可以比较高(相对SVM)。

3)使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。

缺点:

1)由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。

scikit-learn中,GradientBoostingClassifierGBDT的分类类

  • n_estimators:最大迭代基学习器个数,默认100
  • learning_rate:每个弱学习器的权重缩减系数,默认0.1
  • subsample:子采样,取值为(0,1]1为全部采样,即没有子采样(无放回)
  • loss: 损失函数。



三、XGBoost算法


GBDT是以决策树(CART)为基学习器的GB算法,Xgboost扩展改进了GBDTXgboost算法更快,准确率也相对高一些,LightGBM则是在Xgboost的基础上根据Xgboost存在的缺点,进一步改进优化。

改进点:

  1GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。允许用户定义自定义优化目标和评价标准,只要一、二阶可导即可

  2 xgboost 在代价函数里加入了正则项,用于控制模型的复杂度。从 Bias-variance tradeoff 角度来讲,正则项降低了模型 variance ,使学习出来的模型更加简单,防止过拟合,这也是 xgboost 优于传统 GBDT 的一个特性。 

  3、对于特征的值有缺失的样本,xgboost可以自动学习出它的分裂方向。Xgboost把缺失值当做稀疏矩阵来对待,本身的在节点分裂时不考虑的缺失值的数值。缺失值数据会被分到左子树和右子树分别计算损失,选择较优的一个。

  4、支持并行:训练时可以用所有的 CPU 内核来并行化建树,实现并行处理,也支持Hadoop实现。Xgboost使用可并行的近似直方图(histogram)算法,高效地生成候选的分割点。特征粒度上的并行,决策树学习最耗时的是对特征进行排序,xgboost在训练前,预先对数据进行排序保存为Block,后面的迭代重复使用这个结构(排序存储为Block,然后调用Block取特征)

  5模型的可扩展性:GBDTCART作为基分类器,xgboost还支持线性分类器gblinear)。 

  6、剪枝:XGBoost分裂到指定的树的最大深度,反向剪枝,去掉不再有正值的分裂。

  7、内置交叉验证:Xgboost允许在boosting处理中每轮迭代进行交叉验证。因此,很容易得到boosting迭代单次运行的最佳次数。交叉验证时可以返回模型在每一折作为预测集时的预测结果,方便构建ensemble模型。

  8输出特征重要性:可以给出训练好的模型的特征重要性,可以基于此对模型进行特征选择。

XGBoost的缺点:
特征并行化(预排序)导致:空间消耗大——保存特征以及其排序结果(为了后续计算分割快速)、消耗训练数据两倍的内存
                        时间开销——遍历每个分割点的时候进行分裂增益的计算,代价大
                        cache优化——预排序后,特征对梯度的访问是一种随机访问;每层建树时,随机访问行索引到叶子索引的数组,对不同特征的访问顺序不同。

在python中实现需手动安装xgboost包


四、lightGBM

LightGBM 是一个基于树学习的梯度提升框架,支持高效率的并行训练,它有以下优势:

- 更快的训练效率         - 低内存使用       - 更好的准确率

- 支持并行和GPU          -可处理大

算法原理——

基于 Histogram 的决策树算法:

先把连续的浮点特征值离散化成k个整数,同时构造一个宽度为k的直方图。在遍历数据的时候,根据离散化后的值作为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点。


带深度限制的 Leaf-wise 的叶子生长策略
直方图做差加速
直接支持类别特征 (CategoricalFeature)
Cache 命中率优化
基于直方图的稀疏特征优化

多线程优化:特征并行的主要思想是在不同机器在不同的特征集合上分别寻找最优的分割点,然后在机器间同步最优的分割点。

调参参数(重要):
num_leaves——控制树模型复杂性的重要参数,=2^(max_depth)
min_data_in_leaf——避免leaf_wise tree 算法
max_depth——设定限制树的生长
提高精度的参数

· 设定更大的max_bin值(但会拖慢速度)

· 设定较小的learning_rate值,较大的num_iterations值

· 设定大的num_leaves值(但容易导致过拟合)

· 加大训练集数量(更多样本,更多特征)

· 试试boosting= dart


五、算法对比

LightGBMvs Xgboost

       在实际使用的过程中,给我一个最直接的感觉就是LightGBM的速度比xgboost快很快


CatBoost:测试集中最大精确度、最小过拟合、最小预测时间和调优时间
XGBoost:整体运行良好,精确度接近CatBoost,缺点:慢
lightGBM: 在使用cat_features时 它在速度和精确度方面都表现不佳,速度快于XGBoost、容易过拟合


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/myy1012010626/article/details/80793074

智能推荐

基于多元宇宙算法优化的广义回归神经网络(GRNN)预测-程序员宅基地

文章浏览阅读859次,点赞11次,收藏22次。广义回归神经网络 CGRNN, Generalized Regression Neural Network)是美国学者 Don-aid F. Specht 在 1991 年提出的,它是径向基神经网络的一种。GRNN 具有很强的非线性映射能力和柔性网络结构以及高度的容错性和鲁棒性,适用于解决非线性问题。GRNN在逼近 能力和学习速度上较 RBF 网络有更强的优势,网络最后收敛于样本量积聚较多的优化回归 面,并且在样本数据较少时,预测效果也好。此外,网络还可以处理不稳定的数据。

强制关闭redis快照出现的异常-程序员宅基地

文章浏览阅读168次。https://blog.csdn.net/weixin_42781180/article/details/81950187转载于:https://www.cnblogs.com/1a2a/p/10821037.html_为什么docker里面的redis快照总是被强制关闭

Prometheus-监控ICMP/TCP一:安装与配置_prometheus ping-程序员宅基地

文章浏览阅读6.6k次。Prometheus监控_prometheus ping

mybatis plus 条件构造器 queryWrapper、updateWrapper_mybatisplus querywrapper updatewrapper-程序员宅基地

文章浏览阅读3.6k次,点赞2次,收藏17次。一、条件构造器关系介绍wapper介绍 :Wrapper : 条件构造抽象类,最顶端父类,抽象类中提供4个方法西面贴源码展示AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。LambdaQueryWrapper :看名称也能明白就是用于Lambda语法使用的查询WrapperLambdaUpdateWrappe_mybatisplus querywrapper updatewrapper

JavaScrip笔记 DOM-程序员宅基地

文章浏览阅读55次。JavaScrip笔记 DOM新建模板小书匠三、DOM1、概念所谓DOM,全称 Docuemnt Object Model 文档对象模型,毫无疑问,此时要操作对象,什么对象?文档对象。在文档中一切皆对象,比如html,body,div,p等等都看做对象,那么我们如何来点击某个盒子让它变色呢?DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构。目的其实就是为了能让js操作..._创建弹出模态框的相关dom对象

多线程相关实例(多线程经典应用场景)_多线程的应用场景-程序员宅基地

文章浏览阅读1.8w次,点赞29次,收藏217次。转载,from 网络,未能找到原创人员,只找到一个二手转载 https://blog.csdn.net/u013521220/article/details/79648270一.相关知识:Java多线程程序设计到的知识:(一)对同一个数量进行操作(二)对同一个对象进行操作(三)回调方法使用(四)线程同步,死锁问题(五)线程通信等等二.示例一:三个售票窗口同时出售20张票;程序分析:1.票数要使用同一个静态值2.为保证不会出现卖出同一个票数,要java多线程同步锁。设计思路:1.创._多线程的应用场景

随便推点

JS-33-jQuery02-选择器-程序员宅基地

文章浏览阅读596次,点赞10次,收藏19次。单个选择器、层级选择器、子选择器、过滤器、表单相关选择器

plex插件显示无服务器,Plex插件-程序员宅基地

文章浏览阅读1.1w次。Plex应用支持众多平台和设备,比如Android TV、AppleTV、智能电视等使用流媒体传输的设备;Android、iOS的移动设备;也支持win和macOS系统的电脑。服务器端用于管理各种媒体(电影,剧集,照片,音乐,家庭视频),客户端用于解决播放(Mac,PC,iOS,Android,XBox,PS,各种TV,树莓派等)用户可以通过在电脑或者NAS上安装PlexMedia Server,..._kodi plex插件找不到服务器

芯片原理图中vcc+ vcc- vdd vss vee gnd 的含义?_半导体中vss,reset,vcc等等是什么意思-程序员宅基地

文章浏览阅读476次。为所有的模拟电路部分供电,包括ADC模块、复位电路、PVD(可编程电压监测器)、PLL、上电复位(POR)和掉电复位(PDR)模块、控制VBAT切换的开关等。电路的供电正电压 一般表示模拟信号电源、通常用于数字电路和模拟电路中,可理解为电路中的+5V、+12V及其他正电压,VCC表示的是CMOS电路的电源电压。芯片的工作正电压 表示数字信号电源、VDD则表示的是芯片的工作电源电压。VREF+接+5V,VREF-接GND。Clock(时钟)的缩写,是电子电路中常用的时钟信号,用于同步数据的传输。_半导体中vss,reset,vcc等等是什么意思

Docker系列之AspNetCore Runtime VS .NetCore Runtime VS SDK(四)-程序员宅基地

文章浏览阅读1k次。接下来我们就要慢慢步入在.NET Core中使用Docker的殿堂了,如题在开始之前,我们需要搞清楚一些概念,要不然看到官方提供如下一系列镜像,我们会一脸懵逼,不知道到底..._asp.net core runtime

Radware 9大方法为云安全保驾护航-程序员宅基地

文章浏览阅读73次。无论企业是否已经将部分或全部基础设施迁移到了云端,或是仍在考虑是否要迁移到云端,企业都应该认真考虑安全性问题。很多时候,企业都在使用云服务提供商所提供的一定程度的安全防护,但却没有采取相应措施,以保证云端应用和数据具有与托管在数据中心的数据一样的安全性。云技术的范围之广生成了一系列的新安全挑战。从在混合环境中协调安全策略,到密切注意云合作租户,这其中..._如何查看radware告警信息

【甘道夫】NN HA 对于 Client 透明的实验-程序员宅基地

文章浏览阅读124次。之前转载过一篇【伊利丹】写的NN HA实验记录。该博客描写叙述了主备NN透明切换的过程,也就是说,当主NN挂掉后,自己主动将备NN切换为主NN了,Hadoop集群正常执行。今天我继续做了一个实验。目的是实现NN的切换不会对Client端程序造成影响,即NN切换对Client透明。首先,非常重要的一点:..._nnha

推荐文章

热门文章

相关标签