模型融合

摘要:
基本的理论假设是,不同的子模型对不同的数据具有不同的表达能力。我们可以结合他们擅长的东西,从各个方面得到一个“准确”的模型。因此,通过平均法简单粗暴地整合所有子模型的效果通常是平均的。在此前提下,一种简单的方法是根据子模型的精度给出参考权重。子模型越精确,其权重就越大,对最终预测的影响也会更强:。简单平均是这种方法的特例,它假设子模型的精度是一致的。

结合/融合/整合 (integration/ combination/ fusion)多个机器学习模型往往可以提高整体的预测能力。这是一种非常有效的提升手段,在多分类器系统(multi-classifier system)和集成学习(ensemble learning)中,融合都是最重要的一个步骤。

举个实用的例子,Kaggle比赛中常用的stacking方法就是模型融合,通过结合多个各有所长的子学习器,我们实现了更好的预测结果。基本的理论假设是:不同的子模型在不同的数据上有不同的表达能力,我们可以结合他们擅长的部分,得到一个在各个方面都很“准确”的模型。当然,最基本的假设是子模型的误差是互相独立的,这个一般是不现实的。但即使子模型间的误差有相关性,适当的结合方法依然可以各取其长,从而达到提升效果。

相关方法

平均法/投票法

比较简单,不做赘述。采用平均法的另一个风险在于可能被极值所影响。正态分布的取值是[公式],在少数情况下平均值会受到少数极值的影响。一个常见的解决方法是,用中位数(median)来代替平均数进行整合。另一个问题是子模型良莠不齐。如果10个模型中有1个表现非常差,那么会拖累最终的效果,适得其反。因此,简单、粗暴的把所有子模型通过平均法整合起来效果往往一般。

赋予不同子模型不同的权重

给优秀的子模型更大的权重。在这种前提下,一个比较直白的方法就是根据子模型的准确率给出一个参考权重[公式],子模型越准确那么它的权重就更大,对于最终预测的影响就更强:[公式]。简单取平均是这个方法的一个特例,即假设子模型准确率一致。

学习分类器权重

这是Stacking的核心思路。通过增加一层来学习子模型的权重。

模型融合第4张

更多有关于stacking的讨论可以参考我:「Stacking」与「神经网络」。简单来说,就是加一层逻辑回归或者SVM,把子模型的输出结果当做训练数据,来自动赋予不同子模型不同的权重。

一般来看,这种方法只要使用得当,效果应该比简单取平均值、或者根据准确度计算权重的效果会更好。

挖掘局部关系

上面提到的方法,都有一个不可避免的问题,那就是对于问题处理是全局的(global)。一个分类器不一定在每个局部上表现都好,而我们赋予的全局权重会无差别的认为:”一个子模型在全局的表现上一致“,这是不现实的。

因此,另一个非常有效的融合方法就是:动态分类器选择(Dynamic Classifier Selection),简称DCS。DCS的思路是,当我们遇到一个新的数据需要去预测时,我们首先找到训练数据中和新数据临近的k个数据,一般这个搜寻可以通过k-近邻来实现。找到以后,我们只需要找到在k个相邻的训练数据构成的局部空间上,选择表现最好的分类器。它可能是逻辑回归,也可能是SVM,但思路是找到最好的那一个即可。

这种做法的最大优点是考虑到了不同分类器在不同局部的表现能力可能有差异,不该默认分类器的全局表现一样。在这个基础上,研究人员还提出 动态集成选择(Dynamic Ensemble Selection),DES的区别在于目标是找到局部上表现较好的几个子模型来共同预测,可以理解为集成上的集成

当然,天下没有免费的午餐,使用DCS和DES的最大弊端就是运算开销。与简单的平均相比,这种繁复的方法有很高的时间复杂度。

神经网络与Stacking

Stacking是Kaggle比赛中常见的集成学习框架。一般来说,就是训练一个多层(一般是两层,本文中默认两层)的学习器结构,第一层(也叫学习层)用n个不同的分类器(或者参数不同的模型)将得到预测结果合并为新的特征集,并作为下一层分类器的输入。通过第二层的输出训练器得到了最终预测结果。

stacking中一般都用交叉验证来避免过拟合。

为了降低过拟合的问题,第二层分类器应该是较为简单的分类器,广义线性如逻辑回归是一个不错的选择。在特征提取的过程中,我们已经使用了复杂的非线性变换,因此在输出层不需要复杂的分类器。这一点可以对比神经网络的激活函数或者输出层,都是很简单的函数,一点原因就是不需要复杂函数并能控制复杂度。

因此,stacking的输出层不需要过分复杂的函数,用逻辑回归还有额外的好处:

  • 配合L1正则化还可以进一步防止过拟合
  • 配合L1正则化还可以选择有效特征,从第一层的学习器中删除不必要的分类器,节省运算开销。
  • 逻辑回归的输出结果还可被理解为概率

一般来看,2层对于stacking足够了。多层的stacking会面临更加复杂的过拟合问题,且收益有限。

stacking与深度学习不同之处:

  • stacking需要宽度,深度学习不需要
  • 深度学习需要深度,而stacking不需要

stacking和深度学习都共同需要面临:

  • 黑箱与解释问题
  • 严重的过拟合问题

相关文献:

Džeroski, S. and Ženko, B., 2004. Is combining classifiers with stacking better than selecting the best one?.Machine learning,54(3), pp.255-273.

参考

免责声明:文章转载自《模型融合》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Luncene介绍Delphi New,Getmem,ReallocMem联系与区别下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

第七章——集成学习和随机森林(Ensemble Learning and Random Forests)

俗话说,三个臭皮匠顶个诸葛亮。类似的,如果集成一系列分类器的预测结果,也将会得到由于单个预测期的预测结果。一组预测期称为一个集合(ensemble),因此这一技术被称为集成学习(Ensemble Learning)。集成学习算法称作集成方法(Ensemble method)。 例如,可以基于训练集的不同随机子集,训练一组决策树分类器。做预测是,首先拿到每一...

零基础入门深度学习(5)

无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就out了?现在救命稻草来了,《零基础入门深度学习》系列文章旨在讲帮助爱编程的你从零基础达到入门级水平。零基础意味着你不需要太多的数学知识,只要会写程序就行了,...

[PHP] 6种负载均衡算法

CP from : https://www.cnblogs.com/SmartLee/p/5161415.html http://www.dataguru.cn/thread-559329-1-1.html 1、轮询法 将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。 2、随机法 通过...

Separate to Adapt: Open Set Domain Adaptation via Progressive Separation论文笔记

Separate to Adapt: Open Set Domain Adaptation via Progressive Separation论文笔记 Abstract Domain adaptation问题在利用源域的标注数据为未标记的目标域学习准确的分类器方面已经有较大成功,但是Open Set Domain Adaptation问题中的目标域中存在...

mysql全文检索

mysql到版本3.23.23时,开始支持全文检索,通过语句SELECT ... FROM ... MATCH(...) AGAINST(...) 来在整个表中检索是否有匹配的,全文索引是一个定义为fulltext的类型索引,应用在myisam表中。值得一提的是对于一个大的数据库来说,把数据装载到一个没有fulltext索引的表中,然后再添加索引,这样速度...

大数据技术之_19_Spark学习_08_Spark 机器学习_01_机器学习概述 + 机器学习的相关概念 + 算法常用指标

第1章 机器学习概述1.1 机器学习是啥?1.2 机器学习能干啥?1.3 机器学习有啥?1.4 机器学习怎么用?第2章 机器学习的相关概念2.1 数据集2.2 泛化能力2.3 过拟合和欠拟合2.4 维度、特征2.5 模型2.6 学习第3章 算法常用指标3.1 精确率和召回率3.2 TPR、FPR & TNR3.3 综合评价指标 F-measure...