kaggle比赛模型融合指南

介绍

集成模型是一种能在各种的机器学习任务上提高准确率的强有力技术。在这篇文章中,我会分享我在Kaggle比赛中的集成方法。

在第一部分中,我们会讨论从提交文件中建立集成。主要包括:

  • 投票集成
  • 平均
  • 排名平均

第二部分我们会讨论 通过 generalization/blending等方法来创建集成。

我会在后续回答为什么集成能够减少泛化误差。最后我会展示不同的集成方法,包括它们的结果以及代码以供你自己去尝试。

怎样赢得机器学习比赛:你拿别人的结果和你自己的结果与做集成。 —— Vitaly Kuznetsov NIPS2014。

对提交文件进行集成

最简单方便的办法就是对Kaggle提交的csv文件直接进行集成。你只需要模型在测试集上的预测结果,而不需要重新训练一个模型。它简单快速,只需使用已有模型的预测结果,是拼队的理想选择。

投票集成(预测结果为类别时)

我们先看一下简单的投票集成方法。来看看为什么集成模型能够减少错误率,和为什么它能在模型间相关度较低时能取得更好的结果。

纠错码

在航天任务中,所有的信号都被正确的传达是非常重要的。

如果我们有一个二进制字符串形式的信号,如:

1110110011101111011111011011

如果信号在传输过程中有一位发生了翻转(第二位),变成了

1010110011101111011111011011

那这可能是致命的。

在纠错码中有一个编码 解决方案。在最简单的情况下,即纠错码是重复码时:以同样大小的数据块多次传递信号,并进行投票(以少数服从多数原则)。

Original signal:
1110110011

Encoded:
10,3 101011001111101100111110110011

Decoding:
1010110011
1110110011
1110110011

Majority vote:
1110110011

信号失真很少发生且通常在局部发生,因此,多次投票依然出错的可能性就更小了。

只要信号失真不是完全不可预测的(有50%的几率发生),信号就能被修复。

一个机器学习的例子

假设我们的测试集有10个样本,正确的情况应该都是1:

1111111111

我们有3个正确率为70%的二分类器记为A,B,C。你可以将这些分类器视为伪随机数产生器,以70%的概率产生”1”,30%的概率产生”0”。

下面我们会展示这些伪分类器通过投票集成的方法得到78%的正确率。

涉及到一点数学

All three are correct
  0.7 * 0.7 * 0.7
= 0.3429

Two are correct
  0.7 * 0.7 * 0.3
+ 0.7 * 0.3 * 0.7
+ 0.3 * 0.7 * 0.7
= 0.4409

Two are wrong
  0.3 * 0.3 * 0.7
+ 0.3 * 0.7 * 0.3
+ 0.7 * 0.3 * 0.3
= 0.189

All three are wrong
  0.3 * 0.3 * 0.3
= 0.027

我们看到有44%的概率投票可以校正大部分错误。大部分投票集成会使最终的准确率变成78%左右(0.3429 + 0.4409 = 0.7838)。

投票个数

跟重复码相似,随着编码重复次数的增加对错误的校正能力也会增加,因此集成通常可以通过提高集成成员的个数来提升准确率。

kaggle比赛模型融合指南_第1张图片
Repetition_Code_On_Fading_Channel_Graph

同样利用上面数学的数学公式:对5个有70%准确率的伪随机分类器进行投票集成会得到83%的准确率。在大约66%的情况下投票可以校正1或2个错误编码。(0.36015 + 0.3087)

相关性

在我第一次组队参加2014年KDD杯比赛时,Marios Michailidis (KazAnova)提出了一些奇特的东西,他对我们所有的提交文件计算 皮尔逊相关系数,并且挑选出一些性能较好且相关系数较低的模型。

从这些挑选出来的文件中创建平均集成模型,给我们在排行榜上带来了巨大的提升,50名的飞跃。不相关的预测结果的集成明显比相关的集成结果要好,这是为什么?

为了说明这一点,我们再举3个简单的模型。正确的情况仍然是全是1:

1111111100 = 80% accuracy
1111111100 = 80% accuracy
1011111100 = 70% accuracy.

这些模型的预测是高度相关的,当我们进行投票时,可以看到准确率没有提高:

1111111100 = 80% accuracy

下面我们比较3个性能相对较差,但是高度不相关的模型:

1111111100 = 80% accuracy
0111011101 = 70% accuracy
1000101111 = 60% accuracy

但我们做集成进行投票得到结果:

1111111101 = 90% accuracy

结果得到了提升:集成低相关性的模型结果似乎会增加纠错能力。

参考:

  1. https://blog.csdn.net/weiyongle1996/article/details/78227568
  2. https://blog.csdn.net/Mr_tyting/article/details/72957853

你可能感兴趣的:(kaggle比赛模型融合指南)