拓端tecdat|如何用R语言在机器学习中建立集成模型?
原文链接:http://tecdat.cn/?p=6608
原文出处:拓端数据部落公众号
介绍
在本文中,我将向您介绍集成建模的基础知识。 另外,为了向您提供有关集成建模的实践经验,我们将使用R进行集成。
1.什么是集成?
通常,集成是一种组合两种或多种类似或不同类型算法的技术,称为基础学习模型。这样做是为了建立一个更加健壮的系统,其中包含了所有基础学习模型的预测。可以理解为多个交易者的会议室会议,以决定股票的价格是否会上涨。
由于他们都对股票市场有不同的理解。因此,他们应该根据自己对市场的理解对股票价格做出各种预测。
相关视频:Boosting集成学习原理与R语言提升回归树BRT预测短鳍鳗分布生态学实例
Boosting集成学习原理与R语言提升回归树BRT预测短鳍鳗分布生态学实例
,时长10:25
2.集合的类型
在进一步详细介绍之前,一些基本概念是:
- 平均:它被定义为 在回归问题的情况下或在预测分类问题的概率时从模型中获取预测的平均值。
- 多数投票:它被 定义为 在预测分类问题的结果的同时,从多个模型预测中以最大投票/推荐进行预测。
- 加权平均值:在此,不同的权重应用于来自多个模型的预测,然后取平均值 。
一些主要使用的技术:
- Bagging: Bagging也称为bootstrap聚合。
增强的一些例子是XGBoost,GBM,ADABOOST等。
- 堆叠:在堆叠多层机器时,学习模型彼此叠加,每个模型将其预测传递给上面层中的模型,顶层模型根据模型下面的模型输出做出决策。
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:在训练数据上训练各个基础层模型
#定义参数
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])
选择模型非常重要,然后才能从整体中获得最佳效果。
还有问题?联系我们!
最受欢迎的见解
1.从决策树模型看员工为什么离职
2.R语言基于树的方法:决策树,随机森林
3.python中使用scikit-learn和pandas决策树
4.机器学习:在SAS中运行随机森林数据分析报告
5.R语言用随机森林和文本挖掘提高航空公司客户满意度
6.机器学习助推快时尚精准销售时间序列
7.用机器学习识别不断变化的股市状况——隐马尔可夫模型的应用
8.python机器学习:推荐系统实现(以矩阵分解来协同过滤)
9.python中用pytorch机器学习分类预测银行客户流失
拓端tecdat|如何用R语言在机器学习中建立集成模型?相关推荐
- 如何用R语言在机器学习中建立集成模型?
来源:拓端数据部落 本文约2400字,建议阅读5分钟 本文向您介绍集成建模的基础知识.另外,为了向您提供有关集合建模的实践经验,我们将使用R对hackathon问题进行集成. 1.什么是集成? 通常, ...
- 拓端tecdat荣获掘金社区入驻新人奖
2021年7月,由掘金发起了"入驻成长礼"颁奖活动.本次活动邀请到知名开发者.服务机构代表等业界人士. 据了解,掘金社区"新入驻创作者礼"主要对已经积累了一定历 ...
- R-GIS: 如何用R语言实现GIS地理空间分析及模型预测
前言:随着地理信息系统(GIS)和大尺度研究的发展,空间数据的管理.统计与制图变得越来越重要.R语言在数据分析.挖掘和可视化中发挥着重要的作用,其中在空间分析方面扮演着重要角色,与空间相关的包的数量也 ...
- 如何用 R 语言进行元分析?(Part1)
文章来源于微信公众号(茗创科技),欢迎有兴趣的朋友搜索关注. 元分析在许多研究学科领域的循证证据中发挥着关键作用,如医学.社会科学和经济学等等.之前我们讲过用 CMA 软件进行元分析,今天主要介绍如何 ...
- 拓端tecdat荣获2022年度51CTO博主之星
相信技术,传递价值,这是51CTO每一个技术创作者的动力与信念,2022 年度,拓端tecdat 作为新锐的数据分析咨询公司,在51CTO平台上,不断的输出优质的技术文章,分享前沿创新技术,输出最佳生 ...
- 使用R语言筛选数据中的重复行
在进行数据的预处理时,我们常常关注有无重复数据,如果两行数据完全一致,则可能存在数据的重复录入等情况,此时就要对这两行数据进行核实.但这个过程如何用R语言实现?笔者近期对这个问题进行了探索. 我们首先 ...
- R语言使用rpart包构建决策树模型、使用prune函数进行树的剪枝、交叉验证预防过拟合、plotcp可视化复杂度、rpart.plot包可视化决策树、使用table函数计算混淆矩阵评估分类模型性能
R语言使用rpart包构建决策树模型.使用prune函数进行树的剪枝.使用10折交叉验证选择预测误差最低的树来预防过拟合.plotcp可视化决策树复杂度.rpart.plot包可视化最终决策树.使用t ...
- R语言使用caret包构建gbdt模型(随机梯度提升树、Stochastic Gradient Boosting )构建回归模型、通过method参数指定算法名称
R语言使用caret包构建gbdt模型(随机梯度提升树.Stochastic Gradient Boosting )构建回归模型.通过method参数指定算法名称 目录
- R语言可视化图像中最常用的点样式(pch、plot characters)列表、ggpubr::show_point_shapes可视化最常用的点样式(pch)
R语言可视化图像中最常用的点样式(pch.plot characters)列表.ggpubr::show_point_shapes可视化最常用的点样式(pch) 目录
- R语言e1071包中的支持向量机:构建nu-classification类型的支持向量机SVM并分析不同nu值惩罚下模型分类螺旋线型(sprials)线性不可分数据集的表现
R语言e1071包中的支持向量机:构建nu-classification类型的支持向量机SVM并分析不同nu值惩罚下模型分类螺旋线型(sprials)线性不可分数据集的表现 目录
最新文章
- oracle解密des乱码,Oracle中des等算法的加解密
- 皮一皮:怎么才能让员工有干劲...
- Android中实现Bitmap在自定义View中的放大与拖动
- cocos2d-x 2.x版本使用uiwidget需要注意的几点
- Appcan跨域交互
- Friendly Group Gym - 102769F 2020(并查集)ccpc秦皇岛分站赛
- delphi 关闭时缩小到托盘_如何正确地缩小毛孔?
- [Python] itertools.islice(iterable, start, stop[, step]) 创建迭代器并返回所选元素
- java经纬度转地址_经纬度转地址示例代码
- http://www.guokr.com/blog/475765/
- java生成二维码工具
- CSS - 选择器优先级介绍
- 什么是Promise?Promise有什么好处
- [自娱自乐]玫瑰骑士结束了
- v4手游服务器维护,v4手游每日必做事项分享
- sap采购定价过程配置
- uniapp App端 echarts 设置tooltip的formatter不生效问题及解决办法
- windows系统切换用户(通过cmd切换用户)
- 智能流程机器人助你“聚划算”
- C#,图像二值化(13)——全局阈值的双峰平均值算法(Bimodal Thresholding)与源程序