树系列(二)随机森林

问题提出

想象一下,一棵树想要达到很高的正确率,那么决策树采取的一种手段是增大树的深度,让树变得更加庞大,这样树的分支就会越来越多,把这种情况推向极限的话,一棵树的每个叶子节点中只包含一个数据,那么当构造完树后每个数据在树上运行的时候是肯定会落入正确的叶节点中,这个时候树的每条路径都是为某一个数据私人订制的,这样的模型就过拟合了,因为泛化能力太差。为了避免这种情况的发生,这里提出随机森林的概念。

Bagging

介绍随机森林之前的一个重要环节是介绍Bagging(bootstrap sampling),所谓Bagging,就是给定包含m个样本的数据集,随机取出一个样本,放入采样集,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,重复上述过程,得到一个含有m个样本的采样机,经过公式证明,有 63.2 % 63.2\% 63.2%的初始数据被放入了采样集中,而后得到T个含有m个样本的采样机,而后基于每个采样集都训练出一个基学习器,再将所有的学习器进行结合,只是Bagging的核心内容,测试时用投票或者加权平均的方法进行预测。

Bagging有一个很大的优点,由于每个基学习器只使用了初始训练集中 63.2 % 63.2\% 63.2%的数据, 剩下的样本可以用作验证集来对学习器的泛化能力进行"包外预测"(OOB), 设 D t D_t Dt表示每个基学习器 h t h_t ht使用的训练样本,令 H o o b ( x ) H^{oob}(x) Hoob(x)表示对x的包外预测,有

H o o b ( x ) = a r g m a x y ∈ Y ∑ t = 1 T I ( h t ( x ) = y ) ∗ I ( x ∉ D t ) H^{oob}(x)=argmax_{y\in Y}\sum_{t=1}^{T}I(h_t(x)=y)*I(x\notin D_t) Hoob(x)=argmaxyYt=1TI(ht(x)=y)I(x/Dt)
则Bagging的泛化误差的包外估计为如下公式,即可以得到模型的泛化能力,即对抗过拟合的能力。

ϵ o o b = 1 ∣ D ∣ ∑ ( x , y ) ∈ D I ( H o o b ≠ y ) \epsilon ^{oob}=\frac{1}{|D|}\sum_{(x,y)\in D}I(H^{oob}\neq y) ϵoob=D1(x,y)DI(Hoob=y)

核心思想

随机森林的核心思想有两点:随机森林

森林

好多个决策树被放到一起共同完成分类任务,对于每一个输入数据,森林中的每个决策树都会对应着一个分类结果,把所有分类结果综合在一起得到最终的分类结果。

现在就面临一个问题,如果每棵树所用到的训练集都相同,那么每棵树得到的结果是一致的,那么其实就是在训练一棵树,如果每棵树用到的训练集完全没有交集的话,那就变成了众说纷纭,其实最终得到的分类结果可信度也不高,这个时候就体现了第二个思想的重要性。

随机

这里随机分为两个方面,一方面针对数据集,用到的技术是Bagging,就是对于所有的树,每棵树的训练集都和原始数据集一样大,树之间的训练集有交集,但又不完全相同,这就保证了所有树得到的结果综合在一起更加有说服力。

另一方面针对属性集,这里着重讲述属性集的随机性,在随机森林中是这一个可选项,基于来自维基百科属性集随机性的讲解,随机森林属性集的随机性如下: 森林中每棵树都只随机的选择属性集中的一部分属性进行训练,因而森林中的每棵树都不会全都关注某些有很强预测性的属性上面,想像一下,如果属性集中存在属性子集 A A A训练集标签的分布是一样的,那么无论每棵树的训练集如何不同,每棵树选择属性时都会选择 A A A中的一部分属性作为分裂节点,因为这些属性最具有代表性,那么这样模型过拟合的风险就会很大,但如果每棵树都随机的从属性集中抽取一部分属性进行训练,这样 A A A中的属性有可能没有被选到,因而过拟合的风险就不会太大,基于这个特点,如果属性集的维度大于数据集维度,添加属性集的随机性进行学习效果就会更好,因为每棵树选择的特征都不尽相同,训练出的模型更具普适性。

属性集的随机性的第二个好处是在每棵树属性选择的时候体现的,假设两个属性 A 1 A_1 A1 A 2 A_2 A2彼此相关,这时 A 1 A_1 A1 A 2 A_2 A2对于训练集来说同等重要,树根据信息增益选择了 A 1 A_1 A1后, A 2 A_2 A2的信息增益一定会变得很小,因为 A 1 A_1 A1 A 2 A_2 A2所引起的不确定度是同一个不确定度,确定了 A 1 A_1 A1后那么这个不确定度就没有了,确定 A 2 A_2 A2后数据集的不确定性不会再减小了,因而造成的结果就是虽然说 A 1 A_1 A1 A 2 A_2 A2同等重要,但是所有的树每次选择 A 1 A_1 A1后就不会选择 A 2 A_2 A2了,(当然如果事先做好特征选择这种情况就不会发生,因为在进行学习之前 A 1 A_1 A1 A 2 A_2 A2中的一个就已经被剔除出去了,但衡量属性的重要性的时候就出现问题)而属性的随机性能够很好地解决这个问题,因为每棵树都有可能选择 A 1 A_1 A1 A 2 A_2 A2,因而 A 2 A_2 A2的重要性不会被 A 1 A_1 A1隐藏起来

拓展之KNN

对于训练集 T = { ( x 1 , y 1 ) , . . . , ( x N , y N ) } T=\{(x_1, y_1), ..., (x_N, y_N)\} T={(x1,y1),...,(xN,yN)}, 预测 x x x的target公式为:

y ^ = ∑ i = 1 n W ( x i , x ) y i \hat{y}=\sum_{i=1}^{n}W(x_i,x)y_i y^=i=1nW(xi,x)yi

在KNN中 W ( x i , x ) = 1 k W(x_i,x)=\frac{1}{k} W(xi,x)=k1,当 x i x_i xi和x很近,如果 x i x_i xi和x很远时, W ( x i , x ) = 0 W(x_i,x)=0 W(xi,x)=0,在决策树中,设 k ′ k' k为和x落到的叶节点中的样本数量, x i x_i xi和x在相同叶节点中, W ( x i , x ) = 1 k ′ W(x_i,x)=\frac{1}{k'} W(xi,x)=k1,如果不在相同叶节点中 W ( x i , x ) = 0 W(x_i,x)=0 W(xi,x)=0。而在随机森林中,结果是对m棵决策树的平均,
y ^ = 1 m ∑ j = 1 m ∑ i = 1 n W ( x i , x ) y i \hat{y}=\frac{1}{m}\sum_{j=1}^{m}\sum_{i=1}^{n}W(x_i,x)y_i y^=m1j=1mi=1nW(xi,x)yi
因而随机森林算是一种近邻加权的方法,在每棵树上x的近邻是与x落入相同叶节点的样本。

常见问题

随机森林中树的类型

CART(基尼系数)

防止过拟合手段

  1. 增加树的数量
  2. 其他常用的解决过拟合的手段

优缺点

优点:

  1. 可以给出特征重要性
  2. 模型泛化能力强
  3. 训练速度快,可以并行训练

缺点:

  1. 更倾向于将取值较多的特征标记为重要特征。

参考

  1. 随机森林github讲解
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值