如何用R语言在机器学习中建立集成模型?
首页 专栏 算法 文章详情
0

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

拓端tecdat 发布于 5 月 7 日

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

介绍

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

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\]) #检查随机森林模型的准确性  referenceForecast N Y.N 29 19Yes 2 103Accuracy: 0.862795% CI: (0.7979, 0.913)No information rate: 0.7974P 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 statisticsreferenceForecast N Y.N 29 19Yes 2 103Accuracy: 0.862795% CI: (0.7979, 0.913)No information rate: 0.7974P 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机器学习分类预测银行客户流失

算法 机器学习 人工智能 深度学习 数据挖掘
阅读 28 发布于 5 月 7 日
收藏
分享
本作品系原创, 采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
拓端数据
拓端tecdat分享最in的大数据资讯,提供“一站式”的数据分析学习和咨询体验,让我们一起做有态度的数据人...
关注专栏
avatar
拓端tecdat

拓端(http://tecdat.cn )创立于2016年,自成立以来,就定位为提供专业的数据分析与数据挖掘服务的提供商,致力于充分挖掘数据的价值,为客户定制个性化的数据解决方案与行业报告等。

169 声望
27 粉丝
关注作者
0 条评论
得票数 最新
提交评论
你知道吗?

注册登录
avatar
拓端tecdat

拓端(http://tecdat.cn )创立于2016年,自成立以来,就定位为提供专业的数据分析与数据挖掘服务的提供商,致力于充分挖掘数据的价值,为客户定制个性化的数据解决方案与行业报告等。

169 声望
27 粉丝
关注作者
宣传栏
目录

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

介绍

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

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\]) #检查随机森林模型的准确性  referenceForecast N Y.N 29 19Yes 2 103Accuracy: 0.862795% CI: (0.7979, 0.913)No information rate: 0.7974P 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 statisticsreferenceForecast N Y.N 29 19Yes 2 103Accuracy: 0.862795% CI: (0.7979, 0.913)No information rate: 0.7974P 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机器学习分类预测银行客户流失