心电图心跳信号分类 模型融合
概述
大致有三种方式:
- 简单加权融合。
- Stacking / Blending。
- Boosting / Bagging。
简单加权融合
对于连续值,对结果取平均或者加权平均。
如果是加权平均,我们就需要确定各个模型的权重。 可以通过对模型的效果进行排名,依照其排名分配合适的权重。
举个例子,比如A、B、C三种基本模型,模型效果进行排名,假设排名分别是1,2,3,那么给这三个模型赋予的权值分别是3/6、2/6、1/6。 来自:https://zhuanlan.zhihu.com/p/25836678
对于离散值,可以进行模型投票,分为:
- 硬投票:累加投票数目,取票数最多的。
- 软投票:累加每个类别的概率,取概率最高的。
注意 sklean 里有一些相关的包可供调用,例如:from sklearn.ensemble import VotingClassifier
Stacking
简单地理解是先使用第一层的模型进行训练,得到预测的结果。 之后拿预测的结果作为新的特征训练第二层的模型,以此类推。
但是如果直接这样做的话,过拟合会比较严重(为什么?),因此这里的做法是使用 K 折交叉验证训练 K 的模型, 然后对于训练集,新的特征由各个模型预测各自的交叉验证中所分配的测试集中的样本组合而来; 对于训练集,直接分别用 K 个模型预测,之后结果取平均。
如果第一层的模型有多个,分别进行以上处理,之后将特征直接拼接起来。
Blending
与 Stacking 类似,但是这里的第一层被分为了训练集和验证集两个部分,在训练集上训练多个模型, 预测验证集的标签以及测试集的标签,使用验证集以及其预测的标签进行训练,得到第二层训练好的模型,之后使用该模型对测试集的标签进行预测。
优点:
- 比 stacking 简单(因为不用进行 k 次的交叉验证来获得 stacker feature)
- 避开了一个信息泄露问题:generlizers 和 stacker 使用了不一样的数据集
缺点:
- 使用了很少的数据(第二阶段的 blender 只使用 training set 10% 的量)
- blender 可能会过拟合
- stacking 使用多次的交叉验证会比较稳健
Boosting / Bagging
Bagging 和 Boosting 就是集成学习的方法啦,这里不细说。
参考
- https://github.com/datawhalechina/team-learning-data-mining/blob/master/HeartbeatClassification/Task5%20模型融合.md
- https://zhuanlan.zhihu.com/p/25836678
- https://zhuanlan.zhihu.com/p/26890738
Links: heartbeat-classification-5