个人总结:从 决策树 到 随机森林

关于决策树的一些可能需要了解的知识点,在个人总结:决策树中有所涉猎。

谈到随机森林,就需要了解bagging,而谈到bagging,就需要了解集成学习。

集成学习:构建并租个多个学习器来完成任务。获得比单一学习器更优越的性能。

两种选择:

  • 同质:比如都是决策树个体学习器,都是神经网络个体学习器。

    同质也可分为两类:

  1. 个体学习器之间存在强依赖关系,一系列个体学习器串行生成,代表算法boosting系列
  2. 不存在强依赖关系,可以并行生成,代表算法是bagging和Random Forest
  • 异质:采用支持向量机个体学习器,逻辑回归个体学习器和朴素贝叶斯个体学习器,再通过某种结合策略来确定最终的分类强学习器。

从决策树到随机森林

Bagging:

首先来谈谈Bagging:Bagging就是对训练集进行采集,生成多个子训练集,再从每个子训练集训练一个基学习器,在预测阶段将各个基学习器进行结合。

随机采样bootstrap,“随机”体现点一)就是从训练集里采集固定个数的样本,但是每采集一个样本后,都将样本放回。也就是说,之前采集到的样本在放回后有可能被继续采集到。比如说 ,对含有m个样本的训练集做m次随机采样,在每次采样过后都将样本放回训练集。这样最后生成的采样集合中,初始样本集中某些样本可能出现多次,某些可能从未出现。

如何计算不同的样本的数量的期望呢?也就是说假设从N个样本中采样K个样本,求不同样本数量的期望,求E(K)。

首先,显然有E(1) = 1,因为一个样本采样出来肯定是独一无二的。其次,设从N个样本中采样K-1个样本不同数量的样本期望为E(K-1),则第k个样本是未曾抽到的样本的概率为p(K)=1-\frac{E(K-1)}{N}

所以可以得到E(K) = E(K-1) +1*p(K)= E(K-1)+1-\frac{E(K-1)}{N}

E(K) =1+\frac{(N-1)E(K-1)}{N}=1+\frac{N-1}{N}+\left ( \frac{N-1}{N} \right )^{2} + \cdots +\left ( \frac{N-1}{N} \right )^{K-1}=N(1-\left ( \frac{N-1}{N}\right )^{K} )

对某一样本在m次采样始终没被采集到的概率是 (1 - 1/m)^m,做一个极限可得

\lim_{m \mapsto \infty }(1 - \frac{1}{m}) ^{m} \mapsto \frac{1}{e} \approx 0.368,所以大概有63.2%的原始数据会出现在采集集合中。而没有采集到的这部分数据,称为袋外数据(Out Of Bag,OOB),这部分数据作为验证集来检测模型的泛化能力。

预测结合:

在对分类进行预测时,采用简单的投票法(最多票数的标签作为最终输出);对回归进行预测时,采用简单平均法。

因为泛化能力强,能有效降低模型的方差。

随机森林

随机森林使用CART决策树作为弱学习器。在决策树的基础上,进行了改进,而这也是随机森林相对于普通的决策树bagging的区别:对于普通的决策树,会在节点的n个特征中选择最优的特征做划分,但是RF通过随机选择节点上一部分样本特征(“随机”体现点二),这个数字小于n,假设n_sub,选择一个最优的特征来做决策树的左右子树划分。这样进一步增强模型的泛化能力。同时,这样来看,随机森林在相同的外部条件下,会比bagging的训练效率更优。

如果n_sub=n,则此时RF的CART决策树和普通决策树没有区别。n_sub越小,模型越健壮,当然对于训练集的拟合程度会变差。实际中,通过交叉验证得到一个合适的n_sub,一般情况下,推荐n_sub=log2(n)。

随机森林的特征重要性

1. 使用基尼系数

GI代表节点m上的基尼系数,重要性VIM代表分枝为左右子树后的Gini指数变化量。

2. 使用袋外数据(OOB)

计算某个特征重要性时:

对于一棵树Ti。用OOB样本可得到误差e1,然后随机改变OOB中的第j列(第j个特征),保持其他列不变,对第j列进行随机的上下置换,得到误差e2。至此,可用 e1-e2来刻画特征j的重要性,其依据就是,如果一个特征很重要,那么其变动后会非常影响测试误差,如果测试误差没有怎么改变,说明特征j不重要。

随机森林调参

RF需要调参的参数包括两部分,第一部分是Bagging框架的参数,第二部分是CART决策树的参数。

1、Bagging框架的参数

  • n_estimators : 弱学习器的最大迭代次数,或者说是弱学习器的个数。一般来说,该值太小容易欠拟合,太大会导致计算量过大,并且n_estimators到达一定数量后,再获得提升的可能性很小。一般选择的值是100。
  • oob_score:即是否采用袋外样本来评估模型好坏,默认是false。建议设置为True,因为袋外分数反应了一个模型拟合后的泛化能力。
  • criterion:即CART树做划分时对特征的评价标准。分类对应的CART分类树默认的是基尼系数,另一个可选择的是信息增益。回归对应的是均方差mse,另一个可选择的是绝对差mae

2、决策树参数

  • max_features(重要):RF划分时考虑的最大特征数,默认是“auto”,假设一共有N个特征,意味划分时最多考虑\sqrt{N}个特征;如果是“log2”意味着划分时最多考虑log_{2}N个特征;如果是“sqrt”或者“auto”意味着划分时最多考虑\sqrt{N}个特征。如果是整数,代表考虑的特征绝对数。如果是浮点数,代表考虑特征百分比。一般用默认的“auto”。在特征数量非常多的情况下,可以考虑使用其他设置。
  • max_depth(重要): 决策树最大深度。如果不输入的话,决策树在建立的时候不会限制深度。如果特征过多,样本量也过多,推荐使用这个参数防止过拟合,常用的值可以取10-100之间。
  • min_samples_splilt(重要): 这个值限制节点继续分裂的阈值。如果某节点样本数少于min_samples_split,则不会再继续尝试选择最优特征来划分。默认是2,如果样本量不大,不需要管这个值。如果样本量非常大,推荐增加这个值。
  • min_samples_leaf(重要): 叶子节点最小样本数。如果小于这个值,则会和兄弟节点一起被剪枝。默认是1。如果样本量非常大,推荐增加这个值。(和上面那个参数的区别在于,小于设置的值,不仅不分裂了,还会被剪枝)。
  • min_weight_fraction_leaf:这个值限制了所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。默认是0。一般来说,如果有较多样本有缺失值,或者分类树样本类别偏差很大,就会引入样本权重,这时就需要注意该参数。
  • max_leaf_nodes: 通过限制最大叶子节点数,可防止过拟合。默认是“none”,即不限制最大叶子节点数。若加限制,会限制建立最大叶子节点数最优的决策树,如果特征不多,可以不考虑这个值,如果特征分成多,可加以限制,具体可通过交叉验证来确定。
  • min_impurity_split:该值限制决策树增长,如果某节点不纯度(基尼系数,均方差)小于这个阈值,则该节点不再生产子节点。即为叶子节点。默认值为1e-7,不推荐改动。

随机森林的一些推广

extra trees

相对于随机森林采用bootstrap来选择采样子集,该extra trees直接使用原始训练集。

相对于随机森林内部的CART树采用基尼系数或者均方差来选择最优特征和划分点,extra trees直接随机选择一个特征值来划分决策树。

带来的优势:可能导致模型的方差相对于RF进一步减少,但是偏倚增大。某些时候可能泛化能力更好。

totally random trees embedding

该方法是一种将低维的数据转化到高维的非监督数据转化方法。比如有三棵决策树,每棵树有5个叶子,某个样本数据x掉到第一棵树的第一个叶子节点,掉到第二棵树的第三个节点,第三棵树的第五个节点,则映射后的编码为(0,1,0,0,0,  0,0,1,0,0,  0,0,0,0,1),有15维特征。映射到高维特征后,可以继续使用监督学习的各种分类回归方法。

随机森林小结

主要优势:

  1. 训练高度并行化,对于大数据时代的大样本训练速度有优势。
  2. 由于随机选择一部分特征训练,而不是全部特征,在特征维度高的情况下仍然能高效训练。
  3. 可以给出各个特征对于输出的重要性。
  4. 模型方差小,泛化能力强。
  5. 相比Adaboost和GBDT,RF实现简单。
  6. 对部分特征缺失不敏感。

主要劣势:

  1. 在噪音大的样本集,容易过拟合。
  2. 取值划分比较多特征容易对RF的决策产生更大影响,从而影响拟合的模型效果。
发布了94 篇原创文章 · 获赞 137 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/yyhhlancelot/article/details/90512551
今日推荐