如何用R语言在机器学习中建立集成模型?

news2024/11/25 20:43:58

介绍

在本文中,我将向您介绍集成建模的基础知识。 另外,为了向您提供有关集成建模的实践经验,我们将使用R进行集成。最近我们被客户要求撰写关于集成模型的研究报告,包括一些图形和统计输出。

1.什么是集成?

通常,集成是一种组合两种或多种类似或不同类型算法的技术,称为基础学习模型。这样做是为了建立一个更加健壮的系统,其中包含了所有基础学习模型的预测。可以理解为多个交易者的会议室会议,以决定股票的价格是否会上涨。

由于他们都对股票市场有不同的理解。因此,他们应该根据自己对市场的理解对股票价格做出各种预测。

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

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

,时长10:25

2.集合的类型

在进一步详细介绍之前,一些基本概念是:

  • 平均:它被定义为 在回归问题的情况下或在预测分类问题的概率时从模型中获取预测的平均值。 
  • 多数投票:它被 定义为 在预测分类问题的结果的同时,从多个模型预测中以最大投票/推荐进行预测。 
  • 加权平均值:在此,不同的权重应用于来自多个模型的预测,然后取平均值 。 

一些主要使用的技术:

  1. Bagging: Bagging也称为bootstrap聚合。 

  

增强的一些例子是XGBoost,GBM,ADABOOST等。

  1. 堆叠:在堆叠多层机器时,学习模型彼此叠加,每个模型将其预测传递给上面层中的模型,顶层模型根据模型下面的模型输出做出决策。

3.集合的优点和缺点

3.1优点

  • 集成是一种经过验证的方法,可以提高模型的准确性,适用于大多数情况。
  •  集成使模型更加稳健和稳定,从而确保在大多数情况下测试用例具有良好的性能。
  • 您可以使用集成来发现数据中的线性和非线性复杂关系。可以通过使用两个不同的模型形成两个集合来完成。

3.2缺点

  • 集成减少了模型的可解释性,并且很难在最后得到关键的业务见解。
  • 非常耗时,因此不是实时应用程序的最佳选择。

4.在R中实施集合的实用指南

 
#让我们看一下数据集数据的结构
 'data.frame':614 obs。13个变量:
  
$ ApplicantIncome:int 5849 4583 3000 2583 6000 5417 2333 3036 4006 12841 ...
$ CoapplicantIncome:num 0 1508 0 2358 0 ...
$ LoanAmount:int NA 128 66 120 141 267 95 158 168 349 ...
$ Loan_Amount_Term:int 360 360 360 360 360 360 360 360 360 360 ...
$ Credit_History:int 1 1 1 1 1 1 1 0 1 1 ...
 

#使用中位数填充缺失值
preProcValues < -  preProcess(data,method = c(“medianImpute”,“center”,“scale”))
 
#Spliting训练根据结果分为两部分:75%和25%
index < -  createDataPartition(data_processed $ Loan_Status,p = 0.75,list = FALSE)
trainSet < -  data_processed [index,]
testSet < -  data_processed [-index,]

我将数据分成两部分,我将用它来模拟训练和测试操作。我们现在定义训练以及预测变量和结果变量:

#定义多个模型的训练参数
fitControl < -  trainControl(
  method =“cv”, savePredictions ='final',
classProbs = T)

我们开始训练随机​​森林并在我们创建的测试集上测试其准确性:

 
#检查随机森林模型的准确性 
Confusion matrix and statistics
reference
Forecast N Y.
N 28 20
Y 9 96
Accuracy: 0.8105
95% CI: (0.7393,0.8692)
No information rate: 0.7582
P value[Acc> NIR]: 0.07566
Kappa: 0.5306
Mcnemar's test P value: 0.06332
Sensitivity: 0.7568
Specificity: 0.8276
Pos Pred value: 0.5833
Neg Pred value: 0.9143
Prevalence rate: 0.2418
Detection rate: 0.1830
Detection prevalence rate: 0.3137
Balance accuracy: 0.7922

 我们使用随机森林模型获得了0.81的准确度。看看KNN的表现:

#训练knn模型 
#使用knn模型预测
testSet $ pred_knn <-predict(object = model_knn,testSet [,predictors])

#检查随机森林模型的准确性 
reference
Forecast N Y.
N 29 19
Yes 2 103
Accuracy: 0.8627
95% CI: (0.7979, 0.913)
No information rate: 0.7974
P value[Acc> NIR]: 0.0241694
Kappa: 0.6473
Mcnemar's test P value: 0.0004803
Sensitivity: 0.9355
Specificity: 0.8443
Pos Pred value: 0.6042
Neg Pred value: 0.9810
Prevalence rate: 0.2026
Detection rate: 0.1895
Detection prevalence rate: 0.3137
Balance accuracy: 0.8899

 我们能够通过单独的KNN模型获得0.86的准确度。Logistic回归的表现:

#训练Logistic回归模型 
#预测使用knn模型
testSet $ pred_lr <-predict(object = model_lr,testSet [,predictors])

#检查随机森林模型的准确性 
Confusion matrix and statistics
reference
Forecast N Y.
N 29 19
Yes 2 103
Accuracy: 0.8627
95% CI: (0.7979, 0.913)
No information rate: 0.7974
P value[Acc> NIR]: 0.0241694
Kappa: 0.6473
Mcnemar's test P value: 0.0004803
Sensitivity: 0.9355
Specificity: 0.8443
Pos Pred value: 0.6042
Neg Pred value: 0.9810
Prevalence rate: 0.2026
Detection rate: 0.1895
Detection prevalence rate: 0.3137
Balance accuracy: 0.8899

逻辑回归也给出了0.86的准确度。

现在,让我们尝试用这些模型形成集合的不同方法,如我们所讨论的:

平均

我们将平均三个模型的预测。由于预测是“Y”或“N”,因此平均值对于此二进制分类没有多大意义。但是,我们可以对观察概率的平均值进行平均处理。

#预测概率
testSet $ pred_rf_​​prob <-predict(object = model_rf,testSet [,predictors],type ='prob')
testSet $ pred_knn_prob <-predict(object = model_knn,testSet [,predictors],type ='prob')
testSet $ pred_lr_prob <-predict(object = model_lr,testSet [,predictors],type ='prob')
 

多数表决:在多数表决中,我们将为大多数模型预测的观察指定预测。

多数投票加权平均值

我们可以采用加权平均值,而不是采用简单平均值。通常,对于更准确的模型,预测的权重很高。让我们将0.5分配给logistic回归,将0.25分配给KNN和随机森林。 

之前我们在顶层使用了简单的公式。相反,我们可以使用另一种机器学习模型,这就是堆叠。我们可以使用线性回归来建立线性公式,用于在回归问题中进行预测,以便在分类问题的情况下将底层模型预测映射到结果或逻辑回归。

在同一个例子中,让我们尝试将逻辑回归和GBM设置为顶层模型。请记住,我们将采取以下步骤:

  1. 在训练数据上训练各个基础层模型。
  2. 预测使用每个基础层模型来训练数据和测试数据。
  3. 现在,再次对顶层模型进行训练,对底层模型进行训练数据的预测。
  4. 最后,使用顶层模型预测底层模型的预测。

  • 步骤1:在训练数据上训练各个基础层模型

#定义参数
fitControl < -  trainControl(
method =“cv”, savePredictions ='final',#保存最佳参数组合的预测
classProbs = T#保存预测的类概率
)


#训练随机森林模型
#训练knn模型 
#训练逻辑回归模型  
  • 步骤2:使用每个基础层模型预测训练数据和测试数据

#预测训练数据的概率 
#预测测试数据的概率
  • 步骤3:现在再次训练顶层模型对底层模型的预测,对训练数据进行预测

首先,让我们从GBM模型开始作为顶层模型。

 

#顶层模型用于预测的变量
predictors_top <-c( 'OOF_pred_rf', 'OOF_pred_knn', 'OOF_pred_lr') 

#GBM作为顶层模型 

同样,我们也可以使用逻辑回归创建一个集合作为顶层模型。

 

#Logistic回归作为顶层模型
model_glm < - 
 ( [,predictors_top],  trControl = fitControl,tuneLength = 3)

  • 步骤4:最后,使用顶层模型预测

#使用GBM顶层模型预测
测试集$ gbm_stacked <-predict(model_gbm,测试集[,predictors_top])

#使用logictic回归顶层模型预测
测试集$ glm_stacked <-predict(model_glm,测试集[,predictors_top])

选择模型非常重要,然后才能从整体中获得最佳效果。

 还有问题?联系我们!


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简单描述标准生成树协议STP

简单描述标准生成树协议STP 生成树协议STP 为什么需要生成树 如上图所示网络拓扑&#xff0c;如果没有生成树协议&#xff0c;在网络通信开始时&#xff0c;假设PC0向PC1发送一个数据包&#xff0c;交换机S2的MAC地址表中并没有对应的MAC地址&#xff0c;因此会产生ARP洪泛&a…

常见的项目管理问题有哪些?

在项目执行过程中&#xff0c;相信大家总会遇到一些项目管理常见问题以及各种意想不到的管理问题。如果想让你的项目取得最终成功&#xff0c;项经理便需要有一个计划来快速有效地应对任何出现的问题&#xff0c;否则它们会影响项目的成果。那么常见的项目管理问题有哪些呢&…

PolarDB-X 的 in 常量查询

场景 实际场景中经常需要根据一些常量指标做IN查询&#xff0c;并且IN值往往是分区键。例如在电商场景中&#xff0c;有两张表&#xff0c;买家表与订单表。订单的具体信息会记录到订单表中&#xff0c;该表按照订单ID进行哈希拆分&#xff1b;买家表则会保存买家ID及其关联的…

Flowable 中的网关、流程变量以及历史流程

今天这篇文章&#xff0c;松哥和大家梳理一下 Flowable 中的网关、流程变量以及历史流程的玩法。 1. 三大网关 Flowable 中网关类型其实也不少&#xff0c;常见的主要有三种类型&#xff0c;分别是&#xff1a; 排他网关并行网关包容网关 这三个里边最常用的当然就是排他网关…

苦等官方阿里云盘TV版久矣,终于期待一款TV版。

苦等官方阿里云盘TV版久矣&#xff0c;终于期待一款TV版。 一、获取链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/19Z-2Lb4-lOSU14M83rivVA 提取码&#xff1a;o2z0 二、产品&#xff1a; 1、文件列表&#xff1a;确定键打开文件或文件夹&#xff0c;菜单键进…

华为19级专家10年心血终成百页负载均衡高并发网关设计实战文档

负载均衡&#xff08;LoadBalance&#xff09;的字面意思是将工作负载分担到多个工作单元上进行执行&#xff0c;它建立在现有网络结构之上&#xff0c;是构建分布式服务、大型网络应用的关键组件。 近十几年来&#xff0c;负载均衡技术层出不穷&#xff0c;令人眼花缭乱。如果…

[思考进阶]01 如何克服自己的无知?

除了要提升自己的技术能力&#xff0c;思维的学习和成长也非常非常重要&#xff0c;特推出此[思考进阶]系列&#xff0c;进行刻意练习&#xff0c;从而提升自己的认知。 有段时间我特别喜欢研究一些定律和法则&#xff0c;比如&#xff1a;熵增定律、懒蚂蚁效应、蝴蝶效应、吸引…

Java搭建宝塔部署实战毕设项目物品分类springboot管理系统源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套Java开发的物品分类springboot管理系统源码&#xff0c;适合准备做毕业设计的同学&#xff0c;可以下载搭建起来&#xff0c;在这基础上加一些功能&#xff0c;改改UI&#xff0c;随便写篇答题…

解决办法‘npm‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

今天使用了nvm这个node的保姆级版本管理工具,的确很香。 首先打开官网nvm.uihtm.com/ 下载安装过程很顺利&#xff0c;但是验证node及npm是否安装成功时&#xff0c;出现下面错误提示。 C:\Users\Administrator>npm -v npm 不是内部或外部命令&#xff0c;也不是可运行的…

里奥哈大使撰文 | 来一场云旅行吧,盘点里奥哈那些美轮美奂的酒庄~

俗话说得好&#xff0c;“里奥哈美酒夜光杯&#xff0c;欲买机票马上飞”&#xff08;说得太好了&#xff0c;反正也去不了下次别说了&#xff09;既然疫情当下&#xff0c;无法来一场说走就走的旅行&#xff0c;那我们就来云游一下里奥哈这个美轮美奂的酒庄吧&#xff01; 说起…

2023年浙大MEM英语二作文干货模版:临阵磨枪可用

这些年来&#xff0c;通过杭州达立易考教育对英语二小作文的总结发现&#xff0c;书信形式成为主要考察的内容&#xff0c;而随着形式的变化和难度的提升&#xff0c;复合型题材逐渐成为侧重点&#xff0c;比如道歉信加建议信、感谢信加建议信等。我们不建议原班照背模版&#…

汇编语言快速回顾(以x86_64为例)

GAS (GNU Assembler) 是一款基于 Linux 的汇编器&#xff0c;主要供 GNU 项目使用&#xff0c;用于对 Linux 内核及其他软件进行进行汇编。 MASM (Microsoft Macro Assembler) 是微软操作系统的专属汇编器&#xff0c;于 1981 年随 Visual Studio 一起发布。 大学本科教育中有两…

小学生python游戏编程arcade----精灵调用图片的两种类

小学生python游戏编程arcade----精灵调用图片的两种类前言精灵调用图片的两种类1、第一种类的定义1.1 以文件名及缩放比例做初始参数1.2 利用变换图片的颜色更换角色的使用1.3 代码分析转换文件来不及调用&#xff0c;时间问题&#xff1f;&#xff1f;&#xff1f;&#xff1f…

【数据结构初阶】链式二叉树接口实现+痛苦的OJ题

递归心决&#xff1a;(xdm好好感悟) 1.确定递归的结束条件 2.确定递归的单层逻辑 3.确定递归的参数和返回值 文章目录一、链式二叉树接口1.二叉树的结构体2.手动造一棵二叉树3.二叉树前、中、后序遍历(递归的神圣大门开启)4.二叉树的结点个数5.二叉树的叶子结点个数6.二叉树的…

【毕业设计】深度学习动物识别系统 - 图像识别 python OpenCV

文章目录0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络4 inception_v3网络5 最后0 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&a…

Web前端大作业、基于HTML+CSS+JavaScript响应式个人相册博客网站

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

【DL with Pytorch】第 1 章 :深度学习与PyTorch简介

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

1.每天进步一点点------爬虫应用场景

14天学习训练营导师课程&#xff1a; 杨鑫《Python 自学编程基础》 杨鑫《 Python 网络爬虫基础》 杨鑫《 Scrapy 爬虫框架实战和项目管理》 杨老师推荐自学Python的网站 w3schools 传送门 geeksforgeeks 传送门 realpython 传送门 学习之前读一读 来看看爬虫合不合法 传送…

安洵杯 2022 复现

babyphp 知识点&#xff1a;原生类的利用&#xff0c;session 反序列化<?php //something in flag.phpclass A {public $a;public $b;public function __wakeup(){$this->a "babyhacker";}public function __invoke(){if (isset($this->a) && $t…

[附源码]SSM计算机毕业设计文章管理系统查重PPTJAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…