决策树和随机森林

  决策树是比较容易的理解的机器学习算法,算法学习过程就是利用数据的属性构造树的过程,根据构建的树,逐步向下决策,最后得到结果。决策树利用树结构进行决策,和人类理解决策问题时的思路很像,比如对于”是否要买下这套房子?”这样的决策问题,人类会思考“地段位置好吗?”。位置好,那再看“房子的价格可以接受吗?”。可以接受,“房子面积够用吗?”……经过一些列的决策判断之后,才会决定买/不买这套房子。

1. 决策树的构建过程

  决策树既然采用了树结构,那么就会包含树的根节点,若干中间节点和叶节点,而树的构建过程是一个递归的过程。决策树算法构建树的流程可以表示如下:

输入:训练集 D={(x1,y1),(x2,y2),...,(xN,yN)}
   属性集A={a1,a2,...,ad}
树生成过程: TreeGenerate(D,A )
1. 生成节点node
2. if D 中的样本都是同一个类别C
3.   将node标记为叶节点,类别为C
4.   return
5. if A 为空 or D 中的样本在各个属性上的取值都一样
6.   将node标记为叶节点,类别为D 中样本最多的类
7. if D 为空
8.    将node标记为叶节点,类别为父节点的类
9. 从A 中选择最优划分属性 a 对节点进行划分,a 的每一个属性值av 划分一个分支
10. for av
11.   生成一个分支,分支的属性集合为Aa ,数据集合为Dv ,表示D 中在a 上取值为av 的所有样本
12.   TreeGenerate(Dv,Aa )
13. 输出:一颗决策树

其中,属性集有d 个和样本xi 的维度是保持一致的。

  决策树的构建过程是很明显的递归流程,包括递归返回条件和分而治之的思想。在决策树的构建中,很关键的是如何选择最优划分属性,依据什么准则来选择当前状况下的最优划分属性呢?最直接的想法是希望每次划分,都尽可能使得各个分支节点的样本属于同一个类。那么如何用数学语言描述这个想法呢?决策树一般采用信息增益、增益率和基尼指数。

2. 信息增益

  信息增益是比较采用某属性进行划分的前后,信息熵的变化,选择使信息熵变化最大的属性作为当前的最优划分属性。信息熵是度量样本纯度的常用指标。

  假定当前样本集合为D ,每类样本k 占总样本比例为pkk=1,2,...,K ,假设集合D 上共有K 个类别)。则定义信息熵为:

Ent(D)=k=1Kpklog2pk

信息熵的值越小,则样本集D 的纯度越高,即大多样本都属于同一个类。比如在所有样本都是同一个类时,pk 要么是0,要么是1,则Ent(D)=0

  针对属性a 进行划分(a 共有M 种取值),划分M 个分支,每个分支的样本集合为Dm,(m=1,2,...,M) 。则信息增益为:

Gain(D,a)=Ent(D)m=1MEnt(Dm)

考虑根据样本数对M 个分支加上权重,样本数越多,权重越大,则信息增益重新表示为:
Gain(D,a)=Ent(D)m=1M|Dm||D|Ent(Dm)

其中,|Dm| 表示数据集Dm 中样本的数量。因此,对于属性的选择,就是选择使得Gain(D,a) 最大的属性,如下。著名的ID3 决策树就是以信息增益为准则来选择最优划分属性。

a=argmaxaAGain(D,a)

3. 增益率

  分析信息增益会发现,如果某个属性包含较多的属性值,那么就会把数据集划分为很多个子集,那么每个子集的样本数量就会相对较少,信息熵也就会较小。因此取值数目越多的属性,越可能被选择为最优划分属性。即信息增益准则偏好于取值数目较多的属性。

  为了削弱信息增益对取值较多属性的偏好,可以使用增益率作为选择最优划分属性的准则。增益率的定义为:

GainRatio(D,a)=Gain(D,a)IV(a)

其中,IV(a)=m=1M|Dm||D|log2|Dm||D|IV(a) 有点像求划分子集的熵,跟属性密切相关,且属性a 的取值越多,IV(a) 越大,那么就有效的抑制了信息增益对取值较多属性的偏好。

  C4.5 决策树算法综合使用信息增益和增益率。首先确定信息增益高于平均水平的属性,再从中选择增益率最大的。

4. 基尼指数

  使用基尼指数值来表示数据集D 的纯度。

Gini(D)=1k=1Kpk2

表示从D 中随机抽取两个样本类别标记不一致的概率。Gini(D) 越小,数据的纯度越大。而基尼指数表示为:

Gini_Index(D,a)=m=1MGini(Dm)

通过选择使基尼指数最小的属性。a=argminaGini_Index(D,a)

5. 剪枝

  在决策树中,为了追求在训练集上更高的准确率,会导致整棵树枝繁叶茂。这样很容易造成模型过拟合,在训练集上表现很好,而在测试集上的准确率却不高。

  剪枝是决策树中常用的解决过拟合的手段,包括预剪枝和后剪枝两种策略。预剪枝是在构造决策树时,根据该次划分能否带来泛化性能的提升决定是否执行此次划分,即阻止分枝的生成。后剪枝则是先生成一颗完整的决策树,而后从叶节点开始回溯,考察每个中间节点,若将某个中间节点修改为叶节点可以提升泛化性能,那么将该中间节点替换为叶节点,即剪掉节点下的所有分枝。

   不管是预剪枝还是后剪枝,都涉及泛化性能验证的问题,因此需要将数据分为训练集和验证集,使用训练集构建决策树,而使用验证集评估模型的泛化性能。

5.1 预剪枝

  在决策树的构建过程中,利用验证集评估当前构建的决策树的准确率,即根据当前最优属性划分后的决策树的准确率。若执行此次划分前的准确率小于划分后的准确率,则执行此次划分,否则不划分。在预剪枝中,当前的划分可能不会提升准确率,但是后续在该划分下的发展,则可能会达到更高的准确率,但是预剪枝策略直接忽略掉了这种可能性,因此预剪枝策略可能会导致模型欠拟合。

5.2 后剪枝

  构建好决策树之后,从最底层开始层序遍历决策树。对于非叶节点,利用验证集评估基于该结点进行划分和不划分的准确率,若不划分的准确率高于划分的准确率,则将该节点置为叶节点。

6. 连续属性取值

  在决策树的构建中,选择属性划分分枝时,是把属性的所有可能取值作为分枝,这对离散取值的属性是可行的,但对于连续取值的属性应该怎么办呢?

  将连续取值离散化是解决该问题的方法。假设D 上的数据在属性a 上的取值连续,但是数据集中的样本数是有限的,把所有样本在属性a 上的值排序(a1,a2,...) 。以所有相邻取值的中间点作为分界点t ,可以把D 分为两部分,在选择最优划分属性时,把分界点t 也作为需要选择的属性之一。因此,分界点t 丰富了属性集合,同一属性的不同分界点也可以作为最优的划分规则,因此在有连续值属性的决策树中,相同的属性可能多次出现在决策树中。
  对于信息增益而言,

Gain(D,a)=maxtTaGain(D,a,t)

缺失值处理

当训练数据中部分样本的部分属性值缺失时会面临两个问题,一是如何选择最优的划分属性,二是选择了划分属性后,如何将含有缺失值的样本划分到各个子结点中。

(一)含有缺失值时,如何选择最优划分属性。

划分属性的依据仍然是选择划分后使得数据纯度最高的属性(常用信息增益、信息增益率和基尼指数来衡量数据纯度)。这里以先以信息增益为例来说明存在缺失值时如何选择最优的划分属性。

在数据集D和属性集A上选择最优的划分属性,需要衡量A中以每个属性a进行划分时的信息增益,并选择使信息增益最大的属性a’作为划分属性。对于某个属性a,因为缺失值的原因,不能直接在整个数据集D上计算信息增益,而是计算以a为划分属性时,在不包含缺失值的数据集D’上的信息增益Gain(D’)(D’是D的子集,只包含无缺失值的数据)。假设D’中所有样本的权重与D中所有样本的权重之和的比值为epsilon,则a在D上的信息增益Gain(D)=epsilon * Gain(D’)。最后选择使Gain(D)最大的属性a作为划分属性。

在这里为了方便说明,只以信息增益为例来解释存在缺失值时,如何选择最优划分属性。对于信息增益率和基尼指数,同样可以用相同的策略计算。

(二)选择最优划分属性后,如何将样本划分到各个子结点中。

若样本x在最优划分属性a上有取值,则直接将其划入取值对应的子结点,且保持样本的权重wx不变。若x在a上取值缺失,则将x划分到所有子结点中,但样本权重调整为wx=wx*|Dv|/|D’|(|Dv|/|D’|表示某个划分节点中不含缺失值的样本的权重占所有不含缺失值样本权重的比例)。

损失函数

生成决策树时,会根据训练数据递归地生成子结点,因为只考虑了如何提高训练数据的准确率,容易构建出复杂的决策树模型,而导致过拟合。在决策树中,常用的解决过拟合的手段是剪枝。而剪枝一般是通过最小化决策树的损失函数来实现(一般也可以通过验证集的性能进行剪枝)。

对决策树进行剪枝时,会从树的叶结点开始向上回退,审查每一个中间结点,若删除某个中间结点的所有分支,即将该中间结点置为叶结点后,损失函数L会减小,那么说明该操作是有利的,则执行该剪枝。

对于一颗构建好的决策树而言,损失函数定义为所有叶结点信息熵的加权和(误差项)再加上叶结点的个数(惩罚项)。一颗决策树T,假设其叶结点的个数为I,i表示某个叶结点,叶结点i上有Ni个样本,第k类样本在叶结点i有Nik个(k=1,2,3,…,K,共有K个类),叶结点的信息熵为Hi。则损失函数L=sum(NiHi)+ lambda * I,其中信息熵Hi=-sum[Nik/Ni * log(Nik/Ni)]。

可以认为sum(NiHi)表示各个叶结点误差项的加权和,对于每个叶结点,分类越准,Hi越小,Ni则是作为叶结点i的误差项的权重。I则表示惩罚项,表示模型的复杂度,模型越复杂(叶结点越多),I越大。Lambda则是用于平衡误差项和惩罚项的因子。

7. 随机森林

  随机森林(random forest, RF)可以简单的理解为决策树的组合,“”树(决策树)多了就成了林(随机森林)”。随机森林是集成学习策略bagging在决策树上的应用(关于集成学习更多的了解参见我的博客集成学习),它使用决策树作为基学习器,但对决策树的构建略有改动,即在决策树的构建过程中,对属性的选择引入了随机扰动。

  在随机森林算法中,a. 首先是基于自助采样法(自助采样法请参见我的博客机器学习中的模型评估与度量)得到T 组训练样本。b. 针对每一组训练样本构建一棵决策树。但在随机森林中,对决策树中的每一个节点,并不是直接选择最优属性进行划分,而是先从该节点的属性集中随机选择包含K 个属性的子集,再从这个子集中选择最优属性进行划分(推荐选择K=log2dd 表示当前节点的总属性条目)。c. 得到T 棵决策树,通过bagging策略,即多数投票的方式做最后的决策。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章