2 min read

Stacking的理解

stacking主要分为两类:

  • 用历史结果stacking
  • 用模型结果stacking

这是大方向,具体的迭代方法,之后介绍。

Veen, Dat, and Segnini (2015) 的文章是英文的,网上找到的中文翻译可以参考 (Ensemble Method of Machine Learning 机器学习中的组合方法 2015)

用历史结果stacking

Veen, Dat, and Segnini (2015) 提到最简单的一种方式是,每次打比赛的时候,不要把历史的.csv文件删除,而是保存好,然后用for循环,批量导入后,直接stacking。

用模型结果stacking

我们可以发现每种模型都有自己的优点,以下列举、不穷举:

  • 逻辑回归、线性回归可以预测训练集中不存在\(y\)
  • 树模型可以处理非线性问题、缺失值,但是线性问题做的不好,往往需要特征工程
  • 支持向量机使用好的Kernel,可以处理非线性模型,而且快,但是缺失值问题处理不好。
  • 聚类,跑得快,但是一定要标准化数据,否则受到高量级数据影响大

具体stacking的方式

  • Voting ensembles
  • Ave. nsembles
  • Modeling emsembeles

Voting ensembles

stacking的好处

,假设我们有一组测试集,每个样本可能为\(0,1\)

1111111111

我们用了三个模型 \(f_1,f_2,f_3\), 准确率分别为 \(\alpha_1=\alpha_2=\alpha_3=0.7\)

按照众数投票后,

一共有以下几种情况,

  • 三个全对:\(p_1=0.7\times0.7\times0.7=\) 0.343
  • 三个全错:\(p_2=0.3\times0.3\times0.3=\) 0.027
  • 有两个对:\(p_3=\binom{2}{3}0.7^2\cdot0.3^1=\) 0.441
  • 有一个对:\(p_4=\binom{1}{3}0.7^1\cdot0.3^2=\) 0.189

一次按照众数投票,第一种和第二种,我们都会最后选择\(\hat y =1\),概率加总为 \(p1+p2=\) 0.784。 因此模型显然得到了提升。

这里假设了每个模型之间是独立的,因此可以概率直接相乘。 每个模型估计出来的\(\hat y\)之间的相关性,也影响之后\(\hat y_{stack}\)的准确性。 理论上,越小\(\hat y_{stack}\)的准确性越高。

对于 __Voting__一词,可以联想到对每个投票者给予不同的权重,这个权重在真实世界中就是每个投票者的地位,那么在stacking中,可以利用每个模型在公开比赛的准确率来作为weight。准确率越高的,weight越高。

举个例子

## # A tibble: 5 x 2
##   MODEL                   PUBLIC.ACCURACY.SCORE
##   <chr>                                   <dbl>
## 1 GradientBoostingMachine                 0.651
## 2 RandomForest Gini                       0.751
## 3 RandomForest Entropy                    0.752
## 4 ExtraTrees Entropy                      0.755
## 5 ExtraTrees Gini (Best)                  0.756

Ave. emsembles

\[\hat y_{stack} = \frac{\sum_{i=1}^n \hat f_i}{n}\]

\[\hat y_{stack} = \frac{\sum_{i=1}^n w_i\hat f_i}{\sum_{i=1}^n w_i}\]

\(w_i\)是每个模型权重。

Modeling emsembeles

, 我们在第二步,不是Voting也不是Ave.,而是用原来的特征向量,加上所有的\(\hat y\)来fit\(f_{stack}\)

… where the outputs of the first-level learners are regarded as input features while the original labels are still regarded as labels of the new training data. (Zhou 2012, 83–85)

因此这个\(f_{stack}\)就可以套用很多模型了,

  • 逻辑回归、线性回归可以预测训练集中不存在\(y\)。 这里可以引入 交叉项目
  • 树模型可以处理非线性问题、缺失值,但是线性问题做的不好,往往需要特征工程
  • 支持向量机使用好的Kernel,可以处理非线性模型,而且快,但是缺失值问题处理不好。
  • 聚类,跑得快,但是一定要标准化数据,否则受到高量级数据影响大

这里可以做聚类

单纯的聚类我们不能做是是因为没有监督一个\(y\),但是这里对于\(f_{stack}\),可以做聚类了,因为在第一步的所有\(f_i\)都进行了监督了,\(f_{stack}\)相当于把相似\(\hat f_i\)分在一起,从可视化角度,考虑t-SNE吧。

Automation stacking

这里可以类似于神经网络的完成,看图,但是已经没有什么sense,完全在丢模型。

stacking中,第二层使用LM的依据

如果第一个模型不好,存在\(\hat \mu\),可能大部分的\(y\)是偏高于\(\hat y\)的,这个时候可以乘上一个一个系数扩大\(\hat y\),这个系数就是LM里面的\(\hat \beta\)。 # 总结

其实idea理解起来还是非常简单的,基本上了解了随机森林和神经网络部分,这部分很好理解。 R中已经有ensembles的包了,(???) 写的SuperLearner,我估计里面的底层逻辑就是\(f_{stack}\)就是线性回归或者逻辑回归,所以还是比较简单。 而且这个除了Automation那一版本比较复杂点,其它的都可以自己手动来。

–> –> –> –>

Ensemble Method of Machine Learning 机器学习中的组合方法. 2015. http://blog.csdn.net/frog_in_a_well/article/details/47066975.

Veen, Hendrik Jacob van, Le Nguyen The Dat, and Armando Segnini. 2015. Kaggle Ensembling Guide. https://mlwave.com/kaggle-ensembling-guide/.

Zhou, Zhi Hua. 2012. Ensemble Methods: Foundations and Algorithms. Taylor & Francis.