#前言
本篇博客会和大家分享一下有关集成算法的相关理论知识,都会结合个人认为比较好理解的例子给大家做一个简单的介绍,如果想要了解更加深入的相关知识,大家可以自行去进行一个详细的搜索和学习。
#集成算法概述
我们在集成算法中运用到的最多的模型其实就是树模型,这里我们可以去类比一下在高中时所学习到的电路知识,由于涉及到多个树模型的应用,那么这些树模型该如何排布?有些树模型还是按照并联电路的方式进行排列的,例如Bagging模型,也就是我们常说的随机森林,以及将树模型进行串联电路的方式进行排列的,例如Boosting模型
#随机森里模型
正如上面所说,在随机森林模型中,我们将多个树模型进行并列运行,各个树模型在彼此运行时相互独立,这样也就可以极大的提升效率,但是这里我们不妨考虑一下,对于我们的随机森林来说,我们对每个树模型输入的数据相同,而树模型本身的算法相同,这也就意味着每一个树模型的输出结果是相同的,那我们对于树模型的堆叠就毫无意义,因为输出的结果是相同的。
(随机森林的数学表达式)
为了解决这个问题,我们提出了一个解决思路,那就是随机采样,这里的随机采样设计到两个方面,一个是数据随机采样,一个是特征随机采样。比如现在有100个数据和10个样本,我要求每个树模型必须输入80个数据和6个特征作为学习的依据,由于是随机选取的,所以各个树模型的输出是不完全相同的,或者说是完全不同的,这样我们对于不同的树模型来进行最终的求平均才具有实际的意义。
#提升算法概述(Booating)
提升算法不同于随机森林的求平均,提升算法要求每次加进来的树模型都要比上一次的学习效果强,才可以加入。提升算法从弱学习器开始加强,通过加权来进行训练。
这里我们还是用之前的银行借贷的例子,假设现在你需要从银行借出1000w,通过第一个树模型的作用后,你借出了900w,这时候就存在一个100w的残差。当我们在引入第二个树模型时,此时我们学习目标不再是1000w,也不是借出的900w,而是对残差进行学习。通过不断对残差的修正,使得最终的效果越来越接近label,可以说是一种以牺牲效率为代价来换取准确率的暴力算法。以下是有关提升算法的数学表达式:
在上式中,Fm-1(x) 所代表的是上一次的学习结果,后面的部分则是对残差的学习。
典型的Boosting模型一共有两个,分别是AdaBoost和XgBoost。
这里我给大家简单介绍一下AdaBoost模型。假设现在有一个范围内有两堆不同的图形,一堆是正方形,一堆是三角形,现在我想通过AdaBoost来对这两堆图形进行一个分类,那么在第一轮中模型很可能会将图形划分错误,我们假设现在他将一个三角形错误的划分成一个正方形,那么AdaBoost模型就会给这个三角形增加更多的权重,本质就是来提示模型在进行下一次分类是要着重注意这个三角来避免分错。
#堆叠模型(Stacking)
Stacking算法其本质就是将许多算法模型进行堆叠,来追求结果的精确。假设第一阶段我们将同一个数据分别输入到决策树,逻辑回归等多个算法模型中求出结果,再利用一种模型对第一阶段的结果作为新的数据来进行一个最终的求解。由于其效率低下,不是现在的主流模型。