算法梳理---004随机森林

在这个阶段,突然感觉学习是一个有意思的事情,我们在一开始阶段会经历很多无聊乏味的小日子,从不知所云开始,一点点懂得滋味,也不知道是从哪一秒开始,脑子里看到相关的书也能翻上几页了。在这个过程中很感谢一路同行的伙伴。很喜欢的一句诗是‘我们都是单独的灵魂‘’,但是在彼此碰撞之后会有绚烂的光火。

一、集成学习
集成学习,通过构建并结合多个学习器来完成学习任务。只包含有同种类型的个体学习器,这样的集成前提是‘同质’;包含不同类型的个体学习器,这样的集成式‘异质’。集成学习通过将多个学习器进行结合,泛化能力可以得到优化,一般会存在一个2%左右的能力提升。
根据学习器的生成方式不同,集成学习可以分为两类:个体学习器存在强依赖关系,必须串行生成的序列方法,以及个体学习器不存在强依赖关系。存在强依赖关系以Boosting为代表,不存在强依赖关系以Bagging和随机森林为代表。

*二、个体学习器
个体学习器就是从一个具体的算法中在训练数据中产生的,可以这么理解,我们用一种方法处理一组数据的模型就是学习器。

三、boosting bagging
Boosting
Boosting是一族可将弱学习器提升为强学习器的算法.关于Boosting的两个核心问题:

1)在每一轮如何改变训练数据的权值或概率分布?
通过提高那些在前一轮被弱分类器分错样例的权值,减小前一轮分对样本的权值,而误分的样本在后续受到更多的关注.

2)通过什么方式来组合弱分类器?
通过加法模型将弱分类器进行线性组合,比如AdaBoost通过加权多数表决的方式,即增大错误率小的分类器的权值,同时减小错误率较大的分类器的权值.
而提升树通过拟合残差的方式逐步减小残差,将每一步生成的模型叠加得到最终模型

Bagging (bootstrap aggregating)
Bagging即套袋法,其算法过程如下:
1)从原始样本集中抽取训练集.每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中).共进行k轮抽取,得到k个训练集.(k个训练集相互独立)
2)每次使用一个训练集得到一个模型,k个训练集共得到k个模型.(注:根据具体问题采用不同的分类或回归方法,如决策树、神经网络等)
3)对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果.
3、Bagging,Boosting二者之间的区别

Bagging和Boosting的区别:

1)样本选择上:
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的.
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化.而权值是根据上一轮的分类结果进行调整.
2)样例权重:
Bagging:使用均匀取样,每个样例的权重相等
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大.
3)预测函数:
Bagging:所有预测函数的权重相等.
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重.
4)并行计算:
Bagging:各个预测函数可以并行生成
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果.
ps(随机森林是没有接触过的,第二部分内容主要是从别人博客摘选的)
https://www.cnblogs.com/dudumiaomiao/p/6361777.html

四、组合策略
为什么要结合学习器:(1)统计方面,由于假设空间往往很大,可能有多个假设在训练集上达到同等性能。此时若使用单学习器可能因误选导致泛化性能不佳;(2)计算方面,单个学习算法容易陷入局部极小;(3)表示方面,某些学习任务的真实假设可能不在当前学习算法的假设空间,此时使用多个学习器扩大假设空间。

关于集成学习的组合策略,常用的有平均法,投票法,学习法。在不同的应用场景会有不同选择。用一定的手段学习出多个分类器,而且这多个分类器要求是弱分类器,然后将多个分类器进行组合公共预测。核心思想就是如何训练处多个弱分类器以及如何将这些弱分类器进行组合,个体分类器应该“好而不同”。
平均法:
对于数值型输出应用较多的是平均法,一般思路有两种简单平均和加权平均,一般的话,个体学习器性能相近的话用简单平均就好,如果性能差异较大就需要用加权平均法。

投票法
多用于分类的情况,绝对多数(超过半数标记。否则拒绝预测),相对多数,加权投票)。

学习法
通过另一个学习器来进行结合,Stacking算法:先从初始数据集训练出初级学习器,然后生成一个新数据集用于训练次级学习器。在这个新数据集中,初级学习器的输出被当作样例输入特征,而出事样本的标记仍被当作样例标记。

五、随机森林思想
随机森林可以理解为Cart树森林,它是由多个Cart树分类器构成的集成学习模式。其中每个Cart树可以理解为一个议员,它从样本集里面随机有放回的抽取一部分进行训练,这样,多个树分类器就构成了一个训练模型矩阵,可以理解为形成了一个议会吧。
然后将要分类的样本带入这一个个树分类器,然后以少数服从多数的原则,表决出这个样本的最终分类类型。
设有N个样本,M个变量(维度)个数,该算法具体流程如下:

  1. 确定一个值m,它用来表示每个树分类器选取多少个变量。(注意这也是随机的体现之一)
  2. 从数据集中有放回的抽取 k 个样本集,用它们创建 k 个树分类器。另外还伴随生成了 k 个袋外数据,用来后面做检测。
  3. 输入待分类样本之后,每个树分类器都会对它进行分类,然后所有分类器按照少数服从多数原则,确定分类结果。

六、优缺点
随机森林有许多优点:
1) 训练可以高度并行化,对于大数据时代的大样本训练速度有优势。
2) 由于可以随机选择决策树节点划分特征,这样在样本特征维度很高的时候,仍然能高效的训练模型。
3) 在训练后,可以给出各个特征对于输出的重要性
4) 由于采用了随机采样,训练出的模型的方差小,泛化能力强。
5) 相对于Boosting系列的Adaboost和GBDT, RF实现比较简单。
6) 对部分特征缺失不敏感。
随机森林的缺点:
当随机森林中的决策树个数很多时,训练时需要的空间和时间会较大
1)在某些噪音比较大的样本集上,RF模型容易陷入过拟合。
2) 取值划分比较多的特征容易对RF的决策产生更大的影响,从而影响拟合的模型的效果。

七、随机森林推广
由于RF在实际应用中的良好特性,基于RF,有很多变种算法,不仅仅可以用于分类回归,还可以用于特征转换,异常点检测等。

extra trees
是RF的一个变种, 原理几乎和RF一模一样,仅有区别有:
1) 对于每个决策树的训练集,RF采用的是随机采样bootstrap来选择采样集作为每个决策树的训练集,而extra trees一般不采用随机采样,即每个决策树采用原始训练集。
2) 在选定了划分特征后,RF的决策树会基于基尼系数,均方差之类的原则,选择一个最优的特征值划分点,这和传统的决策树相同。但是extra trees比较的激进,他会随机的选择一个特征值来划分决策树。
从第二点可以看出,由于随机选择了特征值的划分点位,而不是最优点位,这样会导致生成的决策树的规模一般会大于RF所生成的决策树。也就是说,模型的方差相对于RF进一步减少,但是偏倚相对于RF进一步增大。在某些时候,extra trees的泛化能力比RF更好。

Totally Random Trees Embedding(以下简称 TRTE)是一种非监督学习的数据转化方法。它将低维的数据集映射到高维,从而让映射到高维的数据更好的运用于分类回归模型。我们知道,在支持向量机中运用了核方法来将低维的数据集映射到高维,此处TRTE提供了另外一种方法。
TRTE在数据转化的过程也使用了类似于RF的方法,建立T个决策树来拟合数据。当决策树建立完毕以后,数据集里的每个数据在T个决策树中叶子节点的位置也定下来了。比如我们有3颗决策树,每个决策树有5个叶子节点,某个数据特征xx划分到第一个决策树的第2个叶子节点,第二个决策树的第3个叶子节点,第三个决策树的第5个叶子节点。则x映射后的特征编码为(0,1,0,0,0, 0,0,1,0,0, 0,0,0,0,1), 有15维的高维特征。这里特征维度之间加上空格是为了强调三颗决策树各自的子编码。映射到高维特征后,可以继续使用监督学习的各种分类回归算法了。

Isolation Forest(以下简称IForest)是一种异常点检测的方法。它也使用了类似于RF的方法来检测异常点。
对于在T个决策树的样本集,IForest也会对训练集进行随机采样,但是采样个数不需要和RF一样,对于RF,需要采样到采样集样本个数等于训练集个数。但是IForest不需要采样这么多,一般来说,采样个数要远远小于训练集个数?为什么呢?因为我们的目的是异常点检测,只需要部分的样本我们一般就可以将异常点区别出来了。
对于每一个决策树的建立, IForest采用随机选择一个划分特征,对划分特征随机选择一个划分阈值。这点也和RF不同。
另外,IForest一般会选择一个比较小的最大决策树深度max_depth,原因同样本采集,用少量的异常点检测一般不需要这么大规模的决策树。
对于异常点的判断,则是将测试样本点xx拟合到T颗决策树。计算在每颗决策树上该样本的叶子节点的深度ht(x)ht(x)。,从而可以计算出平均高度h(x)。此时我们用下面的公式计算样本点xx的异常概率:
s(x,m) = 2^{-\frac {h(x)} {c(m)} }
其中,m为样本个数。c(m)c(m)的表达式为:
c(m) =2\ln(m-1) + \xi - 2\frac{m-1}{m}, ; \xi为欧拉常数
s(x,m)的取值范围是[0,1],取值越接近于1,则是异常点的概率也越大

八、sklearn参数
n_estimators=10:决策树的个数,越多越好,但是性能就会越差,至少100左右(具体数字忘记从哪里来的了)可以达到可接受的性能和误差率。

bootstrap=True:是否有放回的采样。

oob_score=False:oob(out of band,带外)数据,即:在某次决策树训练中没有被bootstrap选中的数据。多单个模型的参数训练,我们知道可以用cross validation(cv)来进行,但是特别消耗时间,而且对于随机森林这种情况也没有大的必要,所以就用这个数据对决策树模型进行验证,算是一个简单的交叉验证。性能消耗小,但是效果不错。

n_jobs=1:并行job个数。这个在ensemble算法中非常重要,尤其是bagging(而非boosting,因为boosting的每次迭代之间有影响,所以很难进行并行化),因为可以并行从而提高性能。1=不并行;n:n个并行;-1:CPU有多少core,就启动多少job。

warm_start=False:热启动,决定是否使用上次调用该类的结果然后增加新的。

class_weight=None:各个label的权重。

九、应用场景
严格来说,随机森林其实算是一种集成算法。它首先随机选取不同的特征(feature)和训练样本(training sample),生成大量的决策树,然后综合这些决策树的结果来进行最终的分类。
随机森林在现实分析中被大量使用,它相对于决策树,在准确性上有了很大的提升,同时一定程度上改善了决策树容易被攻击的特点。
适用情景:
数据维度相对低(几十维),同时对准确性有较高要求时。
因为不需要很多参数调整就可以达到不错的效果,基本上不知道用什么方法的时候都可以先试一下随机森林。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值