【西瓜书和南瓜书的吃瓜笔记】决策树

201 阅读3分钟

1. 基本流程:

决策树 (decision tree) 是一类常见的机器学习方法 .以二分类任务为例,我们希望从给定训练数据集学得一个模型用以对新示例进行分类,这个把样本分类的任务,可看作对 “当前样本属于正类吗 ?”这个问题的 “决策 ”或 “判定 ”过程。决策树就是不断根据某属性进行划分的过程(每次决策时都是在上次决策结果的基础之上进行),即“if⋯⋯elif⋯⋯ else⋯⋯”的决策过程,最终得出一套有效的判断逻辑,便是学到的模型。

一般的,一棵决策树包含一个根结点、若干个内部结点和若干个叶结点; 决策树叶结点对应于决策结果,其他每个结点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根结点包含样本全集。 Pasted image 20240516224917.png

当出现三种情况时递归结束:

  • 若递归划分过程中某个子集中已经只含有某一类的样本(例如只含好瓜),那么此时划分的目的已经达到了,无需再进行递归划分
  • 递归划分时每次选择一个属性作为划分依据,并且该属性通常不能重复使用(仅针对离散属性), 原因是划分后产生的各个子集在该属性上的取值相同。
  • 根据某个属性进行划分时,若该属性多个属性值中的某个属性值不包含任何样本(例如未收集到), 例如对当前子集以“纹理”属性来划分,“纹理”共有 3 种取值:清晰、稍糊、模糊,但发现当前子集中并无样本“纹理”属性取值为模糊,此时对于取值为清晰的子集和取值为稍糊的子集继续递归,而对于取值为模糊的分支,因为无样本落入,将其标记为叶结点,其类别标记为训练集 D 中样本最多的类,即把全体样本的分布作为当前结点的先验分布。

2. 算法原理:

2.1. 从逻辑角度:一堆判断语句的组合,即,if,else 组合 2.2. 从几何角度:根据某种准则划分特征空间 2.3. 最终目的就是将样本越分越纯

3. 划分方法:

一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的 “纯度”(purity) 越来越高.

3.1. 信息增益:

3.1.1. 自信息 :

表示随机变量所含的信息。

I(X)=log_bp(x)I(X) = -log\_bp(x)

b=2b = 2 时单位为 bit,XX 为随机变量 , p(x)p(x) 为这个随即变量属于某一类的概率。

3.1.2. “信息熵" :

是度量样本集合纯度最常用的一种指标,是自信息的期望。信息熵的值越小,DD 的纯度越高。已知集合 DD 的信息熵定义为:

Ent(D)=k=1Ypklog2pk\mathrm{Ent}(D)=-\sum_{k=1}^{|\mathcal{Y}|}p_k\log_2p_k

其中,Y|\mathcal{Y}| 表示样本可以分成的类数(如好瓜坏瓜的类别),pk(k=1,2,3,...,Y)p_k(k = 1,2,3,...,|\mathcal{Y}|) 表示第 kk 类样本所占的比例,也就是对于这个样本,他属于哪一类的概率是多少,有 0pk10\leqslant p_k\leqslant1, k=1npk=1,pk=0,pklog2pk=0\sum_{k=1}^np_k = 1,p_k=0,p_klog_2p_k=0

对于这个比例(概率),概率越大,越表明样本中的某一个取值的概率越大,越表明样本的类别越确定,此时的信息熵就越小;而当比例(概率)越平均,样本的类别越不确定,信息熵越大。

若令 Y=n|\mathcal{Y}|=n, pk=xkp_k=x_k ,那么信息熵Ent,那么信息熵 Ent (D) 就可以看作一个就可以看作一个 nn 元实值函数,即 Ent(D)=f(x1,,xn)=k=1nxklog2xk\operatorname{Ent}(D)=f(x_1,\cdots,x_n)=-\sum_{k=1}^nx_k\log_2x_k 其中 0xk1,k=1nxk=10\leqslant x_k\leqslant1,\sum_{k=1}^nx_k=1,其余同上。 在进行计算该多元函数的最值时,最大值采用拉格朗日算子法,最小值采用分别求取组成函数的最小值的方法。 样本集合

3.1.3. 条件熵:

YY 的信息熵关于随机变量 XX 概率分布的期望,已知 XXYY 的不确定性:

H(YX)=xp(x) H(YX=x)H(Y|X)=\sum_xp(x) \ H(Y|X=x)

也就是说,在已经知道 XX 所定的取值之后,根据 XX 的数值的取值范围去划分若干个子集,去求 YY 特征的不同子集中的信息熵。

信息增益

样本集合 DD 的条件熵为:

v=1VDvDEnt(Dv)\sum_{v=1}^V\frac{|D^v|}{|D|}\mathrm{Ent}(D^v)

其中 aa 表示某一离散属性,其可能有 {a1,a2,,aV}\{a^1,a^2,\ldots,a^V\} 个节点分支,即该属性可能 V 个不同的表征(如 aa 表示颜色属性,它有白,黑,绿等,同时也是该属性的某一个取值),DvD^v 则表示属性 aa 的取值为 ava^v 的样本集合,也就是说当这个样本属性有白黑绿三个不同的取值时,对于某一个取值白 ava^vDvD^v 表示在目前这个整个样本集合中,颜色取值为白色的样本集合(的个数,如 5),DvD\frac{|D^v|}{|D|} 则表示目前这个样本集合的占比情况,此时这里的信息熵则对应了不同取值下的信息熵。

3.1.4. 信息增益:

整体的信息熵(不划分子集)与每一个属性的条件熵(按照已知属性 aa 的取值划分子集后)的差值,作为整体的信息增益,使用这个信息增益去判断目前所使用的这个取值是好还是坏,信息增益越大越好。

Gain(D,a)=Ent(D)v=1VDvDEnt(Dv)\mathrm{Gain}(D,a)=\mathrm{Ent}(D)-\sum_{v=1}^V\frac{|D^v|}{|D|}\mathrm{Ent}(D^v)

3.2. ID3 决策树:

以信息增益为准则来选择划分属性的决策树:

a=argmaxGainaA(D,a)a_*=\underset{a\in A}{\operatorname*{\arg\max\text{Gain}}}(D,a) 弊端:可能对取值数目较多的属性有偏好,但其本质原因不是取值数目过多,而是每一个取值所包含的样本量太少,具体见西瓜书第四章“编号”的例子。

3.3. C4.5 决策树:

为了避免信息增益带来的弊端,C4.5 决策树使用增益率来代替信息增益。 增益率: Gain_ratio(D,a)=Gain(D,a)IV(a)\mathrm{Gain\_ratio}(D,a)=\frac{\mathrm{Gain}(D,a)}{\mathrm{IV}(a)} 其中属性 aa 的固有值为:IV(a)=v=1VDvDlog2DvD\mathrm{IV}(a)=-\sum_{v=1}^V\frac{|D^v|}{|D|}\log_2\frac{|D^v|}{|D|} 属性 aa 的可能取值数目越多(即 V 越大),则 IV(a)I V ( a ) 的值通常会越大。 需注意的是,增益率准则对可取值数目较少的属性有所偏好,因此 C4.5 算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的.

3.4. CART 决策树:

基尼值(类比信息熵):反映了从样本集合 DD 中随机抽取两个样本,其类别标记不一致的概率.因此,基尼值越小,则样本集合 DD 的纯度越高。

Gini(D)=k=1Ykkpkpk=k=1Ypk(1pk)=1k=1Ypk2\begin{aligned} \mathrm{Gini}(D)& =\sum_{k=1}^{|\mathcal{Y}|}\sum_{k^{\prime}\neq k}p_kp_{k^{\prime}} \\ &=\sum_{k=1}^{|\mathcal{Y}|}p_k(1-p_k) \\ &\begin{aligned}=1-\sum_{k=1}^{|\mathcal{Y}|}p_k^2\end{aligned} \end{aligned}

基尼指数(类比条件熵):对应于某个属性子集的

Gini_index(D,a)=v=1VDvDGini(Dv)\operatorname{Gini\_index}(D,a)=\sum_{v=1}^V\frac{|D^v|}{|D|}\operatorname{Gini}\left(D^v\right)

CART 决策树:选择基尼指数最小的属性作为最优划分属性

a=argminaAGini_index (D,a)a_*=\underset{a\in A}{\operatorname*{\arg\min}}\text{Gini\_index }(D,a)

表示在属性 aa 的取值已知的条件下,数据集 DD 按照属性 aa 的所有可能取值划分后的纯度。不过在构造 CART 决策树时并不会严格按照此式来选择最优划分属性,主要是因为 CART 决策树是一棵二叉树,如果用上式去选出最优划分属性,无法进一步选出最优划分属性的最优划分点。 常用的 CART 决策树的构造算法如下: (1) 考虑每个属性 aa 的每个可能取值 vv,将数据集 DD 分为 a=va = vava\neq v 两部分来计算基尼指数,即

Gini_index(D,a)=Da=vDGini(Da=v)+DavDGini(Dav)\text{Gini}\_\text{index}(D,a)=\frac{|D^{a=v}|}{|D|}\text{Gini}(D^{a=v})+\frac{|D^{a\neq v}|}{|D|}\operatorname{Gini}(D^{a\neq v})

(2) 选择基尼指数最小的属性及其对应取值作为最优划分属性和最优划分点; (3) 重复以上两步,直至满足停止条件。