Machine Learning
  • Introduction
  • 机器学习
    • 前言
      • 符号表
    • 监督式学习
      • 感知机
        • 感知机模型
        • 感知机学习算法
        • 算法python实现
      • Logistic回归
        • Logistic分布
        • Logistic回归模型
        • 算法python实现
      • 线性回归
        • 线性回归模型
        • 算法python实现
      • K近邻法
        • k近邻模型
        • kd树方法
        • kd树python实现
        • knn实例
      • 朴素贝叶斯法
        • 模型和原理
        • 参数估计
        • 算法和实现
      • 决策树
        • 模型与学习
        • 特征选择
        • 生成算法和剪枝
        • python实现
      • 支持向量机
    • 神经网络
      • 神经元模型和感知机
      • 神经网络
      • 神经网络的矩阵表达
      • 反向传播算法
        • 算法证明
        • 算法代码
        • 基于矩阵的计算
      • 改进神经网络的学习方法
        • 交叉熵代价函数
        • softmax
        • regularization
        • 权重初始化
      • 卷积神经网络
        • 基本介绍
    • 数学基础
      • 线性代数
        • 特征值和特征向量
      • 概率统计
        • 随机变量的特征
        • 样本统计量
        • 先验后验概率
      • 微积分
        • 向量内积
        • 方向导数和梯度
        • 梯度下降法
      • 信息论
        • 熵
        • 相对熵和交叉熵
        • 条件熵
        • 互信息
Powered by GitBook
On this page
  • 1. 决策树生成算法
  • ID3算法
  • C4.5算法
  • 2. 决策树的剪枝
  • 决策树的剪枝算法
  1. 机器学习
  2. 监督式学习
  3. 决策树

生成算法和剪枝

Previous特征选择Nextpython实现

Last updated 7 years ago

1. 决策树生成算法

ID3算法

ID3算法的核心是在决策树各个节点上应用信息增益准则选择特征,递归地构建决策树。

具体方法是:从根节点开始,对节点计算所有可能的特征的信息增益,选择信息增益最大的特征作为节点的特征,由该节点的不同取值建立子节点。再对子节点递归使用同样的方法,构建决策树,直到所有特征的信息增益均很小或者没有特征可以选择为止。

输入:训练数据集DDD,特征集AAA,阈值ε\varepsilonε;

输出:决策树TTT

1)若DDD中所有实例属于同一类CkC_kCk​,则TTT为单节点树,并将类CkC_kCk​作为该节点的类标记,返回TTT。

2)若AAA为空,则TTT为单节点树,并将DDD中实例树最大的类CkC_kCk​作为该节点的类标记,返回TTT。

3)否则,计算AAA中各个特征对DDD的信息增益,选择信息增益最大的特征AgA_gAg​

4)如果AgA_gAg​的信息增益小于阈值ε\varepsilonε,则置TTT为单节点树,并将DDD中实例数最大的类CkC_kCk​作为该节点的类标记,返回TTT

5)否则,对AgA_gAg​的每一个可能值αi\alpha_iαi​,按照AgA_gAg​的可能取值将DDD分割成若干个非空子集DiD_iDi​,构造子节点,对于第iii个子节点,以DiD_iDi​为训练集,以A−{Ag}A-\{A_g\}A−{Ag​}为特征集,递归得进行步骤1-5,返回TiT_iTi​。

C4.5算法

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

2. 决策树的剪枝

决策树生成算法递归地产生决策树,一直到不能继续下去为止,这样产生的决策树对训练数据的分类很准确,但是对于未知的测试数据的分类却没有那么准确,即产生过拟合现象。

过拟合的原因在于学习时过多地考虑如何提高对训练数据的正确分类,从而构造出过于复杂的决策树。

在决策树学习中将生成的树进行简化的过程称为剪枝(prunning),具体地剪枝从已生成的树上减掉一些子树或叶节点,并将其根节点或父节点作为新的叶子节点,从而简化分类模型。

决策树的剪枝通过极小化决策树整体的损失函数(loss function)或代价函数(cost function)来实现。

于是可以将上面的式子转化为

决策树的剪枝算法

1)计算每个节点的经验熵

剪枝算法可以由一种动态规划的算法实现。

设树TTT的叶节点的个数为∣T∣|T|∣T∣,ttt是树TTT的叶节点,该叶节点有NtN_tNt​个样本点,其中kkk类的样本点有NtkN_{tk}Ntk​个,k=1,2,...,Kk=1,2,...,Kk=1,2,...,K,Ht(T)H_t(T)Ht​(T)为叶节点上的经验熵,则决策树学习的损失函数可以定义为:

Cα(T)=∑t=1∣T∣NtHt(T)+α∣T∣C_\alpha(T)=\displaystyle\sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T|Cα​(T)=t=1∑∣T∣​Nt​Ht​(T)+α∣T∣

其中α⩾0\alpha \geqslant0α⩾0,经验熵Ht(T)H_t(T)Ht​(T)为

Ht(T)=−∑k=1KNtkNtlog2NtkNtH_t(T)=-\displaystyle\sum_{k=1}^K \dfrac{N_{tk}}{N_t}\mathrm{log}_2 {\dfrac{N_{tk}}{N_t}}Ht​(T)=−k=1∑K​Nt​Ntk​​log2​Nt​Ntk​​
Cα(T)=−∑t=1∣T∣∑k=1KNtklog2NtkNt+α∣T∣=C(T)+α∣T∣C_\alpha(T)=-\displaystyle\sum_{t=1}^{|T|}\displaystyle\sum_{k=1}^K N_{tk}\mathrm{log}_2 {\dfrac{N_{tk}}{N_t}}+\alpha|T|=C(T)+\alpha |T|Cα​(T)=−t=1∑∣T∣​k=1∑K​Ntk​log2​Nt​Ntk​​+α∣T∣=C(T)+α∣T∣

C(T)C(T)C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,∣T∣|T|∣T∣表示模型复杂度,参数α\alphaα控制两者之间的影响,可以理解为正则化参数。较大的α\alphaα表示选择简单的模型,较小的α\alphaα表示选择较复杂的模型。

输入:生成算法产生的整个树TTT,参数α\alphaα

输出:修剪后的子树TαT_{\alpha}Tα​

2)递归地从树的叶节点向上回溯,假定一组叶节点回溯到父节点之前与之后的整体树分别为TBT_BTB​与TAT_ATA​,其对应的损失函数分别为Cα(TB)C_\alpha(T_B)Cα​(TB​)与Cα(TA)C_\alpha(T_A)Cα​(TA​),如果Cα(TA)⩽Cα(TB)C_\alpha(T_A)\leqslant C_\alpha(T_B)Cα​(TA​)⩽Cα​(TB​),则进行剪枝,即其父节点变为新的叶子节点。

3)返回步骤2,一直到不能继续位置,最后得到剪枝后的损失函数最小的子树TαT_\alphaTα​。