kaggle 模型融合指导

KAGGLE ENSEMBLING GUIDE


声明:文章来自网络,手动翻译笔记,仅做学习参考。文末附上原地址,转载请注明出处和声明。


模型整合式是用来提升多样机器语言任务准确率的一个非常强有力的技巧。在这里我将分享我在Kaggle竞赛上使用的整合方法。
第一个部分我们着眼于从提交文件中来整合。第二部分我们将看到通过已堆叠的一般/混合的来整合。
我会回答为什么整合可以减少大多数普遍的误差。最终我将展示整合的不同算法,将它们聚合在一起的结果和你可以自己尝试一下的代码。
这揭示了你如何赢得机器语言比赛:“你将他人的工作成果聚合在一起。”Vitaly Kuznetsov NIPS2014


从提交文件中创造整合

大部分基础以及方便的整合方法是去整合Kaggle的提交CSV文件。你只需要在使用这些算法在测试数据集上——不需要重新训练模型。这是一个整合已完成的现存模型预测的快速方法,是组队时的理想情况。

投票整合.

我们首先看一个简单的多数投票整合。我们看看为何模型整合能减少错误比率以及它比选择低联系度模型预测要好。

错误修正编码

在航空任务中,所有的型号被完全正确的传输是非常重要的。
如果我们有一个由二进制构成的字符信号像这样:

1110110011101111011111011011

然而这个信号腐败(一点点问题)如下:

1010110011101111011111011011

也许这会出人命。
有一种编码方法是去找到矫正错误的编码。这个最简单的正确编码是一个重复的编码:
使用同样的尺寸大小重播那个信号许多次然后多数票决。

源信号:
1110110011
编码:
10,3 101011001111101100111110110011
解码:
1010110011
1110110011
1110110011
多数票决:
1110110011

信号腐败是一个非常少见的情况而且通常发生在小型爆炸里。因此当它显示一个腐败的多数票决的时候甚至更为稀少。
只要信号腐败不是完全不可预测的(有50%的几率腐败),那么信号就能被重新修复。

一个机器学习的例子

假使我们有一组十个样本的测试集。正确的分类是均为正数('1'):

1111111111

此外,我们有三个达到了70%的准确度的二进制分类器(A,B,C)。你现在可以看到这些分类器随机的产生70%比率的‘1’和30%比例的‘0’.
我们现在展示这些假设的分类器怎么能通过一个投票整合,获得78%的准确率。

一部分算法

对于一个三个成员的多数票决,我们可以预测有四个结果:

  • 这三个都正确
    0.7×0.7×0.7
    =0.3429
    两个正确
    0.7×0.7×0.3
    +0.7×0.3×0.7
    +0.3×0.7×0.7
    =0.4409
    两个错误
    0.3×0.3×0.7
    +0.3×0.7×0.3
    +0.7×0.3×0.3
    =0.189
    三个都错
    0.3×0.3×0.3
    =0.027

我们看到大部分的时候(大约44%)
多数票决纠正了一个错误。这个多数票决,总体可以纠正平均大约78%(0.3429+0.4409=0.7838)

选民的数量

如同当更多的代码被重复的时候,重复代码可以提升他们纠正错误的性能一样,所以在做整合的时候添加更多整合成员通常可以得到提高。


image.png

使用上述的算法:能够得到70%正确率包含五个选举整合的假设随机分类器,能够提前到大部分时间大约83%。大约66%的多数票决,在最开始得到一个或者两个错误(0.36015+0.3087)

相关性

但我第一次加入到针对KDD-cup 2014的队伍中时,Marios Michailidis (KazAnova)提议了某些独特的事项。他为我们的任务计算了个人的相关性,而且聚合了一些在过去联系不紧密的优质模型。
通过同这些不同任务文件,创造一个平均整合,给了我们最大50个安全点登上了排行榜。整合不相关的任务文件明显的优于那些相关文件。但是为什么会这样?
来看看这个,让我们再次拿出三个简单的模型,实际情况依然是所有为'1':

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

这些模型在预测时有高度的相关性。当我们采用多数票决时发现没有提升:

1111111100 = 80% accuracy

现在我们比较三个较差的预测,但是高度不相关的模型:

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

但我们整合这些,来使用多数票决的时候,我们得到:

1111111101 = 90% accuracy

这是一个提升:一个关联性交差的综合模型成员看起来能够提升纠正错误的性能

在Kaggle中使用:森林覆盖率测类型

多数票决在评审度量要求艰难的预测时,有最大的意义,举个例子多分类分类器的准确度。
森林覆盖类型预测挑战,使用UCI森林覆盖类型数据集。这个数据集有54个属性,以及6个分类。
我们使用500个树形随机森林,创造了一个简单的开始模型。接下来创造了一些更多的模型而且挑选了表现最佳的一个。在这个任务中,我们的模型选择ExtraTreesClassifier表现最好。

加权

接下来我们使用了加权多数票决。为什么加权?通常我们想要在票选中给更好的模型,更多的权重。因此我们将最佳的模型,在票选中记数三次。其他的四个模型每次计数一票。
规则如下:次级的模型想要否决最好模型的唯一办法是,他们全部统一的支持另一个。
我们希望这个整合可以修复最佳模型选择的几个错误,取得一些小小的进步。这是我们对于放弃民主的惩罚,而创造了一个柏拉图政权。
‘Every city encompasses two cities that are at war with each other.'——Plato in Republic
表格1.展示了训练五个模型的结果,以及结合了加权多数票决的结果。

MODEL PUBLIC ACCURACY SCORE
梯度推进机器 0.65057
随机森林Gini 0.75107
随机森林熵 0.75222
临时森林商 0.75524
临时森林Gini(best) 0.75571
选举整合(民主) 0.75337
选举整合(3×Best vs Rest) 0.75667

在Kaggle中使用:CIFAR-10 图片中目标检测

CIFAR-10 是另一个精确度事件多重分类的分类器挑战
我们的队伍在这个挑战中处于领先,Phil Culliton,第一个发现最好的步骤是从dr.Graham那里复制一个好的模型。
于是我们对30个卷积提交使用票选整合(所有的分数都超过90%准确度)。在整合体中单一模型最好的分数为0.93170。
三四个模型的票选整合,分数为0.94120。在错误概率上下降了大概0.01,推动最终的成绩超过了个人预计分类的准确度。

代码

在MLWave Github repo我们有一个票选手稿你可以使用。(这个地址已经不能用了)
这是在Kaggle提交文件的目录上运行,而且创造一个新的提交文件。更新:Armando Segnini 增加了权重。
整合:训练10个神经网络并且取它们预测的平均值。这是取得让结果的性能提升的一个简单公平的方法。
一个让我疑惑地地方是为何平均可以有如此大帮助,然而对于平均的效用有一个简单的解释。假设有两个错误率为70%的分类器,当他们同意自己是正确的。但当他们不同意的时候,其中一个往往是正确的,此时平均的预测将会在正确的答案上放更多权重。
当网络正确的时候这个效用会很大而当它错误是会显得信心不足(效用差)。Ilya Sutskever A brief overview of Deep Learning.

求均值

求均值在广泛地问题(分类和回归都是)和算法(AUC,均方误差,或者对数损失)中表现良好。
对于于每个模型平均预测,没有什么比求平均更重要。在Kaggle上经常听到的简短说法是'bagging submissions'。

对预测平均经常能够减少过拟合。你希望能够在两个分类中取得一条光滑的分界,然而单一的模型预测结果会在边缘有一些高低起伏。
image.png

以上图片来自Kaggle比赛:’Don't Overfit!'黑色线表现出比绿色显更好的分界。预测线从噪声数据点中学习。不要担心,对数个不同的绿色线取平均将会使我们更靠近黑色线。
记得我们的目标不是去熟记训练数据(有比内部随机森林更有效率的储存数据的方法),而是在新的没见过的数据上更好的推广。

在Kaggle中使用:一袋子的文字遇见无数袋的爆米花

这是一个,电影情绪分析比赛.在先前的公布中,我们使用在线情绪分析器,得到了95.2UAC。
如果数据是线性可分的,这个分析器是一个非常好的线性分类器,他能保证找到一个分割线。这是一个很受欢迎的性能,但是你必须要意识到哦,分类器一旦达到这个分割线了就会停止学习。他并不一定能够在新数据上找到最好的分割。
如果我们使用随机权重初始化五个分类器,并且用平均来比较他们的预测,将会是怎样的情况?为什么我们能够在测试集上得到提升。

模型 公众AUC分数
感知器 0.95288
随机感知器 0.95092
随机感知器 0.95128
随机感知器 0.95118
随机感知器 0.95072
装袋子的感知器 0.95427

以上的结果举例说明了整合能够把,你从必须向良好数据学习以及机器算法的内部细节中,解救出来。如果它效果好,当然好,如果不好,也无伤大雅。


image.png

我们不会因为平均了十个表现良好的线性回归受到惩罚。装袋一个较差的线性交叉验证集,已经过拟合的提交文件,甚至可以通过组合多样内容(那些关联更少的)给你带来更好的收益。

代码

我们在Github上发布了一个简单的平均脚本代码(链接已不可用),输入为CSV文件而输出为平均后的任务文件。更新:我们已经加上了一个几何平均脚本。几何平均能够胜过原始平均。

取队列平均

当我们对多重不同模型的输出取平均的时候,有些问题会突然出现。不是所有的预测都是完美的校准
他们可能会在预测过高或者过低。或者是在某一个范围之内预测混乱。
在极端的情况下,你可能会有一个下面这样的结果:

ID , 预测
1 , 0.35000056
2 , 0.35000002
3 , 0.35000098
4 , 0.35000111

在评审算法是排名或者基本阙值类似于AUC的时候,这样的预测也许能够在排行榜上有一个好名次。但当其他模型取平均如下所示:

ID , 预测
1 , 0.57
2 , 0.04
3 , 0.96
4 , 0.99

他不会对整体结果改变太多。

我们的算法是首先将预测改变到排行榜里,然后再平均这些排行。

ID , 排行, 预测
1, 1 , 0.35000056
2, 0 ,0.35000002
3, 2 ,0.35000098
4, 3 ,0.35000111

在正规化排行于0到1之间之后,你一定能够在你的预测里得到一个平均分布。排行平均化的整体如下:

ID , 预测
1 , 0.33
2 , 0.00
3 , 0.66
4 , 1.00

历史排行.

排名需要一个测试数据己,所以当你测试一个单一数据的时候,怎么做?你可以把它和旧的测试数据排在一起,但是就会提升你算法的复杂性。

一个使用历史排行的算法。在他们的排行上储存旧数据的测试结果。现在当你新样本的测试为'0.35000110'的时候,你会发现它会取代最靠近的一个测试排行(这个案例中'0.3500011'排行'3')。

Kaggle 使用案例:获得重要客户的挑战

平均排行在排行、基本阙值算法(比如UC)、以及搜索引擎性能算法(在k上的平均精度)上,都表现的不错。

获得重要客户挑战的目标是对于可能成为回头客的客户进行概率上的排行。

我们的团队首先使用 R GLMNet模型对多个 Vowpal Wabbit 模型取平均。然后使用平均排行来提升完全一样的整合。

模型 公共分数 私人分数
Vowpal Wabbit A 0.60764 0.59962
Vowpal Wabbit B 0.60737 0.59957
Vowpal Wabbit C 0.60757 0.59954
GLMNet 0.60433 0.59665
Average Bag 0.60795 0.60031
Rank average Bag 0.61027 0.60187

我记录下了平均排行给我们带来巨大提升的Avito挑战

最终我们使用,对袋子中的感知器使用加权重平均排行将我们的模型性能从0.96328AUC提升到0.96461AUC。这个感知器来自前面章节(1X) 在fastML.com上一个新的bag-of-words tutorial(3X)。

代码

一个简单的主力[平均排行脚本]已经添加到了MLWave Github repo。(地址已失效)
*’竞赛是有实际作用的,因为无论多少数量的算法都能应用于任何模型问题,但是我们不知道,哪一个才是最具推动力的。——
Anthony Goldbloom Data Prediction Competitions — Far More than Just a Bit of Fun

image.png

在Youtube上展示的'如何制造苏格兰混合威士忌'。

普通堆叠&混合

平均预测文件是一个效果好而且容易的方法,但是这不是顶级参赛者唯一的算法。这种谨慎的收屁,开始于堆放和混合。抓紧你头上的帽子和裙角:这有很多有七个头的龙。站在另外30条龙的上面。

Netflix 网飞公司

网飞公司组织和推广了第一个数据科学比赛。在电影推荐的挑战比赛中,整合创造真的推动了最新的成果,也许是因为过于复杂,网飞公司决定不在生产中使用获胜的算法。那是一个简单而复杂的算法。
然而,许多的论述和新奇的算法,从这场比赛中产生:

如果你想要提高你的Kaggle竞赛成绩,他们都是非常有趣容易而且相关的读物。

image.png

'这是一个让他印象深刻的比赛,十多年来的一个顶点,混合了数百个预测模型,终于越过了终点线。我们离线评估了一些新模型,但是我们评判的额外的准确性收益,看起来不能证明他们是在工程需要的合理成就。‘——网飞公司工程师

普通堆叠

普通堆叠是Wolpert在1992paper提出来的,早于Breiman的论文“Bagging Predictors“.
两年。

基础理念就是使用一堆基本分类器来进行普通堆叠,然后使用另外一个分类区联合他们,目的在于减少普通误差(generalization error)。

让我们来看一下你想要做到的两折堆叠:

  • 将训练集分为两个部分:train_a 和 train_b
  • 使用train_a训练第一个模型,然后在tain_b进行预测
  • 用train_b训练同一个模型,然后在train_a进行预测
  • 最终在所有的训练集上训练模型,然后在测试集进行预测
  • 在第一歩模型得到的概率上,进行第二步训练堆叠模型

比起单独训练,堆叠模型能在使用把第一部的预测当作特征的问题空间中得到更多的信息。

令人满意的一点是0级别的广泛化是所有的'类型',并且不仅是简单的改变彼此(比如:我们希望表面-fitters,训练模型的建造者,统计学的外推器,等等)。在这个方法中,从分利用所有检查学习集以及从中推进它。这就是为什么级别0广泛化应该“空间接空间”这个说法的含义。
[...]普通堆叠是一个集合一些generalizer,来创造一个新的generalizer来取得平均值,对每个初始的generalizer表达过的学习集的内容,尝试最佳整体。每个generalizer表达的越多(不是去重复复制其他的generalizer曾经说过的内容),最终堆积generalization的结果越好。——Wolpert(1992)堆积-Generalization

混合

混合式一个由网飞获胜者介绍的方法。它和普通堆叠很接近,但是它会更简单而且信息的泄露量更少。有一些研究者,使用“全部堆叠”和“混合”交换。

在混合中,并非使用从中取折(out-of-fold)预测用来做训练集,用训练集中的10%创造一个很小的holdout训练集合,只在这holdout集合上训练。

混合有几个优势:

  • 它是简单的堆叠
  • 它防止信息的泄露:广泛普通的(generalizers)以及堆叠使用不同的数据。
  • 你不需要同你的队友分享分层的折的种子。任何人可以使用'blender'抛掷模型,并且混合者决定,他是否保持那个模型。

缺点是:

  • 你在全体数据上使用的更少
  • 最终的模型可能对于holdout集合过拟合
  • 你的CV堆叠起来(多次折叠计算)比使用一个,单一小的holdout集合更加坚固

对于绩效,两种方法可能是相似的结果。看起来更重要的是哪一种技术你更偏好。我个人更喜欢堆叠。

如果你无法作出决定,你可以两个都做。使用普通堆叠创造堆叠整体,然后从中取折(out-of-flod)预测。然后在第三歩使用holdout集合更进一步的联合这些模型。

使用逻辑回归堆叠

使用逻辑回归堆叠,是更进一步的传统、常规的堆叠做法。我找到了Emanuele Olivetti
的一个手稿script
帮助我去理解。

当为测试集创造预测的时候,你可以一次性完成它,或者从中取折预测然后平均。通过平均是一个干净而且精确的方法来实现预测,我更喜欢一次性完成,那是模型和代码复杂度降低一点。

Kaggle使用:“Papirusy z Edhellond”

我使用了由Emanuele在这类比赛中完成的blend.py。用逻辑回归堆叠了8个基本模型,给我第二名最好的成绩0.99409精确度,对我来说很棒。

Kaggle使用:Kdd-cup 2014

使用这个手稿我可以从 Yan Xu
的模型中提升一步。他的模型在堆叠前分数大约是0.605AUC,堆叠之后提升到了大约0.625AUC。

非线性算法堆叠

常见的非线性算法堆叠,包括GBM, KNN, NN, RF 以及 ET。

原始特征的非线性堆叠,在多分类问题上,取得了令人意外的好成绩。显然,第一步预测非常有用,而且得到了最高特征的重要信息。非线性算法,找到了原始特征以及元模型(meta-model)特征之间有用的相互关系。

Kaggle使用:TUT Headpose Estimation 比赛

TUT Headpose Estimation
比赛可以看作为,多分类下的多标签比赛。

每个标签单独的被整合模型训练。
下面的表格展示,单独模型训练的结果,以及使用极端随机森林模型堆叠预测分类可能性之后,提升过的分数。

模型 公共MAE 私人MAE
统计500随机森林 6.156 6.546
统计极端500随机森林 6.317 6.666
5个邻元素KNN-分类器 6.828 7.460
逻辑回归 6.694 6.949
使用极端随机森林堆叠 4.772 4.718

可见,使用标准模型进行,普通堆点可以降低误差,30%左右。

在这篇论文上可以了解更多: Computer Vision for Head Pose Estimation: Review of a Competition

代码

代码已失效。你可以使用numpy水平堆叠来创造混合数据集。

线性堆叠特征权重

线性堆叠特征权重使用模型预测堆叠设计过后的元特征。希望使用原始模型来堆叠学习到的,是有必然结果的样本的最佳预测者。线性算法是用来检查,保持最终模型的速度以及简明。


image.png

Vowpal Wabbit 能够在框架之外,执行特征,权重线性堆叠的框架。前提是我们像这样来训练集合:

1 |f f_1:0.55 f_2:0.78 f_3:7.9 |s RF:0.95 ET:0.97 GBM:0.92

我们在 s- 特征空间以及 f- 特征空间之间,添加二次相互作用的特征 -q fs。在名为 f 空间中的特征能被设计像论文中的元特征,或者能成为原始特征。

二次线性堆叠模型

我自己为它取了一个名字。它与特征权重线性堆叠很相似,但是他创造了一个模型预测的联合体。在众多的实验中提升了成绩,最明显的是在DrivenData上的Modeling Women’s Healthcare Decision competition

使用如上相同的VW训练集

1 |f f_1:0.55 f_2:0.78 f_3:7.9 |s RF:0.95 ET:0.97 GBM:0.92

我们能够在模型预测之间使用 -q ss 创造的相互作用算法特征训练 。
这能容易的联合线性特征权重来堆叠:-q fs -q ss,可能两个都提升。

如今有一种情况是许多基本模型都应该被创造。你不知道这些先前的模型哪一个,对最终的,算法模型有帮助。这个情况前两个阶段的模型,更偏好于高度相似弱基本模型。
因此为什么要对这些基本模型进行大量调整呢?也许调整在这里只是获得了模型的差异。但是在最后,你不知道哪一个模型是有帮助的。而最终的步骤像线性(它不需要微调或者一个单一的参数来提供稀疏性)。Mike Kim Tuning doesn’t matter. Why are you doing it?

使用回归堆叠分类器以及反向操作

堆叠可以使用分类器进行回归问题,反之亦然。举一个例子,针对于字典分类问题的一个分数位回归基本模型。一个好的堆叠,应该能够从预测中拿到信息,尽管通常回归不是最好的分类器。

在回归问题中,使用分类器有一点机灵狡诈。你首先:转换y_标签到均匀的分类空间。一个回归问题需要你去预测报酬,以便能够转换成为多标签分类问题,就像如下:

  • 所有低于2万的是类别1
  • 在2万到4万之间是类别2
  • 超过4万是类别3

预测这些类别的可能性能够帮助堆叠回归取得更好的预测值。

“我意识到你绝对不可能不使用out-of-fold预测到达任何地方。即使我去夏威夷,或者是洗澡间,都会带着他们。不知道什么时候我需要训练,第二个或者第三个水平的元分类器(mate-classifier)。”T. Sharf

堆叠非监督学习到的特征

没有任何理由,我们去限制在堆叠中监督学习技能。你一样能够使用非监督学习技能堆叠。

K-Means聚合在这里是一个流行的技巧,它在这里能发挥作用。Sofia-ML产生一个适用于此的快速的线性k-means算法。

另外两个最近的新增方法是使用t-SNE:减少数据集到2或者3维然后使用非线性堆叠器堆叠。使用holdout集合来 堆叠/混合,在这里的感觉就像安全选择。这里有一个Mike Kim,的解决方案,使用t-SNE向量,而且用XGBoot推动:‘0.41599 via t-SNE meta-bagging‘。

image.png

Piotr给我们了在Otto Product Classification Challenge
数据集上的t-SNE一个非常棒的形象化展示。

在线堆叠

我花费很多时间实现了我曾经的一个在线堆叠想法:首先从散列的字典代表中创建小型充分的随机森林。当森林做了正确的预测的时候减去或者添加收益。然后将最高收益以及最小收益的森林添加到代表特征(集)。

这能有作用,但只是在虚拟的数据上。一个实际的例子,一个在线随机森林线性感知器堆叠之后能学习一个非线性XOR问题。但是它无法在任何现实数据中学习,相信我,我是尝试过了。自此我对任何只在虚拟数据特征上面,展示他们新算法的论文,持有怀疑态度。

来自论文作者一个相似的办法起了作用:random bit regression。这里有许多从特征创建的随机线性函数,其中最佳的是从严重的正则中找出来的。我能在某些数据集上复制使用。这将是未来的发展。

更多的在线堆叠具体案例是使用添加点击预测。模型使用最近的数据预测比过去的好。因此当一个数据集有一个暂存的效果,你能使用Vowpal Wabbit去在全部数据集训练,然后用更复杂和有力地工具诸如XGBoost,在最后一天(最近)的数据集上训练。接下来你将XGBoost预测值于样本堆叠结合,让Vowpal Wabbit做它最擅长的部分:优化损失函数。
现实世界很复杂,所以认为整合不同的模型可以捕获更多这样的复杂性。——
Ben Hamner ‘Machine learning best practices we’ve learned from hundreds of competitions’ (video)

每件事都是一个超参数

当在进行 堆叠、混合、制作元模型 的时候,对于堆叠模型,思考将所有的动作视为超参数是一件非常有益的事情。

比如:

  • 不要缩放数据比例
  • 标准化数据比例
  • 极小极大化数据比例

简单临时的参数微调来提升整合模型的性能。同样的,基本模型的使用数量能看作为一个优化的参数。特征选择(前70%)或者归咎(丢失特征归为0)是另个元参数的例子。

就如同随机网格搜索是一个调整计算参数的好备选方案,所以调整这些元参数以使其有效果。
有时候允许XGBoost看到KNN分类器看到的内容,是很有用的。——Marios Michailidis

模型的选择

你可以使用联合多重整合模型来进一步优化分数。

  • 一个专门的方法:在手动选择的优质表现整合模型中使用平均、选举或者平均排名
  • 贪婪模型选择(Caruana et al.)。开始于三分之一或者更多基本模型。当一个模型提升训练数据集分数最高时添加进去。由于允许加入和剔除模型,一个模型可能会被多次采用(权重)。
  • 基因模型选择使用基因算法和CV-分数作为适当的函数。可以在inversion的算法 ‘Strategy for top 25 position‘中看到实例。
  • 我使用的是有Caruana的算法计划的一个充分随机算法:从随机选择的整合中制作一个100或者相当的整合体(不重复)。然后选择最高的得分模型。

自动化

Otto product classification比赛中我使用堆叠取得了一个前10的好成绩。通过添加越来越多的基本模型以及装袋多重堆叠整合体,我能够一直提升我的分数。

有一次我达到了由6个堆叠器堆叠出来的7个基本模型,出现了一种惊慌和阴郁的感觉。我真的能在复制出这些所有吗?这些复杂并且笨重的模型,超出了我的快速、简单机器学习的舒适圈。
我利用剩下的竞赛来建立来一个自动堆叠的方法。由于基本的模型,是由单纯随机训练后的参数组成的单纯随机算法。编写的封装器制造分类器如VW、Sofia-Ml、RGF、MLP和SBGoost,与Scikit-lean API配合很好。

image.png

第一个白板描述的一个由3个buckets平行放置组成的自动堆叠。

堆叠时我使用SVM、随机森林、极端随机树、GBM以及CGBoost。它们使用随机参数和随机基本模型子集。

当在训练集预测的更低损失时,最终创造的堆叠结果是平均的。

这个自动堆叠能在比赛结束前一周能够排名第57位。这对于我最终的整合大有益处。唯一的不同之处在于我没有花费时间训练或者选择:我运行之后就去睡觉,然后醒来时得到一个好方案。

image.png

自动堆叠能在一个超过3000参赛选手的竞赛中,不借助于任何微调或者手动模型选择,得到前10%的分数。

自动堆叠是我的一个大收获。尤其后面在此基础提高算法。自动堆叠的最佳结果可以在TUT Headposs Estimation比赛中看到。这个黑盒子算法,击败现存的state-of-the-art为这个专属问题创造的针对目的算法的集合。


image.png

更值得注意的是:这是一个多重标签分类问题。预测结果同时需要'yaw'和'pithe'。由于'yaw'和'pitch'为首部的标签是相关的,堆叠一个预测为'yaw‘的模型会提升'pitch'预测的准确度,反之亦然。这个结果很有意思。

用网络直观表示模型能使用向后传播训练。这些堆叠模型学习哪个基本模型减少误差最多。


image.png

挨在CV-分数,可以考虑到CV-分数的标准偏差(小一点的选择更安全)。能观察优化 复杂性/内存 用法和运行时间。最后一个可以看到添加相关的到混合体-让代码在制造整合体时更喜欢不相关的预测模型。

整个自动堆叠管道可以平行和分散。这使得在一个笔记本电脑上,也能带来速度的提升和更好的结果。

上文相关的强制优化看起来似乎完全随机的网格搜索是一个不错的选择:我们希望我们的算法开始于好的参数和模型,而且记住这些。然而随机SVM这些选择最后导致内存不足。这些堆叠的附加问题一会进行详细的细节讨论。

于此同时你可以在MLWave Github 上得到一个内部演示repo:'Hodor-autoML'。

第一和第二的德国获胜者取得分类挑战,使用了超过1000个不同模型的整合体。在这两个地方可以了解更多:first placesecond place

为什么要创造这些自取灭亡整合体?

你可能希望明白为什么这些是无效的:堆叠和联合1000多个模型,而且花费无数的小时,是挺疯狂的对吧?嗯....对。等这些怪物一般的整合体仍有他们的用处:

  • 你能够赢得Kaggle比赛
  • 你能够使用一个单一的方法去击败大多数专业的state-of-the-art标准
  • 你能使用一个简单的性能来比较你新提升之后的水准,更多友好的预测模型
  • 总有一天,如今的电脑会被淘汰,而你已经准备好
  • 有可能从这些整合体中获得知识来使用到更简单的浅层次模型中去(DarkKnowledge——Hinton,Model Compression——Caruanan)
  • 不是所有的基础模型都需要按时完成。在这一点上,整合介绍一个优雅降低的框架:扔掉一个模型,并不会妨碍创造好的预测。
  • 大型自动的整合体有效防止过拟合,而且增加了一个正则的框架,这不需要太多的调整和选择。原则上堆叠,可以供外行人使用。
  • 这是目前提升机器学习算法最好的算法之一,也许告诉了我们一些,有关于人类整体学习效率的方面。
  • 在准确率上提升1%,有可能让基金从亏损一点,到亏损更少一点。严格的说:提升医疗保健算法有助于保卫生命。

更新:非常感谢Dat Le在文档编制以及重构随文章后附加的code方面的帮助。谢谢 Armando Segnini添加了,权重平均。感谢每个人的鼓励。如果忘记了链接到你之前做的工作,我表示歉意。更多的内容在
More is always better – The power of Simple Ensembles“——Carter Sibley

Tradeshift Benchmark Tutorial with two-stage SKLearn models” —— Dmitry Dryomov

Stacking, Blending and Stacked Generalization” —— Eric Chio

Ensemble Learning: The wisdom of the crowds (of machines) ——Lior Rokach

Deep Support Vector Machines” —— Marco Wiering

术语:当我说整合体,我的意思是’联合多个模型,平均模型'。想随机森林使用在整合体中的技巧,这种算法就像是内部袋装。对于本文来说,我们注意力不在那。

文中的图片来自于WikiMedia Commons 而且是公众部分。非常感谢Jesse Merz

引用

如果你从这个文章中使用重要的部分或者是算法,放到科学论文,报告或者书。请考虑如下内容:

或者你需要一个更权威的引用:

  • Michailidis, Marios. (2017). Investigating machine learning methods in recommender systems (Thesis). University College London.

对于其他不太正式的材料,比如博客或教育幻灯片,一个简单的链接就足以满足。
网站,地址将保持静态
The resource URL will remain static and the page hosted on this site for the foreseeable future.



原地址 https://mlwave.com/kaggle-ensembling-guide/
声明:此文稿由本人自己手动翻译,仅作自己笔记使用。请勿作为学习内容。文末附有原论文地址,可以将本文作为参考。欢迎指正,如若转载注明出处以及声明。

感谢各位的阅读,如对你有帮助,请点喜欢。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容

  • 窗台上的昙花 呼吸虚弱 求救声微不可闻 失眠的守夜人 双瞳染上惊恐之色 体内血液渐渐冰凉 窗外 风与风互相割伤的血...
    东方灵澈阅读 363评论 13 38
  • 厕所是一个什么地方 这里是书房 是工作室 是天堂 这么直爽的性格 还需要什么遮掩 不忌荤腥 爱就是爱,恨就是恨 这...
    应心阅读 232评论 0 0
  • 1.New words 1.get in a pinch 原句:So if I ever get in a pin...
    ivvyy阅读 448评论 0 0
  • 价格是顾客购买产品的一个永远敏感的话题。一般来说,消费者总是希望花最少的钱办更多的事,不少超市都因为产品价位的不合...
    0756cb9cf0ae阅读 695评论 0 0