07. 决策树

一、决策树

  决策树(Decision Tree)是一种基于树形结构的算法,它根据一系列条件判断逐步划分数据,缩小范围,最终得到预测结果。决策树由 4 部分组成。

  • 根节点:树的节点,包含所有数据。
  • 内部节点:表示特征上的判断条件。
  • 分支:根据判断分支分出的路径。
  • 叶节点:最终分类或回归的结果。

  决策树适用于需要规则化、可解释性和快速决策的场景,尤其在数据特征明确、样本量适中的情况下表现良好。在复杂任务中,它常作为基础模型,与继承学习结合(如随机深林、梯度提升树)以提升性能。

二、工作过程

  决策树的学习通常包括 3 个步骤:特征选择决策树的生成决策树的剪枝

  如果特征数量很多,可以在决策树学习之前对特征进行选择,只留下对训练数据有足够分类能力的特征。

  学习时通常是递归选择最优特征,并根据该特征对训练数据进行划分,使得各个子数据集有一个最好的分类。

  1. 首先构建根节点,将所有训练数据都放在根节点。
  2. 选择一个最优特征,按照这一特征将训练数据集划分为子集,使得各个子集有一个在当前条件下最好的分类。
  3. 如果这些子集已经能够被基本正确分类,那么构建叶节点,并将这些子集分到对应的叶节点中去。如果还有子集不能被基本正确分类,那么就对这些子集选择新的最优特征,继续对其进行划分并构建相应的节点。
  4. 如此递归直至所有训练数据子集能被基本正确分类,或者没有合适的特征为止。

  最后每个子集都被划分到叶节点上,即都有了明确的类,这就生成了一个决策树。决策树的每次划分都相当于在特征空间中引入一个超平面将当前控件一分为二。

  以上方法生成的决策树可能对训练数据有很好的分类能力,但对未知的测试数据却未必,即可能发生拟合现象。因此需要对已生成的树自下而上进行剪枝,将树变得更简单,从而使它具有更好的泛化能力。具体地,就是去掉过去细分的叶节点,使其回退到父节点或更高的节点,然后将父节点或更高的节点改为新的叶节点。

决策树的生成只考虑局部最优,决策树的剪枝则考虑全局最优。

2.1、特征选择与决策树生成

  特征选择在于选取对训练数据具有分类能力的特征,这样可以提高决策树的学习效率。如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个这个特征是没有分类能力的,经验上扔掉这样的特征对决策树学习的精度影响不大。通常特征选择的准则是信息增益或者信息增益率。

【1】、信息熵

  信息熵是表示随机变量不确定性的度量,设 X 是一个取有限个值的离散随机变量,其概率分布为:

\[P(X = x_{i}) = p_{i}, i=1,2,...,n \]

  随机变量 X 的熵定义为:

\[H(X) = -\sum_{i=1}^{n}p_{i}logp_{i} \]

  若 \(p_{i} = 0\) ,则定义 \(0log0=0\),通常式中对数以 2 或 e 为底。

  在 n=2 的情况下,假设 X 的概率分布为:

\[P(X=1) = p, P(X=0) = 1 - p \]

  则 X 的信息熵为:

\[H(X) = -p.logp - (1-p)log(1 - p) \]

  熵只依赖 X 的分布,与 X 的取值无关。熵越大,随机变量的不确定就越大。

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

\[P(X = x_{i}, Y = y_{i}) = p_{ij}, i = 1,2,...,n; j=1,2,...,n \]

  条件熵 H(Y|X) 表示在已知随机变量 X 的条件下随机变量 Y 的不确定性。

\[H(Y|X) = \sum_{i=1}^{n}P(X=x_{i})H(Y|X=x_{i}) \]

【2】、信息增益与 ID3

  决策树学习应用信息增益准则选择特征,给定训练集数据 D 和特征 A,熵 H(D) 表示对数据集进行分类的不确定性,条件熵 H(D|A) 表示在特征 A 给定条件下对数据集 D 进行分类的不确定性。两者之差即 信息增益

\[g(D, A) = H(D) - H(D|A) \]

  该公式表示由于特征 A 而使得对数据集 D 的分类的不确定性减少的程度。对数据集 D 而言,信息增益依赖于特征,不同的特征具有不同的信息增益,信息增益较大的特征具有更强的分类能力。在进行特征选择时,对训练数据集 D 计算每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。

  这里,我们假设:

  • 训练数据集 D 有 \(\abs{D}\) 个样本。
  • 特征 A 有 n 个不同的取值 \(\set{a_{1}, a_{2}, ..., a_{n}}\),根据特征 A 将 D 划分为 n 个子集 \(D_{1},D_{2}, ..., D_{n}\)\(D_{i}\) 的样本个数为 \(\abs{D_{i}}\)
  • 有 K 个类 \(C_{k}\),每个类有 \(\abs{C_{k}}\) 个样本。
  • 子集 \(D_{i}\) 中属于类 \(C_{k}\) 的样本的集合为 \(D_{ik}(D_{ik} = D_{i} \cap C_{k})\)\(D_{ik}\) 的样本个数为 \(\abs{D_{ik}}\)

  信息增益计算方法如下:

(1)、计算数据集 D 的熵 H(D)

\[H(D) = -\sum_{k=1}^{k}\frac{\abs{C_{k}}}{\abs{D}} log_{2}\frac{\abs{C_{k}}}{D} \]

(2)、计算特征 A 对数据集 D 的条件熵 H(D|A)

\[H(D|A) = \sum_{i=1}^{n}\frac{\abs{D_{i}}}{\abs{D}}H(D_{i}) = -\sum_{i=1}^{n}\frac{\abs{D_{i}}}{\abs{D}}\sum_{k=1}^{k}\frac{\abs{D_{ik}}}{\abs{D_{i}}}log_{2}\frac{\abs{D_{ik}}}{D_{i}} \]

(3)、计算信息增益

\[g(D, A) = H(D) - H(D|A) \]

  ID3 算法在决策树各个节点上应用信息增益选择特征,递归地构建决策树。具体方法是:从根节点开始,计算所有可能的信息增益,选择信息增益最大的特征作为节点特征,由该特征的不同取值建立子节点,再依次对子节点进行上述操作,直到所有特征信息增益均很小或无特征可选为止,最终生成一颗决策树。

【3】、信息增益率与 C4.5

  使用信息增益划分训练数据集的特征,会倾向于先择取值较多的特征,而使用信息增益率可以对这一问题进行校正,这是特征选择的另一个准则。

  特征 A 对训练数据集 D 的信息增益率 \(g_{R}(D,A)\) 定义为信息增益 \(g(D,A)\) 与训练数据集 D 关于特征 A 的值的熵 \(H_{A}({D})\) 之比:

\[g_{R}(D,A) = \frac{g(D,A)}{H_{A}(D)} \]

  其中\(H_{A}(D) = \sum_{i=1}^{n}\frac{\abs{D_{i}}}{D}log_{2}\frac{\abs{D_{i}}}{\abs{D}}\),n 是特征 A 的提取个数。

【4】、基尼指数与 CART

  有 K 个类,样本属于第 k 类的概率为 \(p_{k}\),则概率分布的基尼指数:

\[Gini(p) = \sum_{k=1}^{K}p_{k}(1 - p_{k}) = 1 - \sum_{k=1}^{K}P^{2}_{k} \]

  对于给定的样本集合 D,其基尼指数:

\[Gini(D) = 1 - \sum_{k=1}^{K}(\frac{\abs{C_{k}}}{\abs{D}})^{2} \]

  这里 \(C_{k}\) 是 D 中属于第 k 类的样本子集,K 是类的个数。

  如果样本集合 D 根据 A 是否取某一可能值 a 被划分为两个子集 \(D_{1}, D_{2}\),则在特征 A 的条件下,集合 D 的基尼指数:

\[Gini(D, A) = \frac{\abs{D_{1}}}{\abs{D}}Gini(D_{1}) + \frac{\abs{D_{2}}}{\abs{D}}Gini(D_{2}) \]

  基尼指数 \(Gini(D)\) 表示集合 D 的不确定性,基尼指数 \(Gini(D, A)\) 表示经 A = a 划分后集合 D 的不确定性。基尼指数越大样本集合的不确定性也越大,这与信息熵相似。

  CART 决策树是一颗二叉树,根据基尼指数生成决策树,对训练数据集 D 的每个特征 A 的每一个可能的取值 a,计算 A = a 时的基尼指数,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点,并生成两个子节点,将训练数据集依特征分片到两个子节点中。重复上述过程,直到节点中样本数小于阈值、或样本集的基尼指数小于阈值、或没有更多特征。

2.2、剪枝

  决策树出现过拟合的原因在于学习时过多的考虑如何提高对训练数据的正确分类,从而构建出过于复杂的决策树。为了避免过拟合,可以对已生成的决策树进行剪枝,从决策树上裁掉一些子树或叶节点,并将其根节点或父节点作为新的叶节点,从而简化模型。

  决策树的剪枝通常分为 预剪枝后剪枝

  预剪枝 是在决策树生成过程中,通过设置一些限制条件提前停止树的生成,避免过度分裂。常见的停止条件有:限制最大树深度限制每个节点最小样本数限制最小的误差减少量限制最大叶节点数量 等。但过于严格的停止条件可能导致欠拟合,并且可能难以确定最佳阈值、需要多次尝试。

  后剪枝 是在决策树完全生成之后,基于某种评估准则从底部向上局部判断是否移除分支。常见的后剪枝方法有:代价复杂度剪枝减少误差剪枝 等。

posted @ 2026-01-17 22:02  星光映梦  阅读(2)  评论(0)    收藏  举报