决策树与随机森林
本篇博客将重新给出对决策树与随机森林的认识。主要分析决策树的学习算法:信息增益和ID3、C4.5、CART树,然后给出随机森林。
决策树中,最重要的问题有3个:
1. 特征选择。即选择哪个特征作为某个节点的分类特征;
2. 特征值的选择。即选择好特征后怎么划分子树;
3. 决策树出现过拟合怎么办?
下面分别就以上问题对决策树给出解释。决策树往往是递归的选择最优特征,并根据该特征对训练数据进行分割。
信息熵
关于信息熵以及最大熵模型的详细信息,请参看该博客。
- 熵: H(X)=−∑x∈Xp(x)logp(x)
- 联合熵: H(X,Y)=−∑x∈X,y∈Yp(x,y)logp(x,y)
- 条件熵: H(X|Y)=−∑x∈X,y∈Yp(x,y)logp(x|y)
- 相对熵: D(p||q)=∑xp(x)logp(x)q(x)
- 互信息: I(X,Y)=∑x∈X,y∈Yp(x,y)logp(x,y)p(x)p(y)
决策树中常用的评价指标
- 信息增益(Information Gain):表示得知特征A的信息而使得类X的信息的不确定性减少的程度。
定义:特征A对训练数据集D的信息增益g(D, A),定义为集合D的经验熵H(D)与经验条件熵H(D|A)的差值。
g(D,A)=H(D)−H(D|A)
而这又是互信息的定义。所以决策树中的信息增益等价于训练集中类与特征的互信息。 - 信息率(Information Gain Ratio):
用信息增益作为划分特征的依据时,会存在一些问题。例如,如果使用数据的ID作为特征,这样,每个数据点相当于均匀分布,所以得到的信息增益一定是最大的,但是我们都知道ID是不能作为特征的。这样如果单纯的使用信息增益作为划分特征的依据的话,会导致我们生成的树比较矮胖,容易过拟合。
定义:特征A对训练数据集D的信息增益率 gR(D,A) 定义为其信息增益 g(D,A) 与训练数据集D关于特征A的值得信息熵 HA(D) 之比:
gR(D,A)=g(D,A)HA(D) - Gini系数:
Gini(p)=∑Kk=1pk(1−pk)=1−∑Kk=1p2k - 决策树的评价 —— loss function:
假定样本的总类别数为K个;树T的叶节点个数为|T|,t是树T的叶节点,叶节点有 Nt 个样本点,其中k类的样本点有 Nik 个, Ht(T) 为叶节点t上的经验熵,则决策树的loss function可以定义为:
Cα(T)=∑t∈leafNtHt(T)+α|T|
3种决策树
ID3
ID3算法的核心是在决策树各个节点上使用信息增益作为特征选择的依据,递归的构建决策树。
从根节点开始,对节点计算所有可能的特征的信息增益,选择信息增益最大的特征作为节点的特征,由该特征的不同取值建立子节点;再对子节点递归的调用以上方法,构建决策树;知道所有特征的信息增益均很小或没有特征可以选择为止,得到最后一个决策树。ID3相当于用最大似然法进行概率模型的选择。
C4.5
C4.5算法使用信息增益率作为特征选择的依据,算法的流程与ID3相似。
CART
CART树的名字其实非常有意思,Classification And Regression Tree(分类回归树),它使用基尼系数(Gini Index)作为特征的划分依据。顾名思义,CART既可以用来做分类也可以用来做回归。它是在给定输入随机变量X条件下输出随机变量Y的条件概率分布的学习方法。
CART树假设我么的决策树是二叉树,内部节点特征的取值为是或否。CART算法为:
1. 决策树的生成:基于训练数据集生成决策树,生成的决策树要尽量大;
2. 决策树剪枝:用验证数据集对已经生成的巨额额数进行剪枝并选择最优子树。
决策树中避免过拟合的方法
剪枝
在上面决策树的评价指标loss function
Cα(T)=C(T)+α|T|
中,C(T)表示模型对训练数据集的预测误差,即模型与训练数据的拟合程度,|T|表示模型复杂度,由参数
α
控制两者之间的影响。
当
α
确定时:
- 子树越大,与训练集的拟合越好,但模型的复杂度就越高;
- 子树越小,模型简单,但与训练集的拟合度不好。
决策树生成学习局部的模型,而剪枝学习整体的模型!!
剪枝的过程为:
- 计算每个节点的经验熵;
- 递归的从树的叶节点向上回缩,设一组叶节点回缩到其父节点之前和之后的整体树分别为 TB 和 TA ,对应的损失函数值分别为 Cα(TB) 和 Cα(TA) ,如果 Cα(TA)<=Cα(TB) ,则进行剪枝。
随机森林
Bootstrap Aggregation
- 从训练集中有重复的选出n个样本;
- 在所有属性上,对这n个样本建立分类器;
- 重复上述步骤m次,获得m个分类器。最终的决策由这m个分类器进行投票决定。
随机森林
- 从训练集中用Bootstrap采样选出n个样本;
- 从所有属性中随机选择k个属性,选择最佳分割属性作为节点建立CART决策树;
- 重复上述步骤,建立m棵CART树,然后进行投票表决。