决策树

决策树

参考资料:

  • 《统计学习方法》

随机变量 \(X\) 的熵定义为

\[H(X)=-\sum_{i=1}^n p_i \log p_i \tag{5.1} \]

条件熵

设有随机变量 \((X,Y)\),其联合概率分布为

\[P(X=x_i,Y=y_i)=p_{ij},\ \ \ i=1,2,\ \ \ \cdots,n;\ \ \ j=1,2,\cdots,m \tag{5.2} \]

条件熵 \(H(Y|X)\) 表示在已知随机变量 \(X\) 的条件下随机变量 \(Y\) 的不确定性,定义为 \(X\) 给定条件下 \(Y\) 的条件概率分布的熵对 \(X\) 的数学期望

\[H(Y|X)=\sum_{i=1}^n p_iH(Y|X=x_i),\ \ \ p_i=P(X=x_i),\ \ i=1,2,\cdots,n \tag{5.5} \]

信息增益

也称作互信息(mutual information)

特征 \(A\) 对训练数据集 \(D\) 的信息增益 \(g(D,A)\),定义为集合 \(D\) 的经验熵 \(H(D)\) 与特征 \(A\) 给定条件下 \(D\) 的经验条件熵 \(H(D|A)\) 之差,即

\[g(D,A)=H(D)-H(D|A) \tag{5.6} \]

经验熵 \(H(D)\) 表示对数据集 \(D\) 进行分类的不确定性,经验条件熵 \(H(D|A)\) 表示在特征 \(A\) 给定的条件下对数据集 \(D\) 进行分类的不确定性。

它们的差,即信息增益,就表示由于特征\(A\)而使得对数据集\(D\)的分类的不确定性减少的程度。

信息增益比

在分类问题困难时,也就是说在训练数据集的经验熵大的时候,信息增益值会偏大.反之,信息增益值会偏小.

使用信息增益比( information gain ratio)可以对这一问题进行校正.这是特征选择的另一准则.

信息增益比:特征 \(A\) 对训练数据集\(D\)的信息增益比\(g(D,A)\)定义为其信息增益\(g(D,A)\)与训练数据集D的经验熵\(H(D)\)之比:

\[g_R(D,A)=\frac{g(D,A)}{H(D)} \tag{5.10} \]

ID3

ID3算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树.具体方法是:从根结点(root node)开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止.最后得到一个决策树.ID3相当于用极大似然法进行概率模型的选择.

image-20240311161745738

缺陷:容易产生过拟合

C4.5

C4.5 算法与ID3算法相似,在生成的过程中,用信息增益比来选择特征.

image-20240311162033948

决策树的剪枝

决策树生成学习局部的模型,而决策树剪枝学习整体的模型.

决策树的剪枝往往通过极小化决策树整体的损失函数(loss function)来实现.

设树\(T\)的叶结点个数为\(|T|\)\(t\)是树\(T\)的叶结点,该叶结点有 \(N_t\)个样本点,其中\(k\)类的样本点有\(N_{tk}\)个,\(k = 1,2,…,K\)\(H_t(T)\)为叶结点\(t\)上的经验熵,\(\alpha≥0\)为参数,则决策树学习的损失函数可以定义为

\[C_\alpha(T)=\sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T| \tag{5.11} \]

其中经验熵为

\[H_t(T)=-\sum_k\frac{N_{tk}}{N_t}\log\frac{N_{tk}}{N_t} \tag{5.12} \]

将式子(5.11)右端记作

\[C(T)=\sum_{t=1}^{|T|}N_tH_t(T)=-\sum_{t=1}^{|T|}\sum_{k=1}^KN_{tk}\log\frac{N_{tk}}{N_t} \tag{5.13} \]

\[C_\alpha(T)=C(T)+\alpha|T| \tag{5.14} \]

式(5.14)中,\(C(T)\)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,\(|T|\)表示模型复杂度,参数\(\alpha≥0\)控制两者之间的影响.较大的\(\alpha\)促使选择较简单的模型(树),较小的\(\alpha\)促使选择较复杂的模型(树). \(\alpha=0\)意味着只考虑模型与训练数据的拟合程度,不考虑模型的复杂度.

image-20240311163457554

CART 算法

CART是在给定输入随机变量\(X\)条件下输出随机变量\(Y\)的条件概率分布的学习方法.CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支.这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布.

CART 回归树的生成

image-20240313214209809

CART 分类树生成

分类树用基尼指数选择最优特征,同时决定该特征的最优值切分点。

基尼指数:分类问题中,假设有K个类,样本点属于第k类的概率为p,则概率分布的基尼指数定义为

\[\text{Gini}(p)=\sum_{k=1}^Kp_k(1-p_k)=1-\sum_{k=1}^Kp_k^2 \tag{5.22} \]

对于二类分类问题,若样本点属于第1个类的概率是\(p\), 则概率分布的基尼指数为

\[\text{Gini}(p)=2p(1-p) \tag{5.23} \]

对于给定的样本集合\(D\),其基尼指数为

\[\text{Gini}=1-\sum_{k=1}^K \left (\frac{|C_k|}{|D|} \right)^2 \tag{5.24} \]

这里,\(C_k\)\(D\) 中属于第 \(k\) 类的样本子集,\(K\)是类的个数。直观地说,基尼指数就是随便从样本集合中随机抽取两个样本,其类别标记不一致的概率。

如果样本集合 \(D\) 根据特征 \(A\) 是否取某一可能值 \(a\) 被分割成 \(D_1\)\(D_2\) 两部分, 即

\[D_1=\{(x, y) \in D \mid A(x)=a\}, \quad D_2=D-D_1 \]

则在特征 \(A\) 的条件下,集合 \(D\) 的基尼指数定义为

\[\operatorname{Gini}(D, A)=\frac{\left|D_1\right|}{|D|} \operatorname{Gini}\left(D_1\right)+\frac{\left|D_2\right|}{|D|} \operatorname{Gini}\left(D_2\right) \]

基尼指数 \(\operatorname{Gini}(D)\) 表示集合 \(D\) 的不确定性, 基尼指数 \(\operatorname{Gini}(D, A)\) 表示经 \(A=a\) 分割后集合 \(D\) 的不确定性. 基尼指数值越大, 样本集合的不确定性也就越大, 这一点与熵相似.

image-20240311170522895

CART剪枝

CART 剪枝算法由两步组成

  1. 首先从生成算法产生的决策树 \(T_0\) 底端开始不断剪枝, 直到 \(T_0\) 的根结点, 形成一个子树序列 \(\left\{T_0, T_1, \cdots, T_n\right\}\)
  2. 然后通过交叉验证法在独立的验证数据集上对子树序列进行测试, 从中选择最优子树.

剪枝

在剪枝过程中, 计算子树的损失函数:

\[C_\alpha(T)=C(T)+\alpha|T| \]

其中, \(T\) 为任意子树, \(C(T)\) 为对训练数据的预测误差 (如基尼指数), \(|T|\) 为子树的叶结点个数, \(\alpha \geqslant 0\) 为参数, \(C_\alpha(T)\) 为参数是 \(\alpha\) 时的子树 \(T\) 的整体损失. 参数 \(\alpha\) 权衡训练数据的拟合程度与模型的复杂度.

Breiman 等人证明: 可以用递归的方法对树进行剪枝. 将 \(\alpha\) 从小增大, \(0=\) \(\alpha_0<\alpha_1<\cdots<\alpha_n<+\infty\), 产生一系列的区间 \(\left[\alpha_i, \alpha_{i+1}\right), i=0,1, \cdots, n\); 剪枝得到的子树序列对应着区间 \(\alpha \in\left[\alpha_i, \alpha_{i+1}\right), i=0,1, \cdots, n\) 的最优子树序列 \(\left\{T_0, T_1, \cdots, T_n\right\}\), 序列中的子树是联套的.

具体地, 从整体树 \(T_0\) 开始剪枝. 对 \(T_0\) 的任意内部结点 \(t\), 以 \(t\) 为单结点树的损失函数是

\[C_\alpha(t)=C(t)+\alpha \tag{5.27} \]

\(t\) 为根结点的子树 \(T\) 的损失函数是

\[C_\alpha\left(T_t\right)=C\left(T_t\right)+\alpha\left|T_t\right| \tag{5.28} \]

\(\alpha=0\)\(\alpha\) 充分小时, 有不等式

\[C_\alpha\left(T_t\right)<C_\alpha(t) \tag{5.29} \]

\(\alpha\) 增大时, 在某一 \(\alpha\)

\[C_\alpha\left(T_t\right)=C_\alpha(t) \tag{5.30} \]

\(\alpha\) 再增大时, 不等式 (5.29) 反向. 只要 \(\alpha=\frac{C(t)-C\left(T_t\right)}{\left|T_t\right|-1}, T_t\)\(t\) 有相同的损失函数值, 而 \(t\) 的结点少, 因此 \(t\)\(T_t\) 更可取, 对 \(T_t\) 进行剪枝.

为此, 对 \(T_0\) 中每一内部结点 \(t\), 计算

\[g(t)=\frac{C(t)-C\left(T_t\right)}{\left|T_t\right|-1} \]

它表示剪枝后整体损失函数减少的程度。

\(T_0\) 中剪去 \(g(t)\) 最小的 \(T_t\), 将得到的子树作为 \(T_1\), 同时将最小的 \(g(t)\) 设为 \(\alpha_1 . T_1\) 为区间 \(\left[\alpha_1, \alpha_2\right)\) 的最优子树.

如此剪枝下去, 直至得到根结点. 在这一过程中, 不断地增加 \(\alpha\) 的值, 产生新的区间.

交叉验证

在剪枝得到的子树序列 \(T_0, T_1, \cdots, T_n\) 中通过交叉验证选取最优子树 \(T_\alpha\)

具体地, 利用独立的验证数据集, 测试子树序列 \(T_0, T_1, \cdots, T_n\) 中各棵子树的平方误差或基尼指数. 平方误差或基尼指数最小的决策树被认为是最优的决策树. 在子树序列中, 每棵子树 \(T_1, T_2, \cdots, T_n\) 都对应于一个参数 \(\alpha_1, \alpha_2, \cdots, \alpha_n\). 所以, 当最优子树 \(T_k\) 确定时, 对应的 \(\alpha_k\) 也确定了, 即得到最优决策树 \(T_\alpha\).

现在写出 CART 剪枝算法.

image-20240311171553746

预剪枝

  • 提前终止某些分支的生长

根据验证集,验证如果对该节点进行划分,划分前后决策树性能是否下降。可以考虑比如准确率,召回率等指标进行评判。

posted @ 2024-08-27 09:03  Un-Defined  阅读(6)  评论(0编辑  收藏  举报