# kaggle比赛集成指南

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

## 对提交文件进行集成

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

#### 纠错码

1110110011101111011111011011

1010110011101111011111011011

Original signal:
1110110011

Encoded:
10,3 101011001111101100111110110011

Decoding:
1010110011
1110110011
1110110011

Majority vote:
1110110011

#### 一个机器学习的例子

1111111111

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

#### 相关性

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案例：森林植被类型预测

##### 加权

MODEL PUBLIC ACCURACY SCORE
RandomForest Gini 0.75107
RandomForest Entropy 0.75222
ExtraTrees Entropy 0.75524
ExtraTrees Gini (Best) 0.75571
Voting Ensemble (Democracy) 0.75337
Voting Ensemble (3*Best vs. Rest) 0.75667

#### Kaggle案例：CIFAR-10 图像检测

CIFAR-10是另一个用准确率衡量的多分类kaggle比赛。

#### 代码

Ensembling.训练10个神经网络并平均它们的预测结果，这是一个相当简单的技术，却有相当大的性能改进。

### 平均

#### Kaggle案例: Bag of Words Meets Bags of Popcorn

MODEL PUBLIC AUC SCORE
Perceptron 0.95288
Random Perceptron 0.95092
Random Perceptron 0.95128
Random Perceptron 0.95118
Random Perceptron 0.95072
Bagged Perceptrons 0.95427

### 排名平均

Id,Prediction
1,0.35000056
2,0.35000002
3,0.35000098
4,0.35000111

Id,Prediction
1,0.57
2,0.04
3,0.96
4,0.99

Id,Rank,Prediction
1,1,0.35000056
2,0,0.35000002
3,2,0.35000098
4,3,0.35000111

Id,Prediction
1,0.33
2,0.0
3,0.66
4,1.0

#### Kaggle使用案例：获得有价值的顾客挑战赛

MODEL PUBLIC PRIVATE
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

finnally, when weighted rank averaging the bagged perceptrons from the previous chapter (1x) with the new bag-of-words tutorial (3x) on fastML.com we improve that model’s performance from 0.96328 AUC to 0.96461 AUC.

## Stacked Generalization & Blending

### Netflix

Netdlix公司曾组织并普及了第一次数据科学比赛,在电影推荐挑战赛中，参赛者们将集成发展成为了一门艺术，可能是太极端了以至于Netfilx公司决定不将获胜方案应用到产品中。 因为这实施起来太复杂了。

### Stacked generalization

Wolpert在1992的论文中对stacked generalization进行了介绍，比Breiman的论文 “Bagging Predictors“早了2年。Wolpert的另一成名的机器学习理论是：“没有免费午餐定理

stacked generalization背后的基本思想是使用大量基分类器，然后使用另一种分类器来融合它们的预测，旨在降低泛化误差。

• 将训练集分成2部分： train_a 与 train_b
• 用train_a来拟合一个初级学习器对train_b进行预测
• 用train_b来拟合同类型的学习器对train_a进行预测
• 最后用整个训练集拟合模型，并对测试集进行预测
• 基于初级学习器的概率输出，来训练次级学习器

一个stacker模型通过使用第一阶段的预测作为特征，比相互独立的训练模型能够得到更多的信息。

[…]stacked generalization是将非线性泛化器组合从而形成新的泛化器的手段，是为了尝试最好的集成每个初级泛化器。每个学习器信息越多(在其他学习器上没有重复)，stacked generalization的结果就越好

Wolpert (1992) Stacked Generalization

### Blending

Blending 一词是Netflix的获胜者们引入的。它与stacked generalization非常像，但更简单并且信息泄露风险更小。一些研究者们交换着使用“stacked ensembling”与“blending”这2个词。

Blending的优势：

• 比stacking更加简单
• 能够防止信息泄露：generalizers和stackers使用不同的数据
• 你不需要跟你的队友设定一个相同的随机种子来进行相同的分折 谁都可以将模型放入“blender”中，由blender来决定是否保留这个模型。

• 只使用了整体中数据一部分
• 最终的模型有可能对留出集过拟合
• stacking使用交叉验证比使用单一留出集更加稳健 (在更多的折上进行计算)。

## Stacking with logistic regression

​ 使用逻辑斯谛回归做融合是一个非常经典的stacking方法。我找到一个脚本很好的帮助我理解了这一方法。

​ 当创建一个用于预测的测试集时，你可以一次性完成该操作，或者利用折外估计的模型(out-of-fold predictors)完成。当然为了减少模型和代码的复杂性，我更倾向于一次性完成。

## Stacking with non-linear algorithms

​ 目前流行用于Stacking的非线性算法有GBM,KNN,NN,RF和ET。

​ 非线性的Stacking在多分类任务中，使用原始特征就能产生令人惊讶的提升。显然，在第一阶段中的预测提供了非常丰富的信息并得到了最高的特征重要性。非线性算法有效地找到了原始特征与元模型特征之间的关系。

### Kaggle案例: TUT Headpose Estimation Challenge

MODEL PUBLIC MAE PRIVATE MAE
Random Forests 500 estimators 6.156 6.546
Extremely Randomized Trees 500 estimators 6.317 6.666
KNN-Classifier with 5 neighbors 6.828 7.460
Logistic Regression 6.694 6.949
Stacking with Extremely Randomized Trees 4.772 4.718

## Feature weighted linear stacking

t线性加权stacking就是，先将提取后的特征用各个模型进行预测，然后使用一个线性的模型去学习出哪个个模型对于某些样本来说是最优的，通过将各个模型的预测结果加权求和完成。使用线性的算法可以非常简单快捷地去验证你的模型，因为你可以清楚地看到每个模型所分配的权重。

Vowpal Wabbit对于线性加权stacking提出了一种创新性的用法。比如我们有以下训练集，它有两个特征空间，一个是f，一个是s：

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


## Quadratic linear stacking of models

​ 这方法并没有名字，所以我给他造了一个。这方法跟线性stacking非常像，但它在线性的基础上，额外构造了一系列模型之间预测结果的组合。这一方法在许多次实验中都对评分有很大的提高。最值得提到的是在DrivenData上的比赛： Modeling Women’s Healthcare Decision competition

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

So now you have a case where many base models should be created. You don’t know apriori which of these models are going to be helpful in the final meta model. In the case of two stage models, it is highly likely weak base models are preferred.

So why tune these base models very much at all? Perhaps tuning here is just obtaining model diversity. But at the end of the day you don’t know which base models will be helpful. And the final stage will likely be linear (which requires no tuning, or perhaps a single parameter to give some sparsity). Mike KimTuning doesn’t matter. Why are you doing it?

## Stacking 分类和回归

Stacking可以允许你使用分类器来完成回归问题，反之亦然。比如说，在一个二分类问题中，有人可能会尝试使用线性分位回归 来完成分类任务。一个好的stacker应该可以从预测中提取出你想要的信息，尽管回归通常并不是一个好的分类器。

• 所有低于20k的为类别1
• 所有20k到40k之间的为类别2
• 所有大于40k的为类别3

## Stacking无监督特征学习

k-means聚类是最为流行的无监督算法。Sofia-ML实现了一个快速的在线k-means算法适用于这里。

Piotr给出的 t-SNE在分类任务中的可视化表现

## Online Stacking

The natural world is complex, so it figures that ensembling different models can capture more of this complexity. Ben Hamner ‘Machine learning best practices we’ve learned from hundreds of competitions’ (video)

• 不标准化数据
• 使用z标准化
• 使用0-1标准化

## 模型选择

• 这有一个特别的方法：使用平均，投票，或秩平均等方法来手动选择表现好的集成模型。
• 贪婪前向模型选择 (Caruana et al.)。先使用一个或几个好的模型作为基集成模型。然后不断地增加使得评分提升最大的模型。当然你也可以在期间允许把模型放回去，这样的话一个模型可能会被选择很多次。
• 使用遗传算法来做选择，用交叉验证得分作为适应度评分函数。可以看 inversion‘s solution 的解决方案：‘Strategy for top 25 position‘.
• 受Caruana的启发，我使用一个完全随机的方法：通过随机选择集成(无放回)，创建一个100或其他个数的集成。然后选择其中评分最高的模型。

## 我们为什么要使用如此复杂的集成方法？

• 它可以使你赢得kaggle比赛
• 它可以帮你打败当前学术界性能最好的算法
• You can then compare your new-and-improved benchmark with the performance of a simpler, more production-friendly model
• 总有一天，虽然现在的计算机和云端还是很弱。你将做好准备
• 我们有可能将集成的知识迁移到到简单的分类器上(Hinton’s Dark Knowledge, Caruana’sModel Compression)
• 不是所有基模型都要按时完成的。因为在集成方法中，即使损失一两个模型也是可以接受的。
• 自动化的大型集成策略可以通过添加正则项有效的对抗过拟合，而且并不需要太多的调参和特征选择。所以从原则上讲，stacking非常适合于那些“懒人”
• 这是目前提升机器学习效果最好的方法，或者说是最效率的方法human ensemble learning
• 每1%精度的提升，或许就可以使得你的投资减少大量的损失。更严肃的说：在医疗行业中，每1%的提升，你就能多拯救几个生命。

The natural world is complex, so it figures that ensembling different models can capture more of this complexity. Ben Hamner ‘Machine learning best practices we’ve learned from hundreds of competitions’ (video)

• 广告
• 抄袭
• 版权
• 政治
• 色情
• 无意义
• 其他

120