在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在本文中,我将带您了解集成模型的基础知识。
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])
【服务场景】
科研项目;
公司项目外包 ;线上线下一对一培训 ;学术研究。
|
请发表评论