来源:拓端数据部落

本文约2400字,建议阅读5分钟

本文向您介绍集成建模的基础知识。另外,为了向您提供有关集合建模的实践经验,我们将使用R对hackathon问题进行集成。

1.什么是集成?

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

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

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])

注意, 选择模型非常重要,以便从整体中获得最佳效果。

原文链接:

http://tecdat.cn/?p=6608

编辑:王菁

校对:林亦霖

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

  1. r语言在java中的实现_R语言在现实中的应用

    R语言在现实中的应用有哪些?主要有以下几种 - 1.数据科学 "哈佛商业评论"将数据科学家命名为"21世纪最性感的工作". Glassdoor将其命名为2016 ...

  2. 使用R语言进行机器学习的原因

    两种最常用的数据科学语言R和Python之间存在着某种竞争. 刚接触机器学习的人都会选择其中一种语言来学习.人们的决定通常以他们可以访问的学习资源为指导,比如哪些资源在他们的工作领域中更常用,以及哪些 ...

  3. R-GIS: 如何用R语言实现GIS地理空间分析及模型预测

    前言:随着地理信息系统(GIS)和大尺度研究的发展,空间数据的管理.统计与制图变得越来越重要.R语言在数据分析.挖掘和可视化中发挥着重要的作用,其中在空间分析方面扮演着重要角色,与空间相关的包的数量也 ...

  4. R语言基于机器学习算法进行特征筛选(Feature Selection)

    R语言基于机器学习算法进行特征筛选(Feature Selection) 对一个学习任务来说,给定属性集,有些属性很有用,另一些则可能没什么用.这里的属性即称为"特征"(featu ...

  5. R语言在金融中的运用一

    R语言在金融中的运用 财富管理 风控 数据采集 新浪微博.新浪新闻.股吧.Google.Bloomberg.新浪博客.人民日报.雪球.twitter.Seeking Alpha 继承S语言 1.R包相 ...

  6. R语言与机器学习学习笔记(分类算法)

    转载自:http://www.itongji.cn/article/0P534092014.html 人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经 ...

  7. 使用R语言筛选数据中的重复行

    在进行数据的预处理时,我们常常关注有无重复数据,如果两行数据完全一致,则可能存在数据的重复录入等情况,此时就要对这两行数据进行核实.但这个过程如何用R语言实现?笔者近期对这个问题进行了探索. 我们首先 ...

  8. R语言数据框中的stringsAsFactors参数

    R语言数据框中的stringsAsFactors参数 数据框基本建立 参数:stringsAsFactors 数据框基本建立 (注:本文章中的Name变量区分大小写) Name <- c(&qu ...

  9. 【生信】R语言在RNA-seq中的应用

    R语言在RNA-seq中的应用 文章目录 R语言在RNA-seq中的应用 生成工作流环境 读取和处理数据 由targets文件提供实验定义 对实验数据进行质量过滤和修剪 生成FASTQ质量报告 比对 ...

最新文章

  1. 干货 | 阿里巴巴混沌测试工具ChaosBlade两万字解读
  2. 【报名】杨植麟 :从学习的角度看NLP的现状与未来
  3. Synergy 共享键盘和鼠标
  4. 测试人员的独特价值体会
  5. SpringMVC教程--异常处理器详解
  6. 视屏接口系列(一 ) ----------VGA(对与数信号显示器要加载A/D,延时拖尾、质量下降)...
  7. 调试技巧--Windows端口号是否被占用
  8. Hello Blazor:(8)启用深色模式
  9. 互联网项目管理流程(SOP)总结
  10. seaborn_Seaborn Kdeplot –综合指南
  11. shell加密工具shc的安装
  12. CTWAP下程序崩溃
  13. CSS基础10-单行/多行文本溢出省略
  14. vs2017配置opencv、出现错误:0x00007FFA1CB84FD9 处(位于 test_code.exe 中)有未经处理的异常: Microsoft C++
  15. Ubuntu 安装搜狗中文输入法
  16. Android 手机模拟 Mifare 卡的设计与实现
  17. poi tl 判断空值_poi-tl
  18. 车险赔付率分析报告_保险公司7月份理赔分析报告
  19. m6000查看端口状态_M6000日常查看维护命令
  20. 前端不使用 i18n,如何优雅的实现多语言?

热门文章

  1. 【c语言】蓝桥杯入门训练 序列求和
  2. 计算机基础及msoffice应用书本,全国计算机等级考试一本通一级计算机基础及MSOffice应用2016年无纸化考试专用...
  3. python oserror errorno 39_shutil.rmtree 函数 OSError: [Errno 39] Directory not empty: 错误原因
  4. 阿里正式向 Apache Flink 贡献 Blink 源码
  5. 我有一个计划001之数据挖掘面试(更新ing)
  6. Nexus3 使用root无法启动解决
  7. CentOS 7 安装jdk
  8. Zookeeper 在Hadoop中的应用
  9. Linux非阻塞IO(二)网络编程中非阻塞IO与IO复用模型结合
  10. Lazy Line Painter – 很有趣的 jQuery 路径动画插件