来源:拓端数据部落
本文约2400字,建议阅读5分钟
本文向您介绍集成建模的基础知识。另外,为了向您提供有关集合建模的实践经验,我们将使用R对hackathon问题进行集成。
通常,集成是一种组合两种或多种类似或不同类型算法的技术,称为基础学习者。这样做是为了建立一个更加健壮的系统,其中包含了所有基础学习者的预测。可以理解为多个交易者之间的会议室会议,以决定股票的价格是否会上涨。
由于他们都对股票市场有不同的理解。因此,他们应该根据自己对市场的理解对股票价格做出各种预测。
在进一步详细介绍之前,一些基本概念是:
平均:它被定义为在回归问题的情况下或在预测分类问题的概率时从模型中获取预测的平均值。
多数投票:它被定义为在预测分类问题的结果的同时,从多个模型预测中以最大投票/推荐进行预测。
加权平均值:在此,不同的权重应用于来自多个模型的预测,然后取平均值 。
一些主要使用的技术:
Bagging:Bagging也称为bootstrap聚合。
增强的一些例子是XGBoost,GBM,ADABOOST等。
堆叠:在堆叠多层机器时,学习模型彼此叠加,每个模型将其预测传递给上面层中的模型,顶层模型根据模型下面的模型输出做出决策。
集成是一种经过验证的方法,可以提高模型的准确性,适用于大多数情况。
集成使模型更加稳健和稳定,从而确保在大多数情况下测试用例具有良好的性能。
您可以使用集成来捕获数据中的线性和简单以及非线性复杂关系。这可以通过使用两个不同的模型并形成两个集合来完成。
集成减少了模型的可解释性,并且很难在最后绘制任何关键的业务见解。
这非常耗时,因此可能不是实时应用程序的最佳选择。
#让我们看一下数据集数据的结构
'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
#训练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
#训练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
现在,让我们尝试用这些模型形成集合的不同方法,如我们所讨论的:
我们将平均三个模型的预测。由于预测是“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应用为顶层模型。请记住,我们将采取以下步骤:
在训练数据上训练各个基础层模型。
预测使用每个基础层模型来训练数据和测试数据。
现在,再次对顶层模型进行训练,对底层模型进行训练数据的预测。
最后,使用顶层模型预测底层模型的预测。
#定义参数
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)
#使用GBM顶层模型预测
测试集$ gbm_stacked <-predict(model_gbm,测试集[,predictors_top])
#使用logictic回归顶层模型预测
测试集$ glm_stacked <-predict(model_glm,测试集[,predictors_top])
注意, 选择模型非常重要,以便从整体中获得最佳效果。
编辑:王菁
校对:林亦霖