本篇基于机器学习(edt:周志华)的集成学习章节,衍生学习多种boosting集成学习算法。
集成学习(ensemblelearning)通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-calssifiersystem)。
目前的集成学习方法大致可以分为两大类:
前者的代表是Boosting,后者的代表是Bagging。
Boosting 是一种将弱分离器 组合起来形成强分类器F(x)的框架,一般地,Boosting算法有三个要素:
1)函数模型:Boosting是加法函数,又叫叠加型的:
2)目标函数:选定某种损失函数作为优化目标:
3)优化算法:贪婪地逐步优化,即
以下介绍几种典型的boosting算法,包括:AdaBoost、GBDT、XGBoost、lightGBM、CatBoost
一、AdaBoost算法
AdaBoost算法的主要原理:
优点:
缺点:
二、GBDT算法(Gradient Boosting Decision Tree)
AdaBoost是通过提升错分数据点的权重来定位模型的不足,而Gradient Boosting是通过算梯度(gradient)来定位模型的不足。
模型可以表示为:
弱分类器的损失函数:
模型一共训练M轮,每轮产生一个弱分类器 T(x;θm) 。
过程:利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值去拟合一个回归树。gbdt每轮迭代的时候,都去拟合损失函数在当前模型下的负梯度。这样每轮训练的时候都能够让损失函数尽可能快的减小,尽快的收敛达到局部最优解或者全局最优解。
优点:
1)可以灵活处理各种类型的数据,包括连续值和离散值。
2)在相对少的调参时间情况下,预测的准确率也可以比较高(相对SVM)。
3)使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。
缺点:
1)由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。
在scikit-learn中,GradientBoostingClassifier为GBDT的分类类
三、XGBoost算法
GBDT是以决策树(CART)为基学习器的GB算法,Xgboost扩展改进了GBDT。Xgboost算法更快,准确率也相对高一些,LightGBM则是在Xgboost的基础上根据Xgboost存在的缺点,进一步改进优化。
改进点:
1、GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。允许用户定义自定义优化目标和评价标准,只要一、二阶可导即可。
2 、 xgboost 在代价函数里加入了正则项,用于控制模型的复杂度。从 Bias-variance tradeoff 角度来讲,正则项降低了模型 variance ,使学习出来的模型更加简单,防止过拟合,这也是 xgboost 优于传统 GBDT 的一个特性。
3、对于特征的值有缺失的样本,xgboost可以自动学习出它的分裂方向。Xgboost把缺失值当做稀疏矩阵来对待,本身的在节点分裂时不考虑的缺失值的数值。缺失值数据会被分到左子树和右子树分别计算损失,选择较优的一个。
4、支持并行:训练时可以用所有的 CPU 内核来并行化建树,实现并行处理,也支持Hadoop实现。Xgboost使用可并行的近似直方图(histogram)算法,高效地生成候选的分割点。特征粒度上的并行,决策树学习最耗时的是对特征进行排序,xgboost在训练前,预先对数据进行排序保存为Block,后面的迭代重复使用这个结构(排序存储为Block,然后调用Block取特征)
5、模型的可扩展性:GBDT以CART作为基分类器,xgboost还支持线性分类器(gblinear)。
6、剪枝:XGBoost分裂到指定的树的最大深度,反向剪枝,去掉不再有正值的分裂。
7、内置交叉验证:Xgboost允许在boosting处理中每轮迭代进行交叉验证。因此,很容易得到boosting迭代单次运行的最佳次数。交叉验证时可以返回模型在每一折作为预测集时的预测结果,方便构建ensemble模型。
8、输出特征重要性:可以给出训练好的模型的特征重要性,可以基于此对模型进行特征选择。
在python中实现需手动安装xgboost包
四、lightGBM
LightGBM 是一个基于树学习的梯度提升框架,支持高效率的并行训练,它有以下优势:
- 更快的训练效率 - 低内存使用 - 更好的准确率
- 支持并行和GPU -可处理大
算法原理——
先把连续的浮点特征值离散化成k个整数,同时构造一个宽度为k的直方图。在遍历数据的时候,根据离散化后的值作为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点。
•多线程优化:特征并行的主要思想是在不同机器在不同的特征集合上分别寻找最优的分割点,然后在机器间同步最优的分割点。
· 设定更大的max_bin值(但会拖慢速度)
· 设定较小的learning_rate值,较大的num_iterations值
· 设定大的num_leaves值(但容易导致过拟合)
· 加大训练集数量(更多样本,更多特征)
· 试试boosting= dart更
五、算法对比
在实际使用的过程中,给我一个最直接的感觉就是LightGBM的速度比xgboost快很快
文章浏览阅读859次,点赞11次,收藏22次。广义回归神经网络 CGRNN, Generalized Regression Neural Network)是美国学者 Don-aid F. Specht 在 1991 年提出的,它是径向基神经网络的一种。GRNN 具有很强的非线性映射能力和柔性网络结构以及高度的容错性和鲁棒性,适用于解决非线性问题。GRNN在逼近 能力和学习速度上较 RBF 网络有更强的优势,网络最后收敛于样本量积聚较多的优化回归 面,并且在样本数据较少时,预测效果也好。此外,网络还可以处理不稳定的数据。
文章浏览阅读168次。https://blog.csdn.net/weixin_42781180/article/details/81950187转载于:https://www.cnblogs.com/1a2a/p/10821037.html_为什么docker里面的redis快照总是被强制关闭
文章浏览阅读6.6k次。Prometheus监控_prometheus ping
文章浏览阅读3.6k次,点赞2次,收藏17次。一、条件构造器关系介绍wapper介绍 :Wrapper : 条件构造抽象类,最顶端父类,抽象类中提供4个方法西面贴源码展示AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。LambdaQueryWrapper :看名称也能明白就是用于Lambda语法使用的查询WrapperLambdaUpdateWrappe_mybatisplus querywrapper updatewrapper
文章浏览阅读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.创._多线程的应用场景
文章浏览阅读596次,点赞10次,收藏19次。单个选择器、层级选择器、子选择器、过滤器、表单相关选择器
文章浏览阅读1.1w次。Plex应用支持众多平台和设备,比如Android TV、AppleTV、智能电视等使用流媒体传输的设备;Android、iOS的移动设备;也支持win和macOS系统的电脑。服务器端用于管理各种媒体(电影,剧集,照片,音乐,家庭视频),客户端用于解决播放(Mac,PC,iOS,Android,XBox,PS,各种TV,树莓派等)用户可以通过在电脑或者NAS上安装PlexMedia Server,..._kodi plex插件找不到服务器
文章浏览阅读476次。为所有的模拟电路部分供电,包括ADC模块、复位电路、PVD(可编程电压监测器)、PLL、上电复位(POR)和掉电复位(PDR)模块、控制VBAT切换的开关等。电路的供电正电压 一般表示模拟信号电源、通常用于数字电路和模拟电路中,可理解为电路中的+5V、+12V及其他正电压,VCC表示的是CMOS电路的电源电压。芯片的工作正电压 表示数字信号电源、VDD则表示的是芯片的工作电源电压。VREF+接+5V,VREF-接GND。Clock(时钟)的缩写,是电子电路中常用的时钟信号,用于同步数据的传输。_半导体中vss,reset,vcc等等是什么意思
文章浏览阅读1k次。接下来我们就要慢慢步入在.NET Core中使用Docker的殿堂了,如题在开始之前,我们需要搞清楚一些概念,要不然看到官方提供如下一系列镜像,我们会一脸懵逼,不知道到底..._asp.net core runtime
文章浏览阅读73次。无论企业是否已经将部分或全部基础设施迁移到了云端,或是仍在考虑是否要迁移到云端,企业都应该认真考虑安全性问题。很多时候,企业都在使用云服务提供商所提供的一定程度的安全防护,但却没有采取相应措施,以保证云端应用和数据具有与托管在数据中心的数据一样的安全性。云技术的范围之广生成了一系列的新安全挑战。从在混合环境中协调安全策略,到密切注意云合作租户,这其中..._如何查看radware告警信息
文章浏览阅读124次。之前转载过一篇【伊利丹】写的NN HA实验记录。该博客描写叙述了主备NN透明切换的过程,也就是说,当主NN挂掉后,自己主动将备NN切换为主NN了,Hadoop集群正常执行。今天我继续做了一个实验。目的是实现NN的切换不会对Client端程序造成影响,即NN切换对Client透明。首先,非常重要的一点:..._nnha