乐趣区

关于算法:如何用R语言在机器学习中建立集成模型

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

介绍

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

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)

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

 #查看随机森林模型的准确性 
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. 在训练数据上训练各个根底层模型。
  2. 预测应用每个根底层模型来训练数据和测试数据。
  3. 当初,再次对顶层模型进行训练,对底层模型进行训练数据的预测。
  4. 最初,应用顶层模型预测底层模型的预测。
  • 步骤 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 机器学习分类预测银行客户散失

退出移动版