
模型融合为什么能够可以让两个或多个模型的预测能力得以提升呢。之前,我打过两场数据竞赛了,基本是都死在初赛,20%的名次,但我都没有用过模型融合,因为我一直不理解。下面举一个简单的例子:
就像玩吃鸡一样,当然,咱们玩玩就是为了大家凑一伙,一起图个乐。但是,如果突然有一天,你的小伙伴提出来:咱们打的这么好,咱去打职业联赛吧。这个时候,吃鸡的目标就不一样了,你们眼中就只有胜利了,这个时候,你们要组一只战队,有两个人员方案:
1. 四个钢枪很厉害的。 2. 一个钢枪厉害,一个擅长玩狙击枪,一个机动性强,一个脑子特别灵活擅长指挥。
因此,融合模型就是结合不同子模型的长处,如果子模型有独立且互补的长处,我们融合后的最终输出就能有所提升。子模型独立是很难的,因为子模型一般不存在独立性。因此,如果子模型的错误不同且互补,那么正确融合多个子模型就可以得到一个更好的模型。
一个好的模型融合,其融合的子模型应该符合俩个假设:
准确性:大部分子模型要能对最终输出有所帮助,至少要比随机猜测要准确。也就是说,要想模型融合后分数有所提升,至少你要融合的子模型的预测能力要强。
多样性:子模型间需要有所不同,长处和短处各异,这个很好理解,你找几个很相关的子模型去融合,最终的结果也不会有所帮助。
也就是说,我们想做一个好的模型融合,那么我们就需要保证子模型的准确性和多样性。但是显然这这是矛盾的。
准确性,是我们在搭建子模型的时候需要考虑,好的特征工程,好的模型以及好的模型参数。因为我们做模型融合一定是在建模调参后面,即我们已经做好了准确性的模型。那么,多样性就是我们在做模型融合的时候最重要的。
多样性,要求我们要有尽可能不相关的子模型。
1. **选用不同类型的分类器**:比如逻辑回归,lgb等不同的模型,在整个数据集上训练,此时,模型的多样性在**不同的模型对数据有不同的表达能力**。代表算法:**Stacking**。
2. **选用同类型的分类器,但使用不同的参数**:此时,模型的多样性体现在**不同的超参数在同一模型上的差异**所决定的。
3. **相同的分类器,但在不同的训练集上进行训练**: 显然,模型的多样性体现在**数据的差异性**。
4. **使用相同的分类器,但在不同的特征上进行训练**:和3一样,模型的多样性仍然体现在**数据的差异性**。这样的做法,考虑了在不同的超空间上,模型有不同的泛化误差,最终融合可以得到互补的效果。常见的boosting是顺序模型,他的多样性来自于子模型对于不同样本所赋予的权重上的差异,从某个角度上看其实可以归类到方法2中。
以上四种方法是基本操作,我们可以组合使用。
但值得注意的是,手动融合模型时一般很少构造大量的弱分类器,而是精挑细选少量的强模型进行融合,
参考 : 机器学习中如何融合多种特征或分类方法? - 微调的回答 - 知乎 https://www.zhihu.com/question/24598447/answer/383717513