stone

从决策树到随机森林
从决策树到随机森林一.决策树决策树可以看做是一堆if—then集合,这个和我们人类做判断的逻辑非常相似。能够正确分...
扫描右侧二维码阅读全文
01
2019/03

从决策树到随机森林

从决策树到随机森林

一.决策树

决策树可以看做是一堆if—then集合,这个和我们人类做判断的逻辑非常相似。
能够正确分类训练数据的决策树可能有很多个,也可能不存在。决策树学习的目的是找到一棵树,使分类结果错误最小,且泛化能力最强。决策树的学习采用启发式算法进行近似。

决策树的学习可以分为三个部分: 分裂点的选择,决策树的生成和决策树的剪枝。

在极端情况下,可以将每一个数据分配到一个叶子节点上,这样,对于训练数据来说,其效果很好,但是泛化能力极差。
对决策树进行剪枝,让一些叶子节点退化为父节点或者更高的节点,让决策树不至于过分复杂,可以有效避免过拟合。

决策树的生成对应于模型的局部选择,只考虑当前节点中数据集合的最佳分割点,而剪枝对应于模型的全局选择,看整体损失函数最小化,考虑全局最优。

在得到一颗决策树的情况下,数据x属于类别y的概率等于其所属叶子点中,类别y占所有数据的概率。

决策树的主要学习方法: ID3,C4.5,CART

1. 特征的选择

1. 1 信息增益

熵是对信息不确定性的度量,其本质上式信息论里的互信息,在使用中,计算集合在已知条件A的情况下集合D的熵变化。对于随机变量X,其熵如下:

$$ H(X) = -\sum_{i} p_i(x) log p_i(x) $$

在已知X的情况下,Y的条件熵:

$$ H(Y|X) = \sum_{i} p_i(x) H(Y|X=x_i) $$

信息增益也可以叫做互信息,信息增益可以表示为:

$$ g(D,A) = H(D)-H(D|A) $$

1.2 信息增益比

使用信息增益选择特征,容易偏向选择取值较多的特征,使用信息增益比则可以避免这个问题。
其中分母为集合A中不同特征的下D的熵。

$$ g_R(D,A) = \frac{g(D,A)}{H_A(D)} $$

1.3 Gini系数(基尼系数)

度量集合中数据的不纯度。
假设有K类,样本点属于第k类的概率为$p_k$,则:

$$ Gini(p) = \sum_{k=1}^{K}p_k(1-p_k) = 1-\sum_{k=1}^{K}p_k^2 $$

二分类下:

$$ Gini(p) = 2p(1-p) $$

其函数图像和熵的函数图像很像:
72481-y92onvcdyz.png

2. 学习算法

ID3 使用信息增益,C4.5使用信息增益比,但是这两个算法基本一样,而且只考虑决策树的生成,没有剪枝过程,所以很容易过拟合。

2.1 ID3 & C4.5

核心思想是从每个节点上使用信息增益来选择特征进行划分。

从根节点开始,计算每一个特征的信息增益,选择信息增益最大的特征进行分割,然后递归执行这个过程,直到该节点没有特征或者所有特征的信息增益最小。

算法过程:
输入: 训练数据集D,特征集A,阈值e
输出: 决策树T
步骤:

  1. 若A={}或者D都为一类,则返回,将该集合中,数量最大的类作为该节点的类别。
  2. 计算每一个特征的信息增益,选取信息增益最大的特征$A_g$
  3. 若$A_g$ 的信息增益小于阈值e,则返回,并将数量最多的类作为该节点的类别。
  4. 用特征$A_g$将D分割成若干个集合$D_i$,特征集合$A-{A_g}$然后进行递归,将结果作为该节点的子节点

ID3算法的想法十分朴素,只有树的生成过程,没有剪枝的过程,所以非常容易过拟合。

C4.5算法和ID3十分相似,但是使用了信息增益比作为特征选择的依据。

2.2 CART(分类和回归树)算法

CART(分类和回归树)规定决策树是二叉树,只分为满足条件和不满足条件两种情况。
可以分为两步,生成决策树和决策树剪枝。

对于回归树,使用平方误差最小;对于分类树,使用基尼指数(Gini Index) 。

2.2.1 回归树

回归树可以表示为

$$ f(x) = \sum_{m = 1}^{M} c_i I(x \in R_m) $$

可以看做输入组成的输入空间划分为多个集合R,然后其共同组成了输出

求解过程就是求解:

$$ \min_{j,s}\{\min_{c_1}\sum_{x_i \in R_1(j,s)}(y-c_1)^2+\min_{c_2}\sum_{x_i \in R_2(j,s)}(y-c_2)^2\} $$

上式就是取一个点s,使其分割的两个集合,其平方误差最小。可以通过枚举分割点s来求得。

2.2.2 分类树

分类树使用基尼系数来选择最优特征,同时决定该值得最优二值切分点

$$ Gini(p) = \sum_{k=1}^{K}p_k(1-p_k) $$

依据训练数据是否可以取某个值将集合D分为D1和D2两个集合

则分别计算两个集合的基尼系数并进行加权求和。

$$ Gini(D,A) = \frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2) $$

基尼系数和熵非常相似,但是不完全相等

2.2.3 剪枝 pruning

剪枝一般通过最小化决策树的损失函数来实现。

损失函数可以表示为:

$$ C_\alpha(T) = \sum_{t=1}^{T}N_t*H(T_t)+\alpha|T| = C(T)+\alpha|T| $$

损失函数分为两项,前面表示让叶子节点的平均经验熵最小,后面表示树的复杂程度。

剪枝算法是从下向上进行计算的,比较结合之后的树和原来的损失函数决定是否进行收缩,一般用动态规划进行处理。实际上,比较只需比较变化的部分。

TODO:
剪枝的具体算法和证明

二. 随机森林

集成学习是一种将多个弱分类器通过集成得到一个较强的分类器。弱分类器指结果比随机猜测稍好的分类器。这些弱分类器可以叫做个体学习器或者基分类器。

常见的集成学习方法:

  • bagging (代表算法:RT)

随用不同的数据和不同的特征训练多个分类器,然后进行加权或者投票得到最终的分类器。
bagging方法可以有效减少方差。

  • boosting (代表算法:AdaBoost)

对数据进行加权,增加前期错误样本的比重,训练多个分类器。

  • stacking

使用元分类器将多个弱分类器的输出作为输入,来得到结果。

另外集成学习方法也可以分为:

  • 同质集成和异质集成
  • 并行集成和串行集成

1. 随机森林的思想

RT是从训练数据中抽取不同的数据和不同的特征来训练决策树,然后将决策树进行加权求和或者投票。
RT主要有两个特点:随机数据随机特征

随机森林的模型可以表示为:

$$ f(x)=\frac{1}{M}\sum_{m=1}^{M} f_m(x) $$

2. 特征的重要程度

统计特征的重要程度一般使用每个特征在所有的树种的信息增益或平均不纯度来衡量。

但是这种对特征的选择存在一定问题。
先选择的特征可能会提供了大量的信息,导致其相关联的信息基本不能提供更多的信息,从而在总体上看,这些相关的特征就会有较低的重要程度。

3. 随机森林的扩展方法

3.1 extra trees

是RF的一个变种, 原理几乎和RF一模一样,仅有区别有:
1) 对于每个决策树的训练集,RF采用的是随机采样bootstrap来选择采样集作为每个决策树的训练集,而extra trees一般不采用随机采样,即每个决策树采用原始训练集。

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

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

3.2 Totally Random Trees Embedding(以下简称 TRTE)

是一种非监督学习的数据转化方法。它将低维的数据集映射到高维,从而让映射到高维的数据更好的运用于分类回归模型。我们知道,在支持向量机中运用了核方法来将低维的数据集映射到高维,此处TRTE提供了另外一种方法。

3.3 Isolation Forest(以下简称IForest)

是一种异常点检测的方法。它也使用了类似于RF的方法来检测异常点

IForest算法是基本不用调参的无监督算法。

对于一个输入空间,用超平面随机划分,分为两个区间,然后不停递归,直到只有一个点或者到达指定的高度。重复这个过程多次,产生一个森林,然后统计每个点的平均高度,平均高度越高的点,越有可能是异常点。

4. 优缺点

优点:

  1. 不同的决策树使用不同的数据和特征,有效避免过拟合
  2. 由于存在对特征的采样,可以处理较大的特征空间
  3. 实现简单,并行集成,算法效率高
  4. 对缺失特征不敏感

缺点:

  1. 在噪声较大的数据集上,容易出现过拟合的情况
  2. 对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。

5. 重要参数说明

RandomForestClassifier(n_estimators=10,
criterion=’gini’, 
max_depth=None, # 最大深度
min_samples_split=2, # 分裂需要的最小数据量
min_samples_leaf=1, # 叶子节点的最小数据量
min_weight_fraction_leaf=0.0,
max_features=’auto’, 
max_leaf_nodes=None, # 最大叶子数
min_impurity_decrease=0.0,
min_impurity_split=None, # 最小不纯度
bootstrap=True, 
oob_score=False, 
n_jobs=1, 
random_state=None,
verbose=0,
warm_start=False, 
class_weight=None)

上面决策树参数中最重要的包括最大特征数max_features, 最大深度max_depth, 内部节点再划分所需最小样本数min_samples_split和叶子节点最少样本数min_samples_leaf。

6. 应用场景

可用于连续变量和离散变量,不需要归一化,训练可以并行进行,泛化能力强,不容易过拟合。
不适用与噪声特别大的数据集

题外话

偏差和方差可以比喻成射击中的准和稳。
对于复杂的模型,其泛化能力较差,其方差较大,偏差较小。
对于简单的模型,其方差较大,偏差较大。

50203-2xdwqiy9whw.png

KNN 中随着K的增大,其偏差会变大,RF增大树的数目时偏差却保持不变,GBDT在增大树的数目时偏差却又能变小。

https://www.zhihu.com/question/20448464/answer/339471179

对于KNN算法,k值越大,表示模型的学习能力越弱,因为k越大,它越倾向于从“面”上考虑做出判断,而不是具体地考虑一个样本 近身的情况来做出判断,所以,它的偏差会越来越大。
对于RF,我们实际上是部分实现了多次训练取均值的效果,每次训练得到的树都是一个很强的学习者,每一个的方差都比较大,但综合起来就会比较小。好比一个很强的学习者学习时,刮着西风,它会据此调整自己的瞄准方法,另一个很强的学习者学习时刮着东风,(西风、东风可以理解为不同训练集中的噪声)它也会据此调整自己的瞄准方法,在测试样本时,一个误差向西,一个误差向东,刚好起到互相抵消的作用,所以方差会比较小。但是由于每棵树的偏差都差不多,所以,我们取平均时,偏差不会怎么变化。
为什么说是部分实现了多次训练取均值的效果而不是全部呢?因为我们在训练各棵树时,是通过抽样样本集来实现多次训练的,不同的训练集中不可避免地会有重合的情况,此时,就不能认为是独立的多次训练了,各个训练得到的树之间的方差会产生一定的相关性,训练集中重合的样本越多,则两棵树之间的方差的相关性越强,就越难达成方差互相抵消的效果。
对于GBDT,N棵树之间根本就不是一种多次训练取均值的关系,而是N棵树组成了相关关联,层层递进的超级学习者,可想而知,它的方差一定是比较大的。但由于它的学习能力比较强,所以,它的偏差是很小的,而且树的棵树越多,学习能力就越强,偏差就越小。也就是说,只要学习次数够多,预测的均值会无限接近于目标。简单讲就是GBDT的N棵树实际上是一个有机关联的模型,不能认为是N个模型。

Last modification:March 1st, 2019 at 10:57 am
If you think my article is useful to you, please feel free to appreciate

Leave a Comment