在前面我们学习了KNN是一种基本的分类和回归方法。今天我们继续来学习另一个也能进行分类和回归的方法——决策树(Decision Tree)。那么对此,决策树到底是如何做出决策的呢?请接下来往下看——

机器学习决策树 计算条件熵 决策树中熵的作用_决策树

思维导图(内容概览)

机器学习决策树 计算条件熵 决策树中熵的作用_机器学习决策树 计算条件熵_02

衡量标准

对于一个统计学习方法,我们需要从模型+决策+算法逐步入手。但是在认识模型之前,特征的选取又是显得特别重要,在决策树法中,存在一些比较重要的概念,即选取特征的标准

  • 评估离散程度常用的有方差、熵、基尼指数
  • 方差:适用于连续随机变量,数值有实际意义。
  • :适用于离散随机变量,数值没有实际意义。
  • 基尼指数:适用于离散随机变量,数值没有实际意义。
  • :用于表示随机变量的不确定(混乱)程度,记作
    \[H(X) = -\sum_{i=1}^n p_i \log p_i \]
  • 条件熵:在一直随机变量X的条件下,随机变量Y的不确定性(混乱程度)记作
    \[H(Y|X) = \sum_{i=1}^np_iH(Y|X=x_i) \]
  • 信息增益:在得知特征X的信息而使得类Y的信息的不确定性减少程度,记作
    \[g(D, A) = H(D) - H(D|A) \]
  • 信息增益比
  • 信息增益的缺陷:偏向于选择取值较多的特征。
  • 概念:对于A特征的信息增益比,就是信息增益与训练数据集关于特征A的熵之比,记作
    \[g_r(D, A) = \frac{g(D, A)}{H_A(D)} \]
  • 基尼指数(K为类别数量,Pk为属于k类的概率)定义为:
    \[Gini(p) = \sum_{k=1}^Kp_k(1-p_k) = 1 - \sum_{k=1}^Kp^2_k \]
  • 在特征A的条件下,集合D的基尼指数定义为

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

决策树模型

定义:分类决策树模型是一种描述对实例进行分类的树形结构。决策树由节点和有向边组成,结点有两种类型:内部结点和叶结点。内部结点表示一个特征或属性,叶结点表示一个类。用决策树分类,从根结点开始,对实例的某一个特征进行测试,根据测试结果,将实例分配到其子结点;这时,每一个子结点对应着该特征的一个取值。如此递归下去,直至到达叶结点。最后将所有实例进行分类

决策树模型示意图:

机器学习决策树 计算条件熵 决策树中熵的作用_决策树_03

损失函数和剪枝(Pruning)策略

在决策模型中,会存在一个很重要的步骤,那就是剪枝,剪枝能决定最后的决策树的样子。

当遇到一系列的连续值,这是该怎么办?此时需要将连续值进行离散化,也即是需要选取连续值的分界点

  • 剪枝的原因:决策树的过拟合风险过大时,每个叶子节点就分成了一个数据,结果不太如意。
  • 剪枝策略:预剪枝,后剪枝。
  • 预剪枝:边建立决策树边进行剪枝的操作(更加实用),比如在选择若干个特征进行先构造决策树。限制深度,叶子节点个数、叶子样本点数、信息增益量等;
  • 后剪枝:边建立完决策树后进行剪枝操作。通过一定的衡量标准,叶子节点越多,损失越大。

DT模型是以极小化决策树的整体损失函数或代价函数,可定义如下:

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

  • 前半部分表示对训练数据的拟合程度。
  • 后半部分表现模型复杂程度。
  • 用于对树规模的惩罚程度,取值为0是表示只考虑模型与训练数据的拟合程度,不考虑模型复杂度,取值正无穷时则刚好相反。

决策树的生成算法

  • 如何切分特征
  • 根节点的选择应该用哪一个特征?该如何切分?
  • 根节点的目标是通过一种衡量标准,来计算通过不同特征进行分支选择后的分类的情况,找出最好的那个作为根节点,以此类推。
  • 类别:每一种算法不同,衡量标准也不相同。
  • **ID3算法:信息增益 **
  • C4.5:信息增益率(解决了ID3的问题,考虑自身的熵)
  • CART:使用GINI系数作为衡量标准
  • GINI系数
    \[G_{ini}(p) = \sum_{k=1}^k{p_k(1-p_k)} = 1-\sum_{k=1}^Kp_k^2 \]

ID3算法

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

算法描述:

\[输入:训练数据集D,特征集A,阈值\varepsilon;\\ 输出:决策树T.\\ (1) 若D中所有实例属于同一个类C_K,则T为单节点树,并将C_K作为该节点的类标记,返回T;\\ (2) 若A=\phi,则T为单节点树,并将D中实例数最大的类C_K作为该节点的类标记,返回T.\\ (3) 否则,计算A中特征对D的信息增益,选择信息增益最大的特征A_g;\\ (4) 如果A_g的信息增益小于阈值\varepsilon,则置T为单节点树,并将D中实例中最大的类作为该节点的类标记,返回T;\\ (5) 否则,对A_g每一个可能值a_i,依A_g=a_i将D分割为若干个非空子集D_i,将D_i中实例数最大的类为该节点的标记,\\构建子节点,由结点以及子节点构成树T,返回T;\\ (6) 对第i个子节点,以D_i为训练集,以A-\{A_g\}为特征集,递归地调用(1)~(5),得到子树T_i,返回T。 \]

C4.5算法

C4.5算法和ID3算法相似,并对ID3算法做了改进。其核心是采用信息增益比来选取特征。

\[输入:训练数据集D,特征集A,阈值\varepsilon;\\ 输出:决策树T.\\ (1) 若D中所有实例属于同一个类C_K,则T为单节点树,并将C_K作为该节点的类标记,返回T;\\ (2) 若A=\phi,则T为单节点树,并将D中实例数最大的类C_K作为该节点的类标记,返回T.\\ (3) 否则,计算A中特征对D的信息增益比,选择信息增益比最大的特征A_g;\\ (4) 如果A_g的信息增益小于阈值\varepsilon,则置T为单节点树,并将D中实例中最大的类作为该节点的类标记,返回T;\\ (5) 否则,对A_g每一个可能值a_i,依A_g=a_i将D分割为若干个非空子集D_i,将D_i中实例数最大的类为该节点的标记,\\构建子节点,由结点以及子节点构成树T,返回T;\\ (6) 对第i个子节点,以D_i为训练集,以A-\{A_g\}为特征集,递归地调用(1)~(5),得到子树T_i,返回T。 \]

CART算法

CART算法包含两步:决策树生成和决策树剪枝

CART生成

决策树生成就是递归构建二叉决策树的过程。对回归树使用平方误差最小化准则,对分类书用基尼指数(GINI INDEX)组笑话准则,进行特征选择,生成二叉树。

  1. 回归树的生成
    通常使用最小二乘回归树生成算法进行生成回归树。
    \[输入:训练数据集D;\\ 输出:回归树f(x).\\ 在训练集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建决策树:\\ (1) 选择最优的切分变量j与切分点s,求解 \\ min_{j,s}[min_{c_j}\sum_{x_j\in R_1(j,s)}(y_i-c_i)^2+min_{c_j}\sum_{x_j\in R_2(j,s)}(y_i-c_i)^2],遍历j,对j的切分点s,选择最小的(j,s);\\ (2) 用选定的对(j,s)划分区域并决定相应的输出值:\\ R_1(j,s)=\{x|s(j) \leq s\},R_2(j,s)=\{x|s(j) > s\} \hat{c_m}=\frac{1}{N_m}\sum{y_i},x\in R_m,m=1,2 \\ (3) 继续对两个子区域调用步骤(1),(2),直至满足条件;\\ (4)将输入空间划分成M个区域R_1,R_2,R_3...R_M,生成决策树。\\ f(x)=\sum^M_{m=1}\hat{c_m}I(x\in R_m) \]
  2. 分类树的生成
    分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。
    CART生成算法描述:
    \[输入:训练数据集D,停止计算的条件;\\ 输出:CART决策树.\\ 根据训练数据集,从根结点开始,递归地对每一个结点进行如下操作,构建决策树:\\ (1)设结点地训练集为D,计算现有特征对该数据集的基尼指数。此时,对每一个特征A,对可能取得每一个值a,\\ 根据样本点对A=a得测试为"是"或"否"将D分割成D_1和D_2,计算A=a得基尼指数。\\ (2)在所有可能得特征A和可能得切分点a中,选择最小的基尼指数得特征以及对应的切分点。\\ 由此,从现结点生成两个子结点,将训练集依特征分配到两个子结点中去。\\ (3)对两个子节点递归调用(1),(2),直至满足条件;\\ (4) 生成CART决策树。 \]