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

news/2024/4/24 22:22:23/文章来源:https://blog.csdn.net/tecdat/article/details/128083923

介绍

在本文中,我将向您介绍集成建模的基础知识。 另外,为了向您提供有关集成建模的实践经验,我们将使用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.luyixian.cn/news_show_38467.aspx

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

相关文章

初始数据结构

目录 1. 集合的框架 集合框架的重要性 数据结构的介绍 算法的介绍 容器背后对应的数据结构 2. 时间复杂度和空间复杂度 算法效率 时间复杂度 时间复杂度的概念 大O的渐进表示法 常见的时间复杂度的计算 空间复杂度 空间复杂度的概念 从本章开始又要开始新的篇章&a…

【Python实战】“特种兵”们的专属游戏助手,助你吃鸡:极品小助手也是棒呆了~(“大吉大利,今W吃鸡”)

前言 有温度 有深度 有广度 就等你来关注哦~ 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即可免费。 “注意左边&#xff0c;左边有人&#xff0c;打他&#xff01;” “快上车&#xff01;&#xff0…

idea搭建ssm项目全过程详解:

1&#xff0c;创建maven项目&#xff1a; 然后&#xff0c;点击next 其次 2&#xff0c;在pom.xml导入相关依赖&#xff1a;&#xff08;如果idea没有集成maven需要先集成maven&#xff09; <dependencies><dependency><groupId>org.springframework</gr…

[附源码]计算机毕业设计JAVA同城搬家平台

[附源码]计算机毕业设计JAVA同城搬家平台 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis M…

流利地回答出面试官提出的八股问题,面试官却突然说“背得不错”,该怎么回答?...

面试前背题是大家心照不宣的做法&#xff0c;一般面试官也不会揭穿&#xff0c;但如果遇到一位犀利的面试官&#xff0c;那该怎么办呢&#xff1f;一位网友就遇到了这样的窘境&#xff1a;面试的时候&#xff0c;十分流利地回答出面试官提出的概念原理方面的问题&#xff0c;面…

[附源码]Python计算机毕业设计SSM基于Java的音乐网站(程序+LW)

环境配置&#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模式 Maven管理等…

拼多多季报图解:营收355亿同比增65% 研发投入达27亿

雷递网 雷建平 11月28日拼多多今日发布2022年第三季度业绩报告。财报显示&#xff0c;拼多多2022年第三季度营收为355亿元&#xff0c;同比增长65.1%。受到一些项目投入延缓等偶发因素影响&#xff0c;三季度平台运营费用为176.5亿元&#xff0c;占收入的比例从上年同期的59.6&…

IBM MQ MQCSP

一&#xff0c;概念 1.1 用途 用途&#xff1a;MQCSP 结构使授权服务能够验证用户 ID 和密码。您在 MQCONNX 调用上指定 MQCSP 连接安全参数结构。 警告&#xff1a;在某些情况下&#xff0c;客户端应用程序的 MQCSP 结构中的密码将以纯文本形式通过网络发送。要确保客户端应…

[MyBatis]一级缓存/二级缓存/三方缓存

缓存是一种临时存储少量数据至内存或者是磁盘的一种技术.减少数据的加载次数,可以降低工作量,提高程序响应速度 缓存的重要性是不言而喻的。mybatis的缓存将相同查询条件的SQL语句执行一遍后所得到的结果存在内存或者某种缓存介质当中&#xff0c;当下次遇到一模一样的查询SQL时…

【测试沉思录】18.如何测试微信小程序?

作者&#xff1a;雷远缘 编辑&#xff1a;毕小烦 一. 先知道小程序是什么 啥是小程序&#xff1f; “小程序是一种不需要下载安装即可使用的应用&#xff0c;它实现了应用 “触手可及” 的梦想&#xff0c;用户扫一扫或者搜一下即可打开应用。也体现了 “用完即走” 的理念&am…

Nodejs -- Express的安装和定义get、post方法

文章目录Express的基本使用1 安装2 基本使用3 监听GET请求4 监听POST请求5 把内容响应给客户端6 获取URL中携带的查询参数7 获取URL中的动态参数Express的基本使用 1 安装 在项目所处的目录中&#xff0c;运行如下的终端命令&#xff0c;即可将express安装到项目中使用&#…

SPARK数据分析

有了 DataFrame 之后&#xff0c;我们该如何在 DataFrame 之上做数据探索、数据分析&#xff0c;以及各式各样的数据转换呢&#xff1f;在数据处理完毕之后&#xff0c;我们又该如何做数据展示与数据持久化呢&#xff1f;今天这一讲&#xff0c;我们就来解答这些疑问。 为了给开…

【一文秒懂——Profile配置】

目录 1. Profile配置 2. 实例 1. Profile配置 Spring框架允许使用Profile配置&#xff0c;即某些“个性化配置文件”&#xff0c;这些配置文件默认并不会被应用&#xff0c;需要“激活”后才生效&#xff01; 在Spring Boot项目中&#xff0c;简化了Profile配置的使用&…

怎么从零开始搭建配置Windows云服务器的新手入门教程

本文是搭建 Windows 云服务器入门教程&#xff0c;主要介绍如何从零开始&#xff0c;以最简单的方式搭建和配置你的Windows 云服务器。如果您之前没有搭建云服务器的经验&#xff0c;建议您按照本文介绍的方式来购买和配置您的第一台云服务器。 1、步骤1&#xff1a;注册腾讯云…

SpringBoot中自动配置

第一种&#xff1a; 给容器中的组件加上 ConfigurationProperties注解即可 测试&#xff1a; Component ConfigurationProperties(prefix "mycar") public class Car {private String brand;private Integer price;private Integer seatNum;public Integer getSeat…

流媒体传输 - RTMP 协议报文分析

握手之后&#xff0c;连接开始对一个或多个 chunk stream 进行合并。创建的每个块都有一个唯一 id 对其进行关联&#xff0c;这个 id 叫做 chunk stream id。这些块通过网络进行传输。传递时&#xff0c;每个块必须被完全发送才可以发送下一块。在接收端&#xff0c;这些块被根…

Python使用矩阵分解法推荐系统找到类似的音乐

这篇文章是如何使用几种不同的矩阵分解算法计算相关艺术家。最近我们被客户要求撰写关于的矩阵分解法推荐系统研究报告&#xff0c;包括一些图形和统计输出。代码用Python编写&#xff0c;以交互方式可视化结果。 加载数据 这可以使用Pandas加载到稀疏矩阵中&#xff1a; # r…

一文搞懂漏洞严重程度分析

漏洞的级别定义主要从两个维度进行判断&#xff1b; 1、可利用性 2、影响性 可利用性指标 可利用性指标组刻画脆弱性组件&#xff08;即包含漏洞的事物&#xff09;的特征&#xff0c;反映漏洞利用的难易程度和技术要求等。可利用性指标组包含四个指标&#xff0c;分别是攻击…

宝塔+LNMP平台=HTTP文件共享服务

前言 服务器有几十个G都没利用&#xff0c;太浪费了&#xff0c;本着共产主义万岁的思想&#xff0c;准备搭建一个超级简单的基于宝塔上的HTTP文件共享服务器。 搭建 我的宝塔是基于LNMP平台搭建的网站。 进入宝塔管理 新建一个站点&#xff08;纯静态&#xff0c;无数据库…

最基础的协同过滤介绍

文章目录1.到底什么是协同过滤2.协同过滤的一般步骤3.基于用户的CF (User-CF)3.1 基本介绍3.2 用户相似度3.2.1 用户相似度基本介绍3.2.2 用户相似度改进&#xff1a;ICU3.3 User-CF的缺点4.基于项目的CF (Item-CF)4.1 基本介绍4.2 用户相似度4.2.1 用户相似度基本介绍4.2.2 用…