一文速学数模-集成预测模型Boost(提升方法)原理以及框架+模型速览

news/2024/4/20 22:26:56/文章来源:https://blog.csdn.net/master_hunter/article/details/129155508

目录

前言

 一、Boosting算法起源

强学习

弱学习

二、Boosting算法核心思想

举例案例

类推

三、Boosting算法框架

四、Boosting算法种类

AdaBoost

GBDT

XGBoost

LighGBM

1.数据划分

2.直方图梯度提升决策树(Histogram-based Gradient Boosting Decision Tree)

3.基于梯度的单边采样(Gradient-based One-Side Sampling)

4.Leaf-wise生长策略

catboost

处理类别型特征

对称树生长算法

对数损失函数

正则化技术

总结

 


前言

博主参与过大大小小数十来次数学建模,且也是从事数据分析师这一职业,理解各类模型原理以及每种模型的建模流程和各类题目分析方法。此专栏的目的就是为了让零基础快速使用各类数学模型以及代码,每一篇文章都包含实战项目以及可运行代码,博主紧跟各类数模比赛,每场数模竞赛博主都会将最新的思路和代码写进此专栏以及详细思路和完全代码,打造最实用优质数学建模专栏。专栏模型基本包含所有的预测、分类、聚类、评价、动态规划以及图论算法模型,希望有学习需求的小伙伴不要错过。

集成学习的方法在全球各大机器学习、数据挖掘竞赛中使用的非常广泛,其概念和思想也是风靡学术界和工业界,我的期刊论文以及毕业百优论文也是用到了集成学习算法。此篇文章主要给Boosting集成算法做总体介绍,了解Boosting集成算法的基本框架以及核心思想。再将每一种集成算法原理和算法包括代码都讲解清楚,结合实际案例项目能够达到实践预测。


 一、Boosting算法起源

Valiant和 Kearns提出了弱学习和强学习的概念。

强学习

识别准确率很高并能在多项式时间内完成的学习算法称为强学习算法。强学习器有堆叠法(stacking),混合法(Blending),多数法,平均法等。

弱学习

识别错误率小于1/2,也即准确率仅比随机猜测略高的学习算法称为弱学习算法。比如袋装法:(bagging),提升法。

集成模型的起源也就在于如何将一些计算花费成本较低,逻辑较为简单的弱学习器如何转换成花费成本较高,但预测准确性高,逻辑复杂的强学习器。如果二者等价 ,那么只需找到一个比随机猜测略好的弱学习算法就可以将其提升为强学习算法 ,而不必寻找很难获得的强学习算法。

基于此理念便诞生出了集成学习算法思想。

二、Boosting算法核心思想

首先不必过于学术语言理解Boosting算法思想,我们可以拿挑电影的想法去拟合Boosting算法思想:

举例案例

最近上映一部影片你想要去看,你想要确定是否值得去观看。那么首先最直观的就是去看其电影的评分,首先可以考虑各个电影APP给出的评分,再者去看看豆瓣知乎其他人给出的评分,以及其他同事朋友给出的评分,最终你收集这些所有评分,根据不同的渠道给他们给予一定的权重(比如豆瓣评分占比高一些,但是电影APP评分少一些),计算出得到你觉得此片应有的评分,再去看此部电影。

类推

以上案例就是基本的集成学习思想,把各种渠道当作是学习器,给出的评分就是这些学习器预测出的结果。当然你可以去收集足够多的渠道,让几百个人评价你的电影,这种情况的回答普遍会更加的多元化,事实证明,这是获得最佳评价的方法。

多个决策者比一个决策者可能会做出更好的决策,各种模型的整合也是如此,机器学习这种多样化就是通过集成学习的技术实现的。

三、Boosting算法框架

Boost 框架是一种通过累加弱模型来产生一个强模型的方法。它和一般的 Bagging 投票方法相比较,它们的相同点都是累加弱模型,但区别是在投票模型中, 每一个弱模型都是预测最终结果的(通过不同Groups的features),而 Boost 框架中的第 个弱模型是预测前面 个累加模型与正确答案之间的残差 (residual), 也就是说 Boost 框架通过不断消除残差来提高模型精度。

通过Boosting框架对训练样本集的操作,得到不同的训练样本子集,用该样本子集去训练生成基分类器;每得到一个样本集就用该基分类算法在该样本集上产生一个基分类器,这样在给定训练轮数 n 后,就可产生 n 个基分类器,然后Boosting框架算法将这 n个基分类器进行加权融合,产生一个最后的结果分类器,在这 n个基分类器中,每个单个的分类器的识别率不一定很高,但他们联合后的结果有很高的识别率,这样便提高了该弱分类算法的识别率。

四、Boosting算法种类

AdaBoost

具体说来,整个Adaboost 迭代算法就3步:

初始化训练数据的权值分布。如果有N个样本,则每一个训练样本最开始时都被赋予相同的权值:1/N。

训练弱分类器。具体训练过程中,如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它的权值就被降低;相反,如果某个样本点没有被准确地分类,那么它的权值就得到提高。然后,权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。

将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。换言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小。

AdaBoost模型的建模流程图:

 伪代码

以下是AdaBoost算法的伪代码描述:

输入:

  • 训练集 D = {(x_1, y_1), (x_2, y_2), ..., (x_m, y_m)},其中 x_i \in \mathbb{R}^n 表示第 i 个样本的特征向量,y_i \in {-1, 1} 表示第 i 个样本的类别标签。
  • 弱学习算法\mathcal{A}
  • 迭代次数 T

输出:

AdaBoost算法得到的强分类器H(x)

  1.  初始化训练数据的权值分布:对所有样本 i,令D_1(i) = 1/m
  2. 迭代 T次:
    1. 使用权值分布 D_t 训练弱分类器h_t(x)h_t(x) = \mathcal{A}(D_t)
    2. 计算分类误差率 \epsilon_t\epsilon_t = \sum_{i=1}^m D_t(i) \cdot [h_t(x_i) \neq y_i]
    3. 计算弱分类器h_t(x)的权重\alpha_t\alpha_t = \frac{1}{2} \ln \frac{1-\epsilon_t}{\epsilon_t}
    4. 更新样本权值分布D_{t+1}:对所有样本i,令D_{t+1}(i) = \frac{D_t(i) \cdot \exp(-\alpha_t y_i h_t(x_i))}{\sum_{j=1}^m D_t(j) \cdot \exp(-\alpha_t y_j h_t(x_j))}
    5. 构建强分类器H(x)H(x) = sign \left( \sum_{t=1}^T \alpha_t h_t(x) \right)

其中,\mathcal{A} 是一个能够训练弱分类器的算法,例如决策树、神经网络等。D_t(i) 表示第 t 轮迭代中第 i个样本的权值,初始值为 1/m\alpha_t是弱分类器 h_t(x)的权重,用于组合成强分类器 H(x)。最后,sign(\cdot)表示符号函数,即正数返回1,负数返回-1。

GBDT

GBDT也是集成学习Boosting家族的成员,但是却和传统的Adaboost有很大的不同。回顾下Adaboost,我们是利用前一轮迭代弱学习器的误差率来更新训练集的权重,这样一轮轮的迭代下去。GBDT也是迭代,使用了前向分布算法,但是弱学习器限定了只能使用CART回归树模型,同时迭代思路和Adaboost也有所不同。

在GBDT的迭代中,假设我们前一轮迭代得到的强学习器是ft−1(x)ft−1(x), 损失函数是L(y,ft−1(x))L(y,ft−1(x)), 我们本轮迭代的目标是找到一个CART回归树模型的弱学习器ht(x)ht(x),让本轮的损失函数L(y,ft(x)=L(y,ft−1(x)+ht(x))L(y,ft(x)=L(y,ft−1(x)+ht(x))最小。也就是说,本轮迭代找到决策树,要让样本的损失尽量变得更小。

GBDT的思想可以用一个通俗的例子解释,假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。

XGBoost

XGBoost的全程为eXtreme Gradient Boosting,即极度梯度提升树

相较于GBDT,XGBoost的最大特性在于对损失函数展开到二阶导数,是的梯度提升树模型更能逼近其真实损失。

XGBoost本质上仍然属于GBDT算法,但在算法精度、速度和泛化能力上均要优于传统的GBDT算法。

从算法速度上来看,XGBoost使用了加权分位树sketch和稀疏感知算法这两个技巧,通过缓存优化和模型并行来提高算法速度;
从算法泛化能力上来看,通过对损失函数加入正则化项、加性模型中设置缩减率和列抽样等方法,来防止模型过拟合。

XGBoost根据结构分数的增益情况计算出来选择哪个特征作为 分割点,而某个特征的重要性就是它在所有树中出现的次数之和。 也就是说一个属性越多的被用来在模型中构建决策树,它的重要性就相对越高。等我会在后续文章更详细的讲解

LighGBM

LightGBM是一种梯度提升决策树(GBDT)算法,它通过改进梯度提升决策树的构建方式,提高了模型的训练速度和准确性。

1.数据划分

LightGBM在每一轮迭代中,将训练数据划分为若干份,每份数据被称为一个“子集”,通常会划分成100到10000个子集,这个数量也被称为“叶子数”。每个子集中包含若干个数据点,每个数据点可以属于多个子集。

2.直方图梯度提升决策树(Histogram-based Gradient Boosting Decision Tree)

LightGBM使用直方图算法来计算特征的梯度和海森矩阵,从而加速梯度提升决策树的训练过程。直方图算法是一种离散化算法,它将连续的特征值分为若干个桶(bin),将相似的值分到同一个桶中,每个桶中包含若干个值,从而将连续值转化为离散值。然后,LightGBM将每个桶看作一个离散的特征,利用直方图算法来计算每个离散特征的梯度和海森矩阵,从而构建梯度提升决策树。

3.基于梯度的单边采样(Gradient-based One-Side Sampling)

为了加速训练过程,LightGBM采用基于梯度的单边采样技术。具体来说,LightGBM对每个子集采用单边采样策略,只选择梯度比较大的数据点,而忽略梯度比较小的数据点。这样可以在不降低模型准确性的前提下,减少训练数据的规模,从而加速训练过程。

4.Leaf-wise生长策略

与传统的深度优先生长策略不同,LightGBM采用一种称为“Leaf-wise”的生长策略。Leaf-wise生长策略是指每次从当前所有叶子节点中,选择增益最大的一个叶子节点,然后分裂该节点,直到达到指定的叶子数。这种生长策略可以最小化损失函数,从而提高模型的准确性。但是,这种策略容易导致过拟合,因此LightGBM采用了正则化技术来避免。

catboost

CatBoost是一种基于梯度提升决策树的机器学习算法,它主要用于解决分类和回归问题。相比其他梯度提升决策树算法,CatBoost具有以下优势:

处理类别型特征

CatBoost使用基于特征统计的方法,对类别型特征进行处理。具体来说,CatBoost将每个类别型特征的每个取值都编码成一个数字,称为“类别编码”,然后将类别编码作为特征输入到模型中。在计算梯度时,CatBoost将类别型特征的每个取值看作一个独立的特征,计算该特征的梯度和海森矩阵。这种方法可以有效处理类别型特征,避免了传统方法中需要进行独热编码或者特征交叉的问题。

对称树生长算法

CatBoost使用对称树生长算法,对树的结构进行优化。传统的GBDT算法采用的是深度优先生长策略,会导致一些分支节点的样本量过小,从而影响模型的泛化能力。为了解决这个问题,CatBoost使用对称树生长算法,将每个节点看作一个二叉树结构,采用局部贪心算法,同时考虑增益和样本数量,选择最佳的特征和阈值,对节点进行分裂。这样可以避免样本量过小的问题,提高模型的泛化性能。

对数损失函数

CatBoost采用对数损失函数(Logarithmic Loss),而不是均方误差损失函数(Mean Squared Error),这种损失函数可以更好地处理分类问题。对数损失函数可以将分类问题转化为一个概率预测问题,预测样本属于某个类别的概率,然后通过最大化对数似然函数,寻找最优的模型参数。

正则化技术

CatBoost采用了多种正则化技术,包括随机化正则化、L1/L2正则化和特征重要性排序等。随机化正则化可以防止过拟合,L1/L2正则化可以对模型参数进行限制,避免过拟合,特征重要性排序可以帮助用户选择最优的特征,提高模型的准确性。此外,CatBoost还支持Early stopping,可以在训练过程中自动停止训练,以避免过拟合。


总结

  在使用中,我们发现 Boost 方法能够很灵活地拟合各种复杂的训练样本,但在泛化方面却有一定的问题。 Boost 框架和 以随机森林 (Random Forest) 为代表的 Bagging 方法同为 模型 Ensemble 的思路,却着重优化了两个不同的方面:偏差 (Bias) 和 方差 (Variance)。

 对于 Boost 方法来说, 由于每一个弱分类器都为了是减少上一个弱分类器在训练样本里的偏差,所以最终 Ensemble 的 偏差 会较小,也就是模型比较灵活 (flexible); 而对于 Bagging 的方法来说恰恰相反,每一弱分类器都独立预测了最终的结果,通过平均结果的方法,我们把预测结果的方差也减少到了原来每个弱分类器的 。 为了提高 Boost 方法的泛化性能, 我们常常会在训练时,对其加入多个 Regularization 约束,并通过 Early Stopping 的方式来防止 Over-Fitting 。

接下来我会依次结合实际项目案例数据以及可复用python代码讲解实现各类Boosting算法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_72523.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一、线程的基本概念

文章目录基础概念线程与进程什么是进程?什么是线程?进程和线程的区别:多线程什么是多线程?多线程的局限性串行、并行、并发同步异步、阻塞非阻塞线程的创建1、继承Thread类,重写run方法2、实现Runnable接口&#xff0c…

软件质量测试中的健壮性测试是什么?一文和你说

当大多数人开车时,他们不会担心刹车失灵。当他们的孩子得到一个新玩具时,他们也不担心因故障受伤。事实上,大多数人在日常生活中根本不担心系统故障。 这是因为软件开发人员或质量控制工程师已经解决了质量问题。如果目标是交付高质量、可靠…

Win11安装软件报缺失.NET的解决方法

1.问题描述:安装软件时提示这个 2.解决方法: WinR 打开运行界面,输入control回车,打开控制面板 点击打开程序和功能 选择 启用或关闭Windows功能 --》勾选.NET Framework3.5...这一项,点击确定,如果电脑上…

学习Flask之五、数据库

学习Flask之五、数据库 数据库有组织的存贮应用数据。根据需要应用发布查询追踪特定部分。网络应用最常用的数据库是基于关系模式的,也称为SQL数据库,引用结构化查询语句。但是近年来,面向文档和键值的数据库,非正式的统称为NoSQ…

一文教你玩转 Apache Doris 分区分桶新功能|新版本揭秘

数据分片(Sharding)是分布式数据库分而治之 (Divide And Conquer) 这一设计思想的体现。过去的单机数据库在大数据量下往往面临存储和 IO 的限制,而分布式数据库则通过数据划分的规则,将数据打散分布至不同的机器或节点上&#xf…

全局组件和局部组件

全局组件第一种定义方法:A、创建自己的组件:Loading.vueB、在main.js文件中引入组件并注册import Vue from vue import App from ./App.vue import * as filters from ./filterimport quanjuzujian from ./components/quanjuzujian.vueVue.component(qua…

PowerJob容器的今生,容器是如何部署到Worker上,并正常运行的

这仅仅是一篇PowerJob源码分析的文章,但是也有一些java基础知识,在实践中学习效果更好,感兴趣就留下来交流一下吧。 上回书说到,这个powerjob容器是如何生成模板,如何上传到服务器上去,本回主要总结的是&am…

【踩坑指南】Stable Diffusion 服务器端部署笔记

文章目录下载github文件配置环境ckpt文件权重下载生成图像NSFW检查(瑟图过滤)下载github文件 https://github.com/CompVis/stable-diffusion 这个网址,下载压缩包解压,也可以用git clone下载 配置环境 这一步坑最多&#xff0c…

day32 多线程(上)

文章目录相关概念codeThreadTest01ThreadTest02 编写一个类,直接继承java.lang.Thread,重写run方法ThreadTest03 实现线程的第二种方法ThreadTest04 采用匿名内部类的方式ThreadTest05 获取线程名字ThreadTest06 sleep方法sleep面试题ThreadTest08 终止线…

游戏专用蓝牙耳机哪个牌子好?最好的游戏蓝牙耳机品牌排行

近年来,随着越来越多手机取消3.5mm耳机孔,真无线耳机也逐渐流行起来,随着国内的手机品牌越来越多,真无线耳机的品类逐渐增多,面向游戏用户的游戏模式也出现了,下面我们来看看以下几款游戏专用的蓝牙耳机。 …

10 种主数据模型设计示例分享,推荐收藏

主数据模型是主数据管理的基础,一个完整的、可扩展的、相对稳定的主数据模型对于主数据管理的成功起着重要的作用。规划、创建主数据模型的过程,是梳理主数据管理体系的过程,目的是建立一个良好的资源目录结构,划分合理的资源粒度…

Leetcode力扣秋招刷题路-0088

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 88. 合并两个有序数组 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 …

我说我为什么抽不到SSR,原来是这段代码在作祟...

本文是龚国玮所写,熊哥有所新增修改删减,原文见文末。 我说我为什么抽不到SSR,原来是加权随机算法在作祟 阅读本文需要做好心理准备,建议带着深究到底的决心和毅力进行学习! 灵魂拷问 为什么有 50% 的几率获得金币&a…

同一局域网的不同主机使用共享文件夹通信(仅限于不同Windows主机之间的通信)

1、新建共享文件夹 我们新建一个文件夹 Server-Share,右键点击“ 属性 ” 选择“everyone”,即允许当前局域网下的所有用户访问这个共享文件夹 此时该文件夹面向当前局域网是公开的。 2、服务器访问共享文件夹 (1) 查看当前电脑的IP IP地址可以唯一标…

企业为什么需要数据可视化报表

数据可视化报表是在商业环境、市场环境已经改变之后,发展出来为当前企业提供替代解决办法的重要方案。而且信息化、数字化时代,很多企业已经进行了初步的信息化建设,沉淀了大量业务数据,这些数据作为企业的资产,是需要…

园区数字化转型必不可少的助推器:快鲸智慧园区系统

数字化浪潮下,园区数字化转型已成必然趋势。可大多数人在讨论智慧园区的时候,更多聚焦在技术上,却忽略了一个关键点,就是打造智慧园区最终的结果导向是提高业务信息化水平,进而达到集约高效、提质增效、节能降耗的可持…

干货复试详细教程——从联系导师→自我介绍的复试教程

文章目录联系导师联系之前的准备联系导师注意自我介绍教育技术领域通用的复试准备其他补充联系导师 确定出分和自己能进复试以后联系。 分两类 科研技能型 低调,如实介绍,不吹不水。就算你很牛啥都会手握核心期刊论文也不太狂 学霸高分型 不要自卑&…

STM32-CAN配置与库函数解析,实现环回模式通信

STM32-CAN配置与库函数解析 CAN总线介绍:https://blog.csdn.net/weixin_46251230/article/details/129147612 STM32-CAN控制器介绍:https://blog.csdn.net/weixin_46251230/article/details/129150872 STM32CubeMx配置 因为bxCAN是挂载在APB1总线上的…

【学习总结】相机与IMU标定一:Kalibr论文

论文:2013IROS论文,Unified Temporal and Spatial Calibration for Multi-Sensor Systems,是Kalibr工具的参考论文之一。介绍了如何进行IMU与相机标定。 参考的一篇资料:知乎:超全汇总!多传感器离线/在线时…

新建微服务模块Maven子工程

gitegg-cloud是微服务框架,整体功能是非业务相关的基础功能,在实际业务开发过程中需要新建微服务的业务模块,根据业务的整体规划,设计新建Maven子工程。   下面以常用的电商项目举例新建Maven子工程,电商项目一般包含…