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

来源:拓端数据部落php

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

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

1.什么是集成?

一般,集成是一种组合两种或多种相似或不一样类型算法的技术,称为基础学习者。这样作是为了创建一个更加健壮的系统,其中包含了全部基础学习者的预测。能够理解为多个交易者之间的会议室会议,以决定股票的价格是否会上涨。bootstrap

因为他们都对股票市场有不一样的理解。所以,他们应该根据本身对市场的理解对股票价格作出各类预测。数组

2.集合的类型

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

  • 平均:它被定义为在回归问题的状况下或在预测分类问题的几率时从模型中获取预测的平均值。 bash

  • 多数投票:它被定义为在预测分类问题的结果的同时,从多个模型预测中以最大投票/推荐进行预测。 app

  • 加权平均值:在此,不一样的权重应用于来自多个模型的预测,而后取平均值 。 机器学习

一些主要使用的技术:性能

  • 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

编辑:王菁

校对:林亦霖

相关文章
相关标签/搜索