原文链接:http://tecdat.cn/?p=22482

原文出处:拓端数据部落公众号

为什么要使用Boosting?

单一模型的预测往往会有缺陷,为了解决复杂的问题,我们需要集成学习通过组合多个模型来提高机器学习的预测性能。

视频:Boosting集成学习原理与R语言提升回归树BRT预测短鳍鳗分布生态学实例

Boosting集成学习原理与R语言提升回归树BRT预测短鳍鳗分布生态学实例

,时长10:25

假设给定包含猫和其他动物图像的数据集,您被要求构建一个模型,可以将这些图像分为两个单独的类。像其他人一样,您将首先使用一些规则来识别图像,如下所示:

图像有尖耳朵:图像判断为猫

图像有一个更宽的嘴结构:图像判断为狗

图像有猫形眼睛:图像判断为猫

图像有锋利的爪子:图像判断为猫

所有这些规则都可以帮助我们识别图像是狗还是猫,但是,如果我们要根据单一规则对图像进行分类,那么预测就会有缺陷。这些规则中的每一个都被单独称为弱学习器,因为这些规则不足以将图像分类为猫或狗。

因此,为了确保我们的预测更准确,我们可以通过使用多数规则或加权平均来组合来自这些弱学习器中的每一个的预测。这构成了一个强大的学习者模型。

在上面的例子中,我们定义了 4 个弱学习器,这些规则中的大多数(即 4 个学习器中有 3 个将图像预测为猫)为我们提供了预测图像是一只猫。因此,我们的最终输出是一只猫。

什么是Boosting?

Boosting 是一种集成学习技术,它使用一组机器学习算法将弱学习器转换为强学习器,以提高模型的准确性。

集成学习是一种通过组合多个学习器来提高机器学习模型性能的方法,它试图从弱分类器的数量中构建一个强分类器。它是通过串联使用弱模型来构建模型来完成的。与单一模型相比,这种类型的学习构建的模型具有更高的效率和准确性。这就是为什么使用集成方法赢得市场领先的比赛,如 Netflix 推荐比赛、Kaggle 比赛等。

AdaBoost是第一个真正成功的为二分类而开发的Boosting算法。AdaBoost是Adaptive Boosting的缩写,是一种非常流行的提升技术,它将多个“弱分类器”组合成一个“强分类器”。

上图以非常简单的方式解释了AdaBoost算法。让我们尝试逐步理解它:

模型1由10个数据点组成,它们由两种类型组成,即加号和减号,其中5个是加号,另外5个是减号,并且每个数据点最初都被分配了相同的权重。第一个模型尝试对数据点进行分类并生成一条垂直分隔线,但它错误地将3加号分类为减号。

模型2由来自先前模型的10个数据点组成,其中3个错误分类的加号被加权更多,以便当前模型尝试更多地正确分类这些加号。该模型生成了一条垂直分隔线,可以正确分类先前错误分类的加号,但在此尝试中,它错误地分类了三个减号。

模型3由来自先前模型的10个数据点组成,其中3个错误分类的减号的权重更高,因此当前模型尝试更多地正确分类这些减号。该模型生成一个水平分隔线,可以正确分类先前错误分类的减号。

模型4将模型1、模型2 和模型3 组合在一起,以构建一个比使用的任何单个模型都要好得多的强大预测模型。

boosting的利弊

与其他类型的模型相比,boosting的明显好处是它能够生成具有高预测准确性的模型。

一个潜在的缺点是拟合的提升模型很难解释。虽然它可能提供了预测新数据因变量的巨大能力,但很难解释它执行此操作的确切过程。

Boosting的种类有哪些?

Boosting 算法分为以下三种类型:

刚才提到的AdaBoost(自适应提升)算法。

梯度提升算法。

XGBoost 算法。

梯度提升

Gradient Boosting 也是基于顺序集成学习。这里的基础学习器是按顺序生成的,这样当前的基础学习器总是比前一个更有效,即整个模型随着每次迭代而顺序改进。

这种类型的提升的不同之处在于错误分类结果的权重不会增加,相反,梯度提升方法试图通过添加一个添加弱学习者的新模型来优化先前学习者的损失函数,以减少损失函数。

这里的主要思想是克服先前学习者预测中的错误。这种类型的提升具有三个主要组成部分:

1.需要改进的损失函数。

2.用于计算预测和形成强学习器的弱学习器。

3.将规范化损失函数的加法模型。

与 AdaBoost 一样,梯度提升也可用于分类和回归问题。

XGBoost

XGBoost 是 Gradient Boosting 方法的高级版本,字面意思是 eXtreme Gradient Boosting。陈天启开发的 XGBoost 属于分布式机器学习社区(DMLC)的范畴。

该算法的主要目的是提高计算速度和效率。Gradient Descent Boosting 算法以较慢的速度计算输出,因为它们按顺序分析数据集,因此 XGBoost 用于提升或极大提升模型的性能。

XGBoost 旨在专注于计算速度和模型效率。XGBoost 提供的主要功能有:

并行创建决策树。

实施用于评估大型复杂模型的分布式计算方法。

使用核外计算分析庞大的数据集。

实施缓存优化以充分利用资源。

R语言生态学建模:提升回归树(BRT)预测短鳍鳗生存分布和影响因素

这是一个简短的教程,在R中拟合BRT(提升回归树)模型。我们的目标是使BRT(提升回归树)模型应用于生态学数据,并解释结果。

本教程的目的是帮助你学习如何在R中开发一个BRT模型。

示例数据

有两套短鳍鳗的记录数据。一个用于模型训练(建立),一个用于模型测试(评估)。在下面的例子中,我们加载的是训练数据。存在(1)和不存在(0)被记录在第2列。环境变量在第3至14列。

> head(train)

拟合模型

拟合gbm模型,你需要决定使用什么设置,本文为你提供经验法则使用的信息。这些数据有1000个地点,包括202条短鳍鳗的存在记录。你可以假设:1. 有足够的数据来建立具有合理复杂性的相互作用模型  2. 大约0.01的lr学习率可能是一个合理的初始点。下面的例子显示如何确定最佳树数(nt)。

step(data= train,  x = 3:13,family = "bernoulli",  comp = 5,lr = 0.01, bag.fr = 0.5)

对提升回归树模型进行交叉验证优化。
使用1000个观测值和11个预测因子,创建10个50棵树的初始模型。

上面我们使用了交叉验证的。我们定义了:数据;预测变量;因变量--表示物种数据的列号;树的复杂度--我们首先尝试树的复杂度为5;学习率--我们尝试用0. 01。

运行一个如上所述的模型,将输出进度报告,做出图形。首先,你能看到的东西。这个模型是用默认的10倍交叉验证法建立的。黑色实心曲线是预测偏差变化的平均值,点状曲线是1个标准误差(即在交叉验证上测量的结果)。红线表示平均值的最小值,绿线表示生成该值的树的数量。模型对象中返回的最终模型是在完整的数据集上建立的,使用的是最优的树数量。

length(fitted)

返回的结果包含 fitted - 来自最终树的拟合值,fitted.vars - 拟合值的方差, residuals - 拟合值的残差,contribution - 变量的相对重要性。statistics - 相关的评估统计量。cv.statistics 这些是最合适的评估统计数据。

我们在每个交叉验证中计算每个统计量(在确定的最佳树数下,根据所有交叉验证中预测偏差的平均变化进行计算),然后在此呈现这些基于交叉验证的统计量的平均值和标准误差。weights - 拟合模型时使用的权重(默认情况下,每个观测值为 "1",即权重相等)。trees. fitted - 阶段性拟合过程中每一步所拟合的树的数量记录;training.loss.values - 训练数据上偏差的阶段性变化 ,cv.values - 阶段性过程中每一步所计算的预测偏差的CV估计值的平均值。
你可以用摘要函数查看变量的重要性

> summary(lr )

选择设置

以上是对设置的初步猜测,使用了Elith等人(2008)中讨论的经验法则。它做出的模型只有650棵树,所以我们的下一步将是减少lr。例如,尝试lr = 0.005,争取超过1000棵树。

step(data=train,  x = 3:13,  tree.co  = 5,
+ lr = 0.005

为了探索其他设置是否表现更好,你可以将数据分成训练集和测试集,或者使用交叉验证结果,改变tc、lr和bagging,然后比较结果。

简化模型

简化会建立了许多模型,所以它可能很慢。在其中,我们评估了简化lr为0.005的模型的价值,但只测试剔除最多5个变量("n.drop "参数;默认是自动规则一直持续到预测偏差的平均变化超过gbm.step中计算的原始标准误差)。

对于我们的运行,估计要剔除的最佳变量数是1;可以使用红色垂直线指示的数字。现在,建立一个剔除1个预测变量的模型,使用[[1]]表示我们要剔除一个变量。

step(  x= pred.list\[\[1\]\], )

现在这已经形成了一个新的模型,但是考虑到我们并不特别想要一个更简单的模型(因为在这种规模的数据集中,包含的变量贡献很小是可以接受的),我们不会继续使用它。

绘制模型的函数和拟合值

由我们的函数创建的BRT模型的拟合函数可以用plot来绘制。

>  plot( lr005 )

这个函数的附加参数允许对图进行平滑表示。根据环境空间内观测值的分布,拟合函数可以给出与每个预测因子有关的拟合值分布。

 fits( lr005)

每张图上方的数值表示与每个非因素预测因子有关的拟合值的加权平均值。

绘制交互作用

该代码评估数据中成对的交互作用的程度。

 inter( lr005)

返回一个列表。前两个部分是对结果的总结,首先是5个最重要的交互作用的排名列表,其次是所有交互作用的表格。

f$intera

你可以像这样绘制交互作用。

persp( lr005,  z.range=c(0,0.6)

对新数据进行预测

如果您想对一组地点进行预测(而不是对整个地图进行预测),一般的程序是建立一个数据框架,行代表地点,列代表您模型中的变量。我们用于预测站点的数据集在一个名为test的文件中。"列需要转换为一个因子变量,其水平与建模数据中的水平一致。使用predict对BRT模型中的站点进行预测,预测结果在一个名为preds的向量中。

preds <- predict(lr005,test,
deviance(obs=test, pred=preds)

> d <- cbind(obs, preds)
> e <- evaluate(p=pres, a=abs)

gbm中预测的一个有用的特点是可以预测不同数量的树。

tree<- seq(100, 5000, by=100)
predict( n.trees=tree, "response")

上面的代码会形成一个矩阵,每一列都是模型对tree.list中该元素所指定的树数量的预测,例如,第5列的预测是针对tree.list[5]=500棵树。现在来计算所有这些结果的偏差,然后绘制。

> for (i in 1:50) {calc.devi(obs,
+ pred\[,i\])
+ }
> plot(tree.list,deviance

空间预测

这里我们展示了如何对整张地图进行预测。

> plot(grids)

我们用一个常量值("因子 "类)创建一个data.frame,并将其传递给预测函数。

> p <- predict(grids, lr005,
> plot(p)


本文摘选R语言生态学建模:增强回归树(BRT)预测短鳍鳗生存分布和影响因素,点击“阅读原文”获取全文完整资料。


点击标题查阅往期内容

Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户

R语言逻辑回归(Logistic Regression)、回归决策树、随机森林信用卡违约分析信贷数据集

R语言基于Bagging分类的逻辑回归(Logistic Regression)、决策树、森林分析心脏病患者

R语言样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化

R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化

matlab使用分位数随机森林(QRF)回归树检测异常值

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测

R语言中使用线性模型、回归决策树自动组合特征因子水平

R语言中自编基尼系数的CART回归决策树的实现

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析

R语言基于树的方法:决策树,随机森林,Bagging,增强树

R语言实现偏最小二乘回归法 partial least squares (PLS)回归

R语言多项式回归拟合非线性关系

R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险

R语言用局部加权回归(Lowess)对logistic逻辑回归诊断和残差分析

R语言混合效应逻辑回归(mixed effects logistic)模型分析肺癌数据

【视频】Boosting集成学习原理与R语言提升回归树BRT预测短鳍鳗分布生态学实例相关推荐

  1. R语言逻辑回归Logistic回归分析预测股票涨跌

    最近我们被客户要求撰写关于逻辑回归的研究报告,包括一些图形和统计输出. 视频:R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险 逻辑回归Logistic模型原理和R语言分类预测冠心病风 ...

  2. 【视频】极值理论EVT与R语言应用:GPD模型火灾损失分布分析

    最近我们被客户要求撰写关于极值理论的研究报告,包括一些图形和统计输出.正态分布属于统计学里的知识,对于我们科研来说在数据处理时常常用到所以需要学习相关的知识. 正态分布在自然界中是一种最常见的分布.例 ...

  3. R语言分位数回归Quantile Regression分析租房价格

    全文链接:http://tecdat.cn/?p=18422 本文想在R软件中更好地了解分位数回归优化.在查看分位数回归之前,让我们从样本中计算中位数或分位数(点击文末"阅读原文" ...

  4. 【视频】马尔可夫链蒙特卡罗方法MCMC原理与R语言实现|数据分享

    原文链接:http://tecdat.cn/?p=2687 在贝叶斯方法中,马尔可夫链蒙特卡罗方法尤其神秘(点击文末"阅读原文"获取完整代码数据). 它们肯定是数学繁重且计算量大的 ...

  5. 集成学习-Boosting集成学习算法GBDT

    GBDT算法的核心为:先构造一个(决策)树,然后不断在已有模型和实际样本输出的残差上再构造一颗树,依次迭代. 目录 Decistion Tree(决策树) Gradient Boosting(梯度提升 ...

  6. 集成学习原理小结(转载)

    集成学习(ensemble learning)可以说是现在非常火爆的机器学习方法了.它本身不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务.也就是我们常说的"博采众 ...

  7. 《统计学习导论》R语言代码整理

    <统计学习导论>R语言代码整理 一.特殊函数 二.基本函数 三.画图 一些函数 一些参数 type pch (plotting character) lty(line types) 特定问 ...

  8. 判别分析原理及R语言实现

    判别分析内容 判别分析做的好能挖掘数据最大的价值.判别分析(discriminat analysis)他要解决的问题是在一些已知研究对象已经用某种方法分成若干类的情况下,确定新的样品属于已知类别中的哪 ...

  9. ++代码实现 感知机的原理_决策树ID3原理及R语言python代码实现(西瓜书)

    决策树ID3原理及R语言python代码实现(西瓜书) 摘要: 决策树是机器学习中一种非常常见的分类与回归方法,可以认为是if-else结构的规则.分类决策树是由节点和有向边组成的树形结构,节点表示特 ...

  10. R语言︱H2o深度学习的一些R语言实践——H2o包

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言H2o包的几个应用案例 笔者寄语:受启发 ...

最新文章

  1. html中autocomplete无效,OnChange和AutoComplete都不能使用HTML.TextBox
  2. spring + angular 实现导出excel
  3. lnmp的编译安装mysql_LNMP环境搭建(二) 编译安装MySQL
  4. 协同过滤—基于图的方法
  5. SAP专家培训之Netweaver ABAP内存管理和内存调优实践
  6. WPF多线程UI更新——两种方法
  7. 好玩的脚本代码大全_Github | 推荐一个Python脚本集合项目
  8. Linux安全驱动模块,【漏洞预警】CVE-2017-2636:linux 内核n_hdlc驱动模块 本地提权漏洞...
  9. 最大数max(x,y,z)(信息学奥赛一本通-T1152)
  10. Matlab自定义函数的五种方法
  11. VS2010 VS2012版最常用的快捷键
  12. mysql 5.7 my default_Windows64位mysql5.7以上版本包解压中没有data目录和my-default.ini及服务无法启动的快速解决办法(问题小结)...
  13. AudioBuffer
  14. Halcon Blob分析(二值化图像分割)
  15. pandas 作图 统计_Pandas数据可视化工具——Seaborn用法整理(下)
  16. 红帽linux网络yum源,RedHat系统使用yum网络源
  17. Tracking Attackers: Honeypot, Part 1 (Honeyd)
  18. 高中计算机会考基本知识点,高中计算机会考基本知识点
  19. 【MODBUS】组态王通过串口与MODBUS RTU设备通讯
  20. 2018TLC大会精彩回顾

热门文章

  1. UNIX-LINUX编程实践教程-第五章-实例代码注解-echostate.c
  2. apache+fastcgi+php
  3. 新人如何适应自己的领导
  4. 【损失函数】Focal Loss for Dense Object Detection And RetinaNet
  5. NESTEROV ACCELERATED GRADIENT AND SCALE INVARIANCE FOR ADVERSARIAL ATTACKS论文解读
  6. java collection自定义comparator进行排序
  7. 【CITE】C#默认以管理员身份运行程序实现代码
  8. Ubuntu 12.04 root默认密码? 如何使用root登录?
  9. ARM——操作系统—最小操作系统-开发板测试
  10. Java集合之map 集合使用