《机器学习》Chapter 4 决策树
4.1 基本流程
决策树是一类常见的机器学习算法,是一种简单但是广泛使用的分类器。顾名思义,决策树基于树结构进行决策。一般的,一颗决策树包含一个根结点、若干个内部结点和若干个叶结点;叶结点对应于决策结果,其他每个结点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根结点包含样本全集。从根结点到每个叶结点的路径对应一个判定测试序列。
决策树学习的目的是为了产生一颗泛化能力强,即处理未见示例能力强的决策树。
决策树有两大优点:
1)决策树模型可以读性好,具有描述性,有助于人工分析;
2)效率高,决策树只需要一次构建,反复使用,每一次预测的最大计算次数不超过决策树的深度。
4.2 划分选择
决策树学习的关键是**如何选择最优划分属性,**一般而言,随着划分过程的不断进行,我们希望决策树的分支节点所包含的样本尽可能属于同一类别,即节点的“纯度”越来越高。
决策树有三种常用算法:ID3,C4.5,CART:
-
ID3(Iterative Dichotomiser 迭代二分器)算法:用信息增益来划分属性。
-
-
信息熵(Information Entropy):是度量样本集合纯度最常用的一种指标(熵能较好将分类效果好的属性选出)物体越不稳定,可能性越多,成分越复杂,信息熵越大。定义为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eNJMEvHl-1620350738685)(https://www.zhihu.com/equation?tex=Ent%3D%28D%29%3D-%5Csum_%7Bk%3D1%7D%5E%7B%7C%5Cgamma%7C%7Dp_klog_2p_k+%5C%5C++++)]
其中gamma为初试的类别数(比如西瓜数据集,一开始在没有加入任何属性前,只有好瓜和坏瓜数量),pk是第k类样本占比。Ent(D)的值越小,D的纯度越高。 -
信息增益(Information Gain):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5k54aBk7-1620350738691)(https://www.zhihu.com/equation?tex=Gain%28D%2Ca%29%3DEnt%28D%29-%5Csum_%7Bv%3D1%7D%5EV%5Cfrac%7B%7CD%5Ev%7C%7D%7B%7CD%7C%7DEnt%28D%5Ev%29+%5C%5C+++)]其中a为属性,V为属性a可能的取值{a1…aV},按属性取值对样本D进行划分得到的在属性a上取值为av的样本子集为Dv。这里的信息增益为按a分类后改变的信息熵。一般而言,信息增益越大意味着使用属性a来进行划分所获得的的“纯度提升”越大。
-
所以ID3算法算出所有候选属性的信息增益,其max的属性作为该时刻的划分属性进行划分。
-
-
C4.5算法:用增益率来划分属性。
-
- why?信息增益准则可对取值数目较多的属性有所偏好(即比如一个属性的元属性有很多,这样的Gain更大,ID3算法可能会采用这样的属性来作为此时的划分属性),这种偏好可能带来过拟合的不良影响(划分太细太像训练集了)。C4.5作为ID3算法的改进,采用增益率作为指标来划分最优属性。
- 增益率:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oVI34UIp-1620350738693)(https://www.zhihu.com/equation?tex=Gain%5C_ratio%28D%2Ca%29%3D%5Cfrac%7BGain%28D%2Ca%29%7D%7BIV%28a%29%7D+%5C%5C%E5%85%B6%E4%B8%AD%EF%BC%8CIV%28a%29%3D-%5Csum_%7Bv%3D1%7D%5EV%5Cfrac%7B%7CD_v%7C%7D%7B%7CD%7C%7Dlog_2%5Cfrac%7B%7CD_v%7C%7D%7B%7CD%7C%7D)] - 增益率准则对可取值数目较少的属性有所偏好,因此C4.5算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式。从候选划分属性中找出信息增益高于平均水平的属性,再从中选max。、
[理解] Dynamic programming
-
CART算法:用基尼指数来度量数据集D的纯度。
-
基尼指数(Gini Index):反映随意从样本集中抽取两个样本,其类别标记不一致的概率,以此来度量纯度。基尼值越小越好。我们就选择基尼值树嘴笑的属性作为最优划分属性。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r9Ahcyux-1620350738695)(https://www.zhihu.com/equation?tex=%E5%9F%BA%E5%B0%BC%E5%80%BC%EF%BC%9AGini%28D%29%3D%5Csum_%7Bk%3D1%7D%5E%7B%7C%5Cgamma%7C%7D%5Csum_%7Bk%27%5Cneq+k%7Dp_kp_%7Bk%27%7D%3D1-%5Csum_%7Bk%3D1%7D%5E%7B%7C%5Cgamma%7C%7Dpk%5E2++%5C%5C++%E5%B1%9E%E6%80%A7%E7%9A%84%E5%9F%BA%E5%B0%BC%E6%8C%87%E6%95%B0%EF%BC%9AGini%5C_index%28D%2Ca%29%3D%5Csum_%7Bv%3D1%7D%5E%7B%7CV%7C%7D%5Cfrac%7B%7CD%5Ev%7C%7D%7B%7CD%7C%7DGini%28D%5Ev%29+%5C%5C++++++++)] -
划分过程:
- 首先计算最初的各个属性的信息增益,并从中选择出最大值所对应的属性作为根节点
- 根据根节点将数据集划分成多个子集,再分别对每一个子集的数据中的除根节点属性之外的其他属性计算信息增益,挑选出最大值对应的属性作为节点。
- 重复步骤1,2,直到决策树生成。
4.3 剪枝处理
剪枝是决策树学习算法对付“过拟合”的主要手段,决策树剪枝的基本策略有“预剪枝”和“后剪枝”,预剪枝是指在决策树生成的过程中,对每个节点在划分前进行估计,若当前节点的划分不能带来决策树泛化性能的提升,则停止划分并将当前节点标记为叶节点;后剪枝则是先从训练集中生成一棵完整的决策树,然后自底向上地对非叶节点进行考察,若将该节点对应的子树替换为叶节点能带来决策树泛化性能的提升,则将该子树替换为叶节点。
预剪枝使得决策树的很多分支都没有”展开“,这不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销。但另一方面,有些分支的当前划分虽不能提升泛化性能、甚至可能导致泛化性能暂时下降,但在其基础上进行的后续划分却有可能导致性能显著提高;预剪枝基于”贪心“本质禁止这些分支展开,给预剪枝决策树带来了欠拟合的风险。
后剪枝决策树通常比预剪枝决策树保留了更多的分支,一般情况下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上地对树中所有非叶节点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大的多。
4.4 连续与缺失值
指属性取值连续与否:离散:密度(密度大,密度小);连续:密度(0.1,0.24,0.45,0.57…)。
-
连续值的处理:一般采用连续属性离散化。最简单的策略是二分法(Bi-Partition),C4.5有采用这种机制。
-
- 二分法思想:给定样本集D与连续属性α,二分法试图找到一个划分点t将样本集D在属性α上分为≤t与>t:
[理解] 若要对连续值处理,那么整个操作就是:先对连续属性离散化,找出最佳划分点(二分+信息增益);接着从众多属性中选最佳划分属性(信息增益等)。 - 流程:
首先,将α的所有取值按升序排列,所有相邻属性的均值作为候选划分点(n-1个,n为α所有的取值数目)。
再计算每一个划分点划分集合D(即划分为两个分支)后的信息增益。
最后,选择最大信息增益的划分点作为最优划分点。 - 注意:与离散属性不同,若当前节点划分属性为连续属性,该属性还可以作为其后代节点的划分属性。
- 二分法思想:给定样本集D与连续属性α,二分法试图找到一个划分点t将样本集D在属性α上分为≤t与>t:
-
缺失值的处理:现实中常会遇到不完整的样本,即某些属性值缺失。有时若简单采取剔除,则会造成大量的信息浪费,因此在属性值缺失的情况下需要解决两个问题:(C4.5采用以下解决方案)
-
- 如何选择划分属性。
- 给定划分属性,若某样本在该属性上缺失值,如何划分到具体的分支上。 假定为样本集中的每一个样本都赋予一个权重,根节点中的权重初始化为1,则定义:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sWeMvBNx-1620350738696)(https://www.zhihu.com/equation?tex=%5Crho+%3D%5Cfrac%7B%5Csum_%7Bx%5Cin+%5Ctilde+D%7Dw_x%7D%7B%5Csum_%7Bx%5Cin+D%7Dw_x%7D+%5C%5C%5Ctilde+p_k+%3D%5Cfrac%7B%5Csum_%7Bx%5Cin+%5Ctilde+D_k%7Dw_x%7D%7B%5Csum_%7Bx%5Cin+%5Ctilde+D_k%7Dw_x%7D%281%5Cleq+k%5Cleq+%7C%5Cgamma%7C%29+%5C%5C%5Ctilde+r_v+%3D%5Cfrac%7B%5Csum_%7Bx%5Cin+%5Ctilde+D%5Ev%7Dw_x%7D%7B%5Csum_%7Bx%5Cin+%5Ctilde+D%7Dw_x%7D%281%5Cleq+v%5Cleq+V%29)]
其中,rho为不确实的样本占比;k为类(eg 好瓜坏瓜两类);v为取值(为一个属性下各元属性/变量)
-
- 对于(1):通过在样本集D中选取在属性α上没有缺失值的样本子集,计算在该样本子集上的信息增益,最终的信息增益等于该样本子集划分后信息增益乘以样本子集占样本集的比重。即: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kwlhmEIU-1620350738698)(https://www.zhihu.com/equation?tex=Gain%28D%2Ca%29%3D%5Crho+%2A+Gain%28%5Ctilde+D%2Ca%29%3D%5Crho+%2A+%28Ent%28%5Ctilde+D%29-%5Csum_%7Bv%3D1%7D%5EV%5Ctilde+r_vEnt%28%5Ctilde+D%5Ev%29%29%5C%5C%E5%85%B6%E4%B8%AD%EF%BC%8CEnt%28%5Ctilde+D%29%3D-%5Csum_%7Bk%3D1%7D%5E%7B%7C%5Cgamma%7C%7D%5Ctilde+p_klog_2%5Ctilde+p_k)]
- 对于(2):若该样本子集在属性α上的值缺失,则将该样本以不同的权重(即每个分支所含样本比例)划入到所有分支节点中。即让同一样本以不同概率划入到不同子结点当中去。
4.5 多变量决策树
- 从坐标空间的角度看(每个属性视为一个坐标轴),决策树对样本分类意味着在坐标空间中寻找不同类样本之间的分类边界。决策树找出的是与轴平行的边界(即分类边界由若干个与坐标轴平行的分段组成)。
- 多变量决策树(Multivariate Decision Tree):实现“斜划分”甚至更加复杂划分的决策树。即决策树中非叶结点不再是仅针对某个属性,而是对属性的线性组合进行测试。eg 分支结点变成:”-0.8密度-0.44含糖率<0.313?“这样的条件。如此在控坐标空间里分类边界就不再是与坐标轴平行的直线了。