50字范文,内容丰富有趣,生活中的好帮手!
50字范文 > 从随机森林到极端随机森林 再到深度森林

从随机森林到极端随机森林 再到深度森林

时间:2023-05-10 22:04:35

相关推荐

从随机森林到极端随机森林 再到深度森林

随机森林

再介绍随机森林之前有必要介绍下集成算法的一些理论

集成学习算法本身不算一种单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务。可以说是集百家之所长,能在机器学习算法中拥有较高的准确率,不足之处就是模型的训练过程可能比较复杂,效率不是很高。

目前常见的集成学习算法主要有2种:基于Bagging的算法和基于Boosting的算法,基于Bagging的代表算法有随机森林,而基于Boosting的代表算法则有Adaboost、GBDT、XGBOOST等。

Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法。即将弱分类器组装成强分类器的方法。(我们要说的随机森林就是Bagging的方法,也叫套袋法或者装袋法)

Bagging算法是bootstrap aggregating的缩写,它主要对样本训练集合进行随机化抽样,通过反复的抽样训练新的模型,最终在这些模型的基础上取平均。

bagging的算法过程

从原始样本集中使用Bootstraping方法随机抽取n个训练样本,共进行k轮抽取,得到k个训练集。(k个训练集之间相互独立,元素可以有重复)

对于k个训练集,我们训练k个模型(这k个模型可以根据具体问题而定,比如决策树,knn等)

对于分类问题:由投票表决产生分类结果;对于回归问题:由k个模型预测结果的均值作为最后预测结果。(所有模型的重要性相同)

bagging就是并联的思想,如下图:

Boosting(提升法)

boosting的算法过程如下:

对于训练集中的每个样本建立权值wi,表示对每个样本的关注度。当某个样本被误分类的概率很高时,需要加大对该样本的权值。

进行迭代的过程中,每一步迭代都是一个弱分类器。我们需要用某种策略将其组合,作为最终模型。(例如AdaBoost给每个弱分类器一个权值,将其线性组合最为最终分类器。误差越小的弱分类器,权值越大)

boosting就是串联的思想,举个例子:

比如实际一个人的最终的借款金额是10000元,我们根据一些变量去预测,就是每一次根据预测误差再去改善提升准确率

Bagging,Boosting的主要区别

样本选择上:Bagging采用的是Bootstrap随机有放回抽样;而Boosting每一轮的训练集是不变的,改变的只是每一个样本的权重。

样本权重:Bagging使用的是均匀取样,每个样本权重相等;Boosting根据错误率调整样本权重,错误率越大的样本权重越大。

预测函数:Bagging所有的预测函数的权重相等;Boosting中误差越小的预测函数其权重越大。

并行计算:Bagging各个预测函数可以并行生成;Boosting各个预测函数必须按顺序迭代生成。

下面是将决策树与这些算法框架进行结合所得到的新的算法:

1)Bagging+ 决策树 =随机森林

2)AdaBoost+ 决策树 =提升树

3)GradientBoosting + 决策树 =GBDT

PS:集成算法里面还有一个比较厉害的就是Stacking模型,

Stacking:聚合多个分类或回归模型,就是堆叠算法,可以堆叠各种各样的分类器(KNN,SVM,RF等等) ;

分两个阶段:第一阶段得出各自结果,第二阶段再用前一阶段结果训练

说白了就是用多种模型训练,再把多种训练的结果当作样本再来训练一遍。

随机森林(Random Forests)

首先介绍下随机森林:

随机森林是一种重要的基于Bagging的集成学习方法,可以用来做分类、回归等问题。

随机森林由LeoBreiman(2001)提出,从原始训练样本集N中有放回地重复随机抽取k个样本生成新的训练样本集合,然后根据自助样本集生成k个分类树组成随机森林,新数据的分类结果按分类树投票多少形成的分数而定。其实质是对决策树算法的一种改进,将多个决策树合并在一起,每棵树的建立依赖于一个独立抽取的样品,森林中的每棵树具有相同的分布,分类误差取决于每一棵树的分类能力和它们之间的相关性。特征选择采用随机的方法去分裂每一个节点,然后比较不同情况下产生的误差。能够检测到的内在估计误差、分类能力和相关性决定选择特征的数目。单棵树的分类能力可能很小,但在随机产生大量的决策树后,一个测试样品可以通过每一棵树的分类结果经统计后选择最可能的分类。

过程
从训练数据中选取n个数据作为训练数据输入,一般情况下n是远小于整体的训练数据N的,这样就会造成有一部分数据是无法被取到的,这部分数据称为袋外数据,可以使用袋外数据做误差估计。选取了输入的训练数据的之后,需要构建决策树,具体方法是每一个分裂结点从整体的特征集M中选取m个特征构建,一般情况下m远小于M。在构造每棵决策树的过程中,按照选取最小的基尼指数进行分裂节点的选取进行决策树的构建。决策树的其他结点都采取相同的分裂规则进行构建,直到该节点的所有训练样例都属于同一类或者达到树的最大深度。重复第2步和第3步多次,每一次输入数据对应一颗决策树,这样就得到了随机森林,可以用来对预测数据进行决策。输入的训练数据选择好了,多棵决策树也构建好了,对待预测数据进行预测,比如说输入一个待预测数据,然后多棵决策树同时进行决策,最后采用多数投票的方式进行类别的决策。

说白了,随机森林的随机主要是两个方面,一个是随机有放回的抽取样本,一个是随机选取特征变量

总结

随机森林有许多优点

•具有极高的准确率

•随机性的引入,使得随机森林不容易过拟合

•随机性的引入,使得随机森林有很好的抗噪声能力

•能处理很高维度的数据,并且不用做特征选择

•既能处理离散型数据,也能处理连续型数据,数据集无需规范化

•训练速度快,可以得到变量重要性排序

•容易实现并行化

随机森林的缺点

•当随机森林中的决策树个数很多时,训练时需要的空间和时间会较大

•随机森林模型还有许多不好解释的地方,有点算个黑盒模型

极端随机森林

极端随机森林同样是一种多棵决策树集成的分类器,与随机森林分类器比较,主要有两点不同:

对于每个决策树的训练集,RF采用的是随机采样bootstrap来选择采样集作为每个决策树的训练集,而extra tree一般不采用随机采样,即每个决策树采用原始训练集。RandomForest应用的是Bagging模型,ExtraTree使用的所有的样本,只是特征是随机选取的,因为分裂是随机的,所以在某种程度上比随机森林得到的结果更加好.

在选定了划分特征后,RF的决策树会基于信息增益,基尼系数,均方差之类的原则,选择一个最优的特征值划分点,这和传统的决策树相同。但是Extra tree比较的激进,会随机的选择一个特征值来划分决策树。

从第二点可以看出,由于随机选择了特征值的划分点位,而不是最优点位,这样会导致生成的决策树的规模一般会大于RF所生成的决策树。也就是说,模型的方差相对于RF进一步减少,但是bias相对于RF进一步增大。在某些时候,Extra tree的泛化能力比RF更好.

一般情况下,

极端随机森林分类器在分类精度和训练时间等方面都要优于随机森林分类器。

孤立森林

iForest(IsolationForest)孤立森林是一个基于Ensemble的快速异常检测方法,具有线性时间复杂度和高精准度,是符合大数据处理要求的state-of-the-art算法。

其可以用于网络安全中的攻击检测,金融交易欺诈检测,疾病侦测,和噪声数据过滤等。

iForest 适用与连续数据的异常检测,将异常定义为“容易被孤立的离群点 ”——可以理解为分布稀疏且离密度高的群体较远的点。用统计学来解释,在数据空间里面,分布稀疏的区域表示数据发生在此区域的概率很低,因而可以认为落在这些区域里的数据是异常的。

iForest即不用定义数学模型也不需要有标记的训练。对于如何查找哪些点是否容易被孤立,iForest使用了一套非常高效的策略。

假设我们用一个随机超平面来切割数据空间, 切一次可以生成两个子空间。之后我们再继续用一个随机超平面来切割每个子空间,循环下去,直到每子空间里面只有一个数据点为止。直观上来讲,我们可以发现那些密度很高的簇是可以被切很多次才会停止切割,但是那些密度很低的点很容易很早的就停到一个子空间了。

上图里面红色的点就很容易被切几次就停到一个子空间,而白色点和绿色点聚集的地方可以切很多次才停止。

怎么来切这个数据空间是iForest的设计核心思想,我们仅介绍最基本的方法。由于切割是随机的,所以需要用ensemble的方法来得到一个收敛值(蒙特卡洛方法),即反复从头开始切,然后平均每次切的结果。iForest由t个iTree(Isolation Tree)孤立树 组成,每个iTree是一个二叉树结构,其实现步骤如下:

从训练数据中随机选择ΨΨΨ个点样本点作为子样本,放入树的根节点。随机指定一个维度,在当前节点数据中随机产生一个切割点p——切割点产生于当前节点数据中指定维度的最大值和最小值之间。以此切割点生成了一个超平面,然后将当前节点数据空间划分为2个子空间:把指定维度里小于p的数据放在当前节点的左边,把大于等于p的数据放在当前节点的右边。在子节点中递归步骤2和3,不断构造新的子节点,直到子节点中只有一个数据(无法再继续切割)或子节点已到达限定高度。

获得t个iTree之后,iForest训练就结束,然后我们可以用生成的iForest来评估测试数据了。对于一个训练数据x,我们令其遍历每一棵iTree,然后计算x最终落在每个树第几层(x在树的高度)。然后我们可以得出x在每棵树的高度平均值。

获得每个测试数据的高度平均值后,我们可以设置一个阈值(边界值),高度平均值低于此阈值的测试数据即为异常。也就是说异常在这些树中只有很短的平均高度。

可以看到b\c的高度是3,a的高度是2,d的高度是1,所以d很有可能是异常值,因为它最早就被孤立了

iForest目前在分类聚类和异常检测中都取得显著效果,但是孤立森林也有自身的缺点:

iForest仅对全局稀疏点敏感,不擅长处理局部的相对稀疏点;iForest不适用于特别高维的数据。由于每次切数据空间都是随机选取一个维度,建完树后仍然有大量的维度信息没有被使用,导致算法可靠性降低。高维空间还可能存在大量噪音维度或无关维度(irrelevant attributes),影响树的构建。iForest属于无监督问题,这是区别于其他森林系的。所以iForest预测结果为异常值的样本需要进行人工检查。比如:我们用的样本数据是城市个维度的数据,最终检查的结果是北上广深发达城市和西北的一些落后城市,也就是说iForest只能检查出异常,但是不能区分异常的好坏。所以大家运用的时候还要谨慎。

深度森林

深度森林(Deep Forest)是周志华教授和冯霁博士在2月28日发表的论文《Deep Forest: Towards An Alternative to Deep Neural Networks》中提出来的一种新的可以与深度神经网络相媲美的基于树的模型,其结构如图所示。

级联森林

上图表示gcForest的级联结构。

每一层都由多个随机森林组成。通过随机森林学习输入特征向量的特征信息,经过处理后输入到下一层。为了增强模型的泛化能力,每一层选取多种不同类型的随机森林,上图给了两种随机森林结构,分别为completely-random tree forests(蓝色)和random forests(黑色),每种两个。其中,每个completely-random tree forests包含1000棵树,每个节点通过随机选取一个特征作为判别条件,并根据这个判别条件生成子节点,直到每个叶子节点只包含同一类的实例而停止;每个random forests同样包含1000棵树,节点特征的选择通过随机选择d\sqrt dd​个特征(d为输入特征的数量),然后选择基尼系数最大特征作为该节点划分的条件。

级联森林的迭代终止条件:迭代到效果不能提升就停止!!!

级联森林中每个森林是如何决策的呢?

每个森林中都包括好多棵决策树,每个决策树都会决策出一个类向量结果(以3类为例,下面也是),然后综合所有的决策树结果,再取均值,生成每个森林的最终决策结果——一个3维类向量!每个森林的决策过程如下图所示。

这样,每个森林都会决策出一个3维类向量,回到图1中,级联森林中的4个森林就都可以决策出一个3维类向量,然后对4个*3维类向量取均值,最后取最大值对应的类别,作为最后的预测结果!

为降低过拟合风险,每个森林产生的类向量由k折交叉验证产生,即每个样本会被训练k-1次,产生k-1个类向量,然后对其求平均值,以产生作为级联中下一级的增强特征的最终类向量。需要注意的是,在扩展一个新的级后,整个级联的性能将在验证集上进行评估,如果没有显著的性能增益,则训练过程终止。因此,级联中级的数量是自动确定的。与模型的复杂度固定的大多数神经网络相反,gcForest能够适当的终止训练来决定其模型的复杂度。所以gcForest适用于不同规模的训练数据。

多粒度扫描

多粒度扫描是为了增强级联森林,为了对特征做更多的处理的一种技术手段,具体扫描过程如下图所示。

上图表示对输入特征使用多粒度扫描的方式产生级联森林的输入特征向量。

对于400维的序列数据,采用100维的滑动窗对输入特征进行处理,得到301(400 - 100 + 1)个100维的特征向量。对于20×20的图像数据,采用10×10的滑动窗对输入特征进行处理,得到121((20-10+1)*(20-10+1))个10×10的二维特征图。然后将得到的特征向量(或特征图)分别输入到一个completely-random tree forest和一个random forest中(不唯一,也可使用多个森林),以三分类为例,会得到301(或121)个3维类分布向量,将这些向量进行拼接,得到1806(或726)维的特征向量。

第一步:使用多粒度扫描对输入特征进行预处理。以使用三个尺寸的滑动窗为例,分别为100-dim,200-dim和300-dim。输入数据为400-dim的序列特征,使用100-dim滑动窗会得到301个100-dim向量,然后输入到一个completely-random tree forest和一个random forest中,两个森林会分别得到的301个3-dim向量(3分类),将两个森林得到的特征向量进行拼接,会得到1806-dim的特征向量。同理,使用200-dim和300-dim滑动窗会分别得到1206-dim和606-dim特征向量。

第二步:将得到的特征向量输入到级联森林中进行训练。首先使用100-dim滑动窗得到的1806-dim特征向量输入到第一层级联森林中进行训练,得到12-dim的类分布向量(3分类,4棵树)。然后将得到的类分布向量与100-dim滑动窗得到的特征向量进行拼接,得到1818-dim特征向量,作为第二层的级联森林的输入数据;第二层级联森林训练得到的12-dim类分布向量再与200-dim滑动窗得到的特征向量进行拼接。作为第三层级联森林的输入数据;第三层级联森林训练得到的12-dim类分布向量再与300-dim滑动窗得到的特征向量进行拼接,做为下一层的输入。一直重复上述过程,直到验证收。

相比深度神经网络,gcForest有如下若干有点:

容易训练,计算开销小天然适用于并行的部署,效率高超参数少,模型对超参数调节不敏感,并且一套超参数可使用到不同数据集可以适应于不同大小的数据集,模型复杂度可自适应伸缩每个级联的生成使用了交叉验证,避免过拟合在理论分析方面也比深度神经网络更加容易。

代码

https://mp./s/bz_yYD4zvFQ0J-y0ce5E7A

/Andy_shenzl/article/details/105683388

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。