• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在本文中,我将带您了解集成模型的基础知识。 

 

Boosting: Boosting是一种连续的技术,首先对整个数据集训练第一个算法,然后通过拟合第一个算法的残差建立后续算法,从而给那些以前的模型预测不好的观测值赋予更高的权重。

它依赖于创建一系列弱学习者,每个弱学习者可能不适合整个数据集,但对数据集的某些部分是有利的。因此,每个模型实际上提升了整体的表现。

注意到提升重点在于减少偏见是非常重要的。这使得助推算法容易过度拟合。因此,参数调整成为提升算法的重要组成部分,以避免过度拟合。

提升的一些例子是XGBoost,GBM,ADABOOST等。

堆叠:在堆叠的多层机器学习模型中,每个模型都被放置在另一个模型上,其中每个模型将其预测传递到其上面的层中的模型,并且顶层模型基于下面的层中的模型的输出来做出决定。

让我们以一个例子来理解它:


在这里,我们有两层机器学习模型:

从数据集接收原始输入特征(x)的底层模型(d 1,d 2,d 3)。

顶层模型f()将底层模型(d 1,d 2,d 3)的输出作为输入,并预测最终的输出。

这里需要注意的一点是,在预测训练数据时使用折叠预测。

在这里,我们只使用了两层,但它可以是每层中的任意数量的层和任意数量的模型。选择模型的两个关键原则是:

各个模型满足特定的准确度标准。

各种模型的模型预测与其他模型的预测并不高度相关。

你可能已经意识到的一件事是,我们已经使用了顶层模型,它将底层模型的预测作为输入。这个顶层模型也可以被许多其他更简单的公式所替代,例如:

 

 实施R集成模型的实用指南


为了实施集合,我选择了贷款预测问题。我们必须预测银行是否应该根据申请人档案来批准贷款。这是一个二元分类问题。 

我会用R中的caret包来训练各种个人模型。它是R中的建模包。 

 #加载黑客马拉松数据集数据<-read.csv(URL( 'https://datahack-prod.s3.ap-south-1.amazonaws.com/train_file/train_u6lujuX_CVtuZ9i.csv')) 

#根据成果将分组训练分为两部分: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” , classProbs = T)#定义预测和结果预测变量<-c(“Credit_History”,“LoanAmount”,“Loan_Amount_Term”   “CoapplicantIncome”)outcomeName < -  'Loan_Status'

现在让我们开始训练一个随机森林,并在我们创建的测试集上测试它的准确性:

 #检查随机森林模型的准确性混淆矩阵(测试集$ Loan_Status,测试集$ pred_rf)混乱矩阵和统计参考预测N YN 28 20是9 96准确度:0.8105         95%CI:(0.7393,0.8692)无信息速率:0.7582         P值[Acc> NIR]:0.07566        卡帕: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模型  混乱矩阵和统计参考预测N YN 29 19Y 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回归的表现,然后再创建这三者的合奏。

#培养Logistic回归模型model_lr <-train(小火车[,预测],车组[,outcomeName],方法= 'GLM',trControl = fitControl,tuneLength = 3)#预测使用knn模型testSet $ pred_lr <-predict(object = model_lr,testSet [,predictors])#检查随机森林模型的准确性混淆矩阵(测试集$ Loan_Status,测试集$ pred_lr)混乱矩阵和统计参考预测N YN 29 19Y 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的准确性。

现在,让我们尝试用我们已经讨论过的与这些模型形成一个整体的不同方式:

 多数投票:在大多数投票中,我们将分配大多数模型预测的观测预测。由于我们有三个二元分类任务的模型,所以不可能有联系。

多数票 testSet $ pred_majority <-as.factor(ifelse(testSet $ pred_rf =='Y'&testSet $ pred_knn =='Y','Y',ifelse(testSet $ pred_rf =='Y'&testSet $ pred_lr ==' Y','Y',ifelse(testSet $ pred_knn =='Y'&testSet $ pred_lr =='Y','Y','N'))))

加权平均数:我们可以取加权平均数,而不是简单的平均数。一般来说,对于更准确的模型,预测权重较高。我们把0.5分别用logistic回归和0.25分别给KNN和随机森林。

#加上预测的加权平均值测试集$ pred_weighted_avg < - (测试集$ $ pred_rf_​​prob Y * 0.25)+(测试集$ $ pred_knn_prob Y * 0.25)+(测试集$ $ pred_lr_prob Y * 0.5)#以0.5分割成二进制类测试集$ pred_weighted_avg <-as.factor(ifelse(测试集$ pred_weighted_avg> 0.5, 'Y', 'N'))


到目前为止,我们已经在顶层使用了简单的公式。相反,我们可以使用另一种机器学习模式,它本质上就是堆叠。在分类问题的情况下,我们可以使用线性回归来制定一个线性公式,用于在回归问题中进行预测,以将底层模型预测映射到结果或逻辑回归。

而且,我们不需要在这里限制自己,我们也可以使用更复杂的模型,如GBM,神经网络,从底层模型的预测到结果,开发一个非线性映射。

在同一个例子中,我们尝试使用逻辑回归和GBM作为顶层模型。 

步骤1:训练训练数据上的各个基础层模型

#定义训练控制fitControl < -  trainControl(method =“cv”,数字= 10,savePredictions ='final',#为了保存最佳参数组合的折叠预测classProbs = T#保存折叠预测的类概率)#定义预测和结果预测变量<-c(“Credit_History”,“LoanAmount”,“Loan_Amount_Term”,“申请人收入”,“CoapplicantIncome”)outcomeName < -  'Loan_Status'#培训随机森林模型 

步骤2:使用每个基础层模型预测训练数据和测试数据

#预测训练数据的预测概率车组$ OOF_pred_rf <-model_rf $ $ PRED Y  


步骤3:现在再训练顶层模型,根据对训练数据所做的底层模型的预测

首先,我们以GBM模型作为顶层模型。



#顶层模型的预测  predictors_top <-c( 'OOF_pred_rf', 'OOF_pred_knn', 'OOF_pred_lr') #GBM作为顶层模型 

同样,我们也可以创建一个逻辑回归集合作为顶层模型。


#作为顶层模型的Logistic回归 


步骤4:最后,预测使用顶层模型,并预测用于测试数据的底层模型


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




大数据部落——中国专业的第三方数据服务提供商,提供定制化的一站式数据挖掘和统计分析咨询服务
统计分析和数据挖掘咨询服务 :y0.cn/teradat(咨询服务请联系官网客服
QQ:3025393450

【服务场景】   
 
   
科研项目;
   
   
公司项目外包 ;线上线下一对一培训 ;学术研究。
【大数据部落】提供定制化的一站式数据挖掘和统计分析咨询服务
分享最新的大数据资讯,每天学习一点数据分析,让我们一起做有态度的数据人
微信客服号:lico_9e
QQ交流群:186388004 




大数据部落——中国专业的第三方数据服务提供商,提供定制化的一站式数据挖掘和统计分析咨询服务
统计分析和数据挖掘咨询服务 :y0.cn/teradat(咨询服务请联系官网客服
QQ:3025393450

【服务场景】   
 
   
科研项目;
   
   
公司项目外包 ;线上线下一对一培训 ;学术研究。
【大数据部落】提供定制化的一站式数据挖掘和统计分析咨询服务
分享最新的大数据资讯,每天学习一点数据分析,让我们一起做有态度的数据人
微信客服号:lico_9e
QQ交流群:186388004 




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
【R语言】期末考试五道题发布时间:2022-07-18
下一篇:
R语言开发之变量的数据类型&amp;赋值&amp;查找&amp;删除 ...发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap