原文链接:http://tecdat.cn/?p=6608

介绍

 大多数时候,我可能破解特色工程局部,但可能没有应用多个模型的汇合。 

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

1.什么是集成?

通常,集成是一种组合两种或多种相似或不同类型算法的技术,称为根底学习者。这样做是为了建设一个更加强壮的零碎,其中蕴含了所有根底学习者的预测。能够了解为多个交易者之间的会议室会议,以决定股票的价格是否会上涨。

因为他们都对股票市场有不同的了解,因而从问题陈说到冀望的后果有不同的映射性能。因而,他们应该依据本人对市场的了解对股票价格做出各种预测。

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)#Defining预测器和后果

当初让咱们开始训练随机森林并在咱们创立的测试集上测试其准确性:

#查看随机森林模型的准确性 混同矩阵和统计参考预测N Y.N 28 20Y 9 96准确度:0.8105         95%CI:(0.7393,0.8692)无信息率:0.7582         P值[Acc> NIR]:0.07566        Kappa:0.5306         Mcnemar的测试P值:0.06332        灵敏度:0.7568         特异性:0.8276         Pos Pred价值:0.5833         Neg Pred值:0.9143         患病率:0.2418         检测率:0.1830         检测风行率:0.3137         均衡准确度:0.7922         '侧面'类:N

 咱们应用随机森林模型取得了0.81的准确度。让咱们看看KNN的体现:

#训练knn模型 #Predicting应用knn模型testSet $ pred_knn <-predict(object = model_knn,testSet [,predictors])#查看随机森林模型的准确性 混同矩阵和统计参考预测N Y.N 29 19是2 103准确度:0.8627        95%CI:(0.7979,0.913)无信息率:0.7974        P值[Acc> NIR]:0.0241694      Kappa:0.6473        Mcnemar的测试P值:0.0004803     灵敏度:0.9355        特异性:0.8443        Pos Pred价值:0.6042        Neg Pred值:0.9810        患病率:0.2026        检测率:0.1895        检测风行率:0.3137        均衡准确度:0.8899        '侧面'类:N

 咱们可能通过独自的KNN模型取得0.86的准确度。在咱们持续创立这三者的汇合之前,让咱们看看Logistic回归的体现。

#Training Logistic回归模型 #Predicting应用knn模型testSet $ pred_lr <-predict(object = model_lr,testSet [,predictors])#查看随机森林模型的准确性 混同矩阵和统计参考预测N Y.N 29 19是2 103准确度:0.8627        95%CI:(0.7979,0.913)无信息率:0.7974        P值[Acc> NIR]:0.0241694     Kappa:0.6473        Mcnemar的测试P值:0.0004803     灵敏度:0.9355        特异性:0.8443        Pos Pred价值:0.6042        Neg Pred值:0.9810        患病率:0.2026        检测率:0.1895        检测风行率:0.3137        均衡准确度:0.8899        '侧面'类:N

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

当初,让咱们尝试用这些模型造成汇合的不同办法,如咱们所探讨的:

  • 均匀:在此,咱们将均匀三个模型的预测。因为预测是“Y”或“N”,因而平均值对于此二进制分类没有多大意义。然而,咱们能够对察看概率的平均值进行均匀解决。
#Predicting概率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') #Spits到0.5的二进制类 少数表决:在少数表决中,咱们将为大多数模型预测的察看指定预测。因为咱们有三个模型用于二进制分类工作,因而无奈实现平局。
#少数投票 加权平均值:咱们能够采纳加权平均值,而不是采纳简略平均值。通常,对于更精确的模型,预测的权重很高。让咱们将0.5调配给logistic回归,将0.25调配给KNN和随机森林。
#Taking加权均匀预测 #Spits到0.5的二进制类 在持续探讨之前,我想回顾一下咱们之前探讨过的对于个体模型精度和模型间预测相关性的两个重要规范,这些规范必须失去满足。在下面的汇合中,我曾经跳过查看三个模型的预测之间的相关性。我随机抉择了这三个模型来演示这些概念。如果预测高度相干,那么应用这三个预测可能不会比单个模型提供更好的后果。但你明确了。对?

到目前为止,咱们在顶层应用了简略的公式。相同,咱们能够应用另一种机器学习模型,这实际上就是重叠。咱们能够应用线性回归来制作线性公式,用于在回归问题中进行预测,以便在分类问题的状况下将底层模型预测映射到后果或逻辑回归。

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

  1. 在训练数据上训练各个根底层模型。
  2. 预测应用每个根底层模型来训练数据和测试数据。
  3. 当初,再次对顶层模型进行训练,对底层模型进行训练数据的预测。
  4. 最初,应用顶层模型预测底层模型的预测,这些模型是为测试数据而做出的。

在步骤2中须要留神的一件十分重要的事件是,您应始终对训练数据进行包预测,否则根底层模型的重要性将仅取决于根底层模型能够如何调用训练数据。

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

#Defining 管制fitControl < -  trainControl(method =“cv”, savePredictions ='final',#保留最佳参数组合的折叠预测classProbs = T#保留折叠预测的类概率)#Defining预测器和后果 #Training随机森林模型 #训练knn模型 #Training逻辑回归模型  
  • 步骤2:应用每个根底层模型预测训练数据和测试数据

#Predicting训练数据的折叠预测概率 #Predicting测试数据的概率
  • 步骤3:当初再次训练顶层模型对底层模型的预测曾经对训练数据进行了预测

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

 

#Predictors用于顶层模型 predictors_top <-c( 'OOF_pred_rf', 'OOF_pred_knn', 'OOF_pred_lr') #GBM作为顶层模型 

同样,咱们也能够应用逻辑回归创立一个汇合作为顶层模型。

 

#Logistic回归作为顶层模型model_glm < -  ( [,predictors_top],  trControl = fitControl,tuneLength = 3)
  • 步骤4:最初,应用顶层模型预测曾经为测试数据而做出的底层模型的预测

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

请留神, 抉择模型十分重要,以便从整体中获得最佳成果。咱们探讨的 拇指规定将极大地帮忙你。

 还有问题?分割咱们!