×

极智分析保姆级教学:模型融合

hqy hqy 发表于2025-03-03 01:20:50 浏览11 评论0百度已收录

抢沙发发表评论

点击蓝字 关注我们

在实际工作中,不管怎么调参数或者选择其他的单一模型,模型效果往往不怎么好,怎么都达不到理想情况。一般这个时候想提升模型效果,一种是做特征,另外一种就是利用复杂模型。本文重点说明一下模型融合的知识。模型融合中比较常用的方法有:Voting ensembles(投票)、averaging(平均)、Stacking(堆叠)、Blending(非交叉堆叠)。

01Voting  ensembles

一、Voting  ensembles

我们常见的投票机制,少数服从多数,针对分类模型。这里主要说明两个问题,一个是ensemble为什么能降低误差,另一个是融合弱相关的结果效果更好。

1.为什么ensemble会取得更好的效果?

假设我们有10个样本,真实数据都是1:样本:1111100000,此外,我们通过模型A,B,C得到准确度(Accuracy)分别为70%,8%,70%的结果分别为:

A: 1011111000 = 70% accuracy

B: 0111100010 = 80% accuracy

C: 1111101100=70% accuracy

通过简单的ensemble (vote:ABC同时对一个样本进行投票,数据记录为投票数大于等于2的类别),于是得到结果Z为:Z: 1111101000 = 90% accuracy

2.选择弱相关性的融合

同上,10个样本,真实数据都是1:样本:1111111111。通过模型A,B,C得到准确度分别为80%,80%,70%的结果,但是三个模型高度相关。通过majority vote得到结果Z:

A: 1111111100 = 80% accuracy

B: 1111111100 = 80% accuracy

C: 1011111100 = 70% accuracy

Z: 1111111100 = 80% accuracy

结果并没有提高。反而不如上三个表现较差但是弱相关的模型融合效果好.

02Averaging

Averaging适用于回归、分类 (针对概率) 任务,对多个学习器的预测结果进行平均。平均法的好处在于平滑结果,从而减少过拟合。常见的平均法有三种:算术平均法、几何平均法和加权平均法。但是直接对结果求平均值会有度量上的问题,不同的方法预测的结果,融合的时候波动较小的起的作用就比较小,为了解决这个问题,提出了Rank Averaging,先将回归的值进行排序,再利用均匀分布打分。如下例:

模型1和模型2直接averaging融合的话,模型A几乎对模型B没有影响,就是我们刚才说的波动较小的模型在融合过程中起的作用较小的问题。

我们采用Rank Averaging这种方式,其步骤如下:

(1)对预测结果进行排序;

(2) 对排序序号进行平均;

(3) 对平均排序序号进行归一化。。

还是上面的例子,通过平均排序和归一化,我们能发现波动小的模型1给最终的模型融合带来了影响。

03Stacking

Stacking堆叠法是相对比较高级的模型融合法,也是本文的重点。Stacking的思路是基于原始数据,训练出多个基学习器,然后将基学习器的预测结果组合成新的训练集,去训练一个新的学习器。Stacking分别为以下三类:单层Stacking、多层Stacking、其它技术与Stacking的结合。

本次主要讲述单层Stacking,单层Stacking是指在基学习器上只堆叠一层学习器,这也是最常见的Stacking结构,示意图如下所示:

上图中的基学习器可以是同质或异质的模型,而元学习器在传统做法中是选用逻辑回归模型,当然也能使用非线性模型作为元学习器,例如KNN, RF等。比如在 ”天池零基础入门金融风控-贷款违约预测“ 一赛中,TOP6的方案使用了LightGBM,CatBoost和XGBoost作为基学习器,然后利用Pearson相关系数分析模型结果差异性,选取差异较大的结果文件,再输入第二层元学习器RF进一步融合结果。如果我们有4个特征的数据集和3个基学习器,单层Stacking (5-Fold) 的训练和预测的具体细节是怎样的呢?请见下图:

04Blending

Blending的出现是为了解决Stacking在交叉验证阶段出现的数据泄露,容易产生过拟合,Blending直接使用不相交的数据集用于不同层的训练,通俗的理解就是不做交叉验证,而是将训练集分成2:8两个部分,80%作为训练集,对20%验证集和测试集进行预测,第二层是对20%验证集的预测结果进行训练,不存在数据泄露的问题。但是存在30%验证集数量较少,容易过拟合的问题,所以在实际融合中,使用Stacking还是Blending是有很多Trick的。下面来一个Blending的例子:

首先需要对原始训练数据集进行分割。一般训练集比例为60%-80%,这个比例不易太大,太大的话,容易第二层模型训练数据较少,产生过拟合。

原始训练数据集(D)分为训练数据集(DT)和验证数据集(DA),测试数据集为(DP)。

构建模型阶段:构建M个模型M1,M2,…MM,以模型Mi为例,对训练集DT进行学习,得到模型Mi。学习完毕后,对验证数据DA进行预测为DA_Mi,再对测试数据进行预测得到DP_Mi; 对验证集得到的DA_M1,DA_M2,…DA_MM, 作为新的特征。将这些新的特征作为第二层模型的输入,训练得到模型Model0,将测试集得到的DP_M1,DP_M2,…DP_MM,将这些特征作为预测数据的输入,用Model0预测,得到最终的结果。

05平台实操

以样例数据《肿瘤——乳腺癌(699例)》,平台可以通过“AI预测模型”下的“模型融合”根据数据选择“因变量”、“特征”等可选项,以Blending方法为例,选择相应参数,然后点击“开始分析”就可以生成模型融合表格及图片。

一般来说,在选择第一层模型的时候,我们可以先使用多模型比较进行分析,然后选择模型效果最好的三个模型。第二层模型我们可以选择例如逻辑回归这种比较简单的模型进行分析。

结语

临床研究的根本使命是发现并解决生命科学领域亟待解决的临床问题,同时,为即将发生的临床难题提供备选解决方案。

打开极智分析—智能医学统计分析平台 https://www.xsmartanalysis.com/ 进行实操吧!

点击“阅读全文”参加有奖活动,内含超大福利,不要错过哦!

往期精彩回顾

【1】机器学习+Stacking=盆腔肿块术前诊断

【2】没文章,没数据,SEER 使用指南了解一下!!!

【3】机器学习常用的几个回归损失函数!!!

【4】MIMIC-IV数据库+机器学习+预测模型=Frontiers in Medicine(IF=5.091)

【5机器学习+electronic health record (EHR) data=家族性高胆固醇血症的准确筛查

扫二维码

关注我们

公众号|极智分析

知乎|极致分析

B站|极智分析