统计学习-决策树
是一种分类与回归方法, 根据损失函数最小化原则建立决策模型, 预测时, 对新数据, 利用决策树模型进行分类. 学习时包括三个步骤:
- 特征选择
- 决策树生成
- 决策修剪
主要有ID3, C4.5, CART算法
决策树可以表示为一系列if-then规则的集合, 这些规则集合是互斥并完备的.
也可以表示给定特征条件下类的条件概率分布. 这一条件概率分布定义在特征空间的一个划分上, 将特征空间划分为互不相交的单元或区域, 并在每个单元定义一个类的概率分布就构成了一个条件概率分布. 决策树的一条路径对应于划分中的一个单元, 决策树所表示的条件概率分布由各个单元给定条件下类的条件概率分布组成. 假设X为表示特征的随机变量, Y为表示类的随机变量, 那么这个条件概率分布要以表示为\(P(Y|X)\), \(X\)聚会于给定划分下单元的集体, Y聚会于类的集合. 各叶结点(单元)上的条件概率往往偏向某一个类, 即属于某一类的概率较大. 决策树分类时将该结点的实例强行分类到条件概率大的那一类去.
决策树学习本质上是从训练数据集中归纳出一组分类规则. 与训练数据集不相矛盾的决策树可能有多个, 也可能一个也没有, 我们需要的是一个与训练数据矛盾较小的决策树, 同时具有很好的泛化能力, 从另一个角度看, 决策树学习是由训练数据集估计条件概率模型. 基于特征空间划分的类的条件概率模型有无穷多个. 我们选择的条件概率模型应该不仅对训练数据有很好的拟合, 而且对未知数据有很好的预测.
决策树学习用损失函数表示这一目标, 其损失函数通常是正则化的极大似然函数, 决策树学习的策略是以损失函数为目标函数的最小化.
当损失函数确定以后, 学习问题就变为在损失函数意义下选择最优决策树的问题. 但是从所有可能的决策树中选取最优决策树是个NP完全问题, 所以现实中决策树学习算法通常采用启发方式, 近似求解这一最优化问题, 这样得到的决策树是次最优的.
决策树学习的算法通常是一个递归地选择最优特征分类的过程, 这一过程对应着对特征空间的划分, 也对应着决策树的构建. 这一方式通常对训练数据有很好的分类能力, 但是对未知的测试数据却未必有很好的分类能力, 即可能发生过拟合现象. 因为我们需要对已生成的树自下而上进行uesc, 将树变得更简单, 从而使它具有更好的泛化能力.
特征选择
特征选择在于选取对训练数据具有分类能力的特征. 这样可以提高决策树学习的效率. 如果利用一个特征进行分类的结果与随机分类的结果判别不大, 则称这个特征是没有分类能力的. 经验上扔掉这样的特征对决策树学习精确度影响不大. 通常特征选择的准则是信息增益或信息增益比.
熵: 表示随机变量不确定性的度量. 设\(X\)是一个取有限个值的离散随机变量, 其概率分布为 \begin{align} \notag P(X=x_i)=p_i, \qquad i=1,2,\cdots,n \end{align} 则随机变量\(X\)的熵定义为 \begin{align} H(p) = -\sum_{i=1}^n p_i \log p_i \end{align}
条件熵: 对于联合分布\(P(X, Y)\), 条件熵\(H(Y|X)\)表示在已知随机变量\(X\)时变量\(Y\)的不确定性, 定义为\(X\)给定的情况下\(Y\)的条件概率分布的熵对\(X\)的期望: \begin{align} H(Y|X) = \sum_{i=1}^n P(X=x_i) H(Y|X=x_i) \end{align}
信息增益: 表示得知特征\(X\)的信息而使用类\(Y\)的信息的不确定性减少的程度. 具体地, 特征\(A\)对训练数据集\(D\)的信息增益\(g(D, A)\)表示为集合\(D\)的经验熵\(H(D)\)与特征\(A\)给定条件下\(D\)的经验条件熵\(H(D|A)\)之差, 即 \begin{align} g(D,A) = H(D) - H(D|A) \end{align}
互信息: 熵\(H(Y)\)与条件熵\(H(Y|X)\)之差
信息增益大的特征具有更强的分类能力
信息增益比: \begin{align} g_R(D,A)=\frac{g(D,A)}{H(D)} \end{align}
决策树生成
ID3算法
输入: 训练数据集\(D\), 特征集\(A\), 阈值\(\varepsilon\), 类集\(Y\)
输出: 决策树\(T\)
步骤:
- 若\(D\)中所有实例属于同一类\(C_k\), 则\(T\)为单结点树, 结点类标记为\(C_k\)
- 若\(A=\varnothing\), 则\(T\)为单结点树, 结点类标记为实例数最大的类\(C_k\)
- 计算\(A\)中各个特征对\(D\)的信息增益, 选择信息增益最大的特征\(A_g\)
- 若其增益小于\(\varepsilon\), 则\(T\)为单结点树, 结点类标记为实例数最大的类\(C_k\)
- 否则根据\(A_g\)的取值将\(D\)分为若干个非空子集\(D_i\), 将\(D_i\)中实例数最大的类作为此结点的类标记, 构建子结点, 结点上的数据集为\(D_i\)
- 以\(A-{A_g}\)为特征集, 递归调用步骤
1-5, 得到结点类别及子树\(T_i\)
C4.5算法
与ID3算法完全相同, 只不过将信息增益换成了信息增益比
剪枝
通常通过极小化决策树整体的损失函数实现
对于决策树\(T\), 假定\(t\)是其一个叶结点, 相应的样本点数量为\(N_t\), 第\(k\)类样本数量为\(N_{tk}\), 则该结点的经验熵为 \begin{align} H_t(T) = -\sum_k \frac{N_{tk}}{N_t} \log \frac{N_{tk}}{N_t} \end{align} 定义其正则化损失函数\begin{align} C_\alpha (T) &= \sum_{t=1}^{\left|T\right|T}N_tH_t(T) + \alpha \left|T\right| \\ &=C(T) + \alpha \left|T\right| \end{align} 其中\(a \geqslant 0\)为参数, \(C(T)\)的统计意义为决策树为训练数据集的预测误差. 剪枝的过程即在确定\(\alpha\)时选择损失函数最小的\(T\)
剪枝算法
输入: 树\(T\), 参数\(\alpha\)
输出: 修剪后的树\(T_\alpha\)
步骤:
- 计算每个结点(包含内部结点)的经验熵
- 递归进行, 如果一个结点的子结点全部为叶结点, 并且其熵比其各个子结点的熵之和要小, 则将其子结点合并到该结点, 形成一个新的叶结点, 得到新树\(T_\alpha\)
CART算法
分类与回归树(classification and regression tree, CART)是在给定输入随机变量\(X\)条件下输出随机yyojg\(Y\)的条件概率分布的学习方法. CART假设决策树是二叉树, 内部结点特征的聚会为"是"和"否", 左支为"是", 右支为"否". 算法分两步:
- 决策树生成: 基于训练数据集生成决策树, 生成的决策树要尽量大
- 决策树剪枝: 用难数据集对已生成的树进行剪枝并选择最优子树, 这时用损失函数最小作为剪枝的标准.
决策树生成
即递归地构建二叉决策树的过程, 对回归树用平方误差最小化准则, 对分类树用基尼指数最小化准则, 进行特征选择, 生成二叉树.
(回归问题: 输入和输出均连续)
回归树生成
输入: 训练数据集\(D\)
输出: 回归树\(f(x)\)
- 选择最优切分变量\(j\)与切分点\(s\), 即求解 \begin{align} \arg \min_{j,s}\left[\min_{c_1} \sum_{x_i \in R_1(j,s)} \left( y_i - c_1\right)^2 + \min_{c_2} \sum_{x_i \in R_2(j, s)} \left( y_i + c_2\right) ^ 2 \right] \end{align} 其中\(c_1\)和\(c_2\)为相应区间的\(Y\)的均值.
- 根据选定的\((j, s)\)将区域输入空间划分为两个部分\(R_1\)和\(R_2\), 相应的输出值为\(c_1\)和\(c_2\), 为区间的输出空间的平均值
- 对子区域递归进行步骤
1和2, 直到满足停止条件(这里需要把已切分的维度排除掉吗?) - 得到决策树 \begin{align} f(x) = \sum_{m=1}^M \hat{c}_mI(x\in R_m) \end
分类树生成
基尼指数: 分类问题中, 假设有\(K\)个类, 样本点属于第\(k\)类的概率为\(p_k\), 则概率分布的基尼指数定义为 \begin{align} \text{Gini} (p) = \sum_{k=1}^K p_k(1-p_k) = 1 - \sum_{k=1}Kp_k2 \end{align} 对于二分类问题, 若样本点属于第1个类的概率为\(p\), 则概率分布的基尼指数为\begin{align} \text{Gini} (p) = 2p(1-p) \end{align} 对于给定的样本集合\(D\), 基尼系数为 \begin{align} \text{Gini} (D) = 1 - \sum_{k=1}K\left(\frac{\left|C_k\right|}{\left|D\right|}\right)2 \end{align} 即采用经验概率分布. 如果样本集合\(D\)根据特征\(A\)是否取某一可能值\(a\)被分割成\(D_1\)和\(D_2\)两部分, 则在特征\(A\)的条件下, 集合\(D\)的基尼系数定义为 \begin{align} \text{Gini} (D, A) = \frac{\left|D_1\right|}{\left|D\right|}\text{Gini} (D_1) + \frac{\left|D_2\right|}{\left|D\right|}\text{Gini} (D_2) \end{align} \(\text{Gini} (D)\)表示集合\(D\)的整体不确定性, \(\text{Gini} (D,A)\)表示经\(A=a\)分割后集合\(D\)的不确定性, 与熵性质相似.
输入: 训练数据集\(D\)
输出: 分类决策树
步骤:
- 计算所有特征的所有取值的基尼指数
- 选择基尼指数最小的特征及其取值作为切分点
- 对子空间递归进行1, 2
- 得到决策树
剪枝
正则化损失函数 \begin{align} C_\alpha(T) = C(T) + \alpha \left|T\right| \end{align} 其中\(C(T)\)是对训练数据的预测误差, 对于回归树, 为平方误差, 对于分类树, 则为基尼指数, \(\alpha>0\)为正则化项参数, 表示对结点数量\(\left|T\right|\)的修正.
输入: 原始生成的决策树\(T_0\)
输出: 最优决策树\(T_\alpha\)
步骤:
- 设\(k=0, T=T_0\)
- 设\(\alpha=+\infty\)
- 自下而上地对各内部结点\(t\)计算子树损失\(C(T_t)\), 子树结点数\(\left|T_t\right|\), 以及作为单结点时损失减少程度 \begin{align} g(t) &= \frac{C(t) - C(T_t)}{\left|T_t\right| - 1} \\ \alpha &=\min(\alpha, g(t)) \end
- 自上而下访问内部结点\(t\), 如果\(g(t) = \alpha\), 则进行剪枝, 并对叶结点\(t\)以多数表决法决定其类, 得到树\(T\)
- \(k += 1, \alpha_k=\alpha, T_k = T\)
- 如果\(T\)不是单结点树, 则回到步骤4(?)
- 采用交叉验证法在子树序列\(\{T_0, T_1, \cdots, T_n\}\)中选取最优指数\(T_\alpha\)

浙公网安备 33010602011771号