机器学习--决策树

机器学习--决策树

  • 一、概览
  • 二、理论知识
    • 2.1 决策树模型与学习
      • 2.1.1 决策树模型
      • 2.1.2 决策树与if-then原则
      • 2.1.3 决策树学习
    • 2.2 特征选择
      • 2.2.1 特征选取问题
    • 2.3 决策树的生成
      • 2.3.1 ID3算法
      • 2.3.2 C4.5算法
    • 2.4 决策树的剪枝
      • 2.4.1 预剪枝
      • 2.4.2 后剪枝
  • 总结


一、概览

一种对实例进行分类的树形结构,通过多层判断区分目标所属类别、
本质:通过多层判断,从训练数据集中归纳出一组分类规则。

优点:

  • 计算量小,运算速度快
  • 易于理解,可清晰查看各属性的重要性

缺点:

  • 忽略属性间的相关性
  • 样本类别分布不均匀时,容易影响模型表现

二、理论知识

2.1 决策树模型与学习

2.1.1 决策树模型

定义:分类决策树模型是一种描述对实例进行分类的树形结构。
决策树由节点和有向边组成。结点有两种类型:内部结点和叶结点。内部结点表示一个特征或属性,叶结点表示一个类。

用决策树分类,从根节点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到其子结点:这时,每一个子结点对应着该特征的一个取值。如此递归地对实例进行测试并分类,直至达到叶节点。

用大白话来说,就是对一个实例进行判断,直到该实例不需要进行判断的时候,停止。
例如,你是否有自己的房子,否;继续判断,你是否有工作,否…。

2.1.2 决策树与if-then原则

可以将决策树看成一个if-then规则的集合。将决策树转化成if-then规则的集合。将决策树转换成if-then规则的过程是这样的:

  1. 由决策树的根节点到叶节点的每一条路径构建一条规则
  2. 路径上内部结点的特征对应着规则的条件,而叶节点的类对应着规则的结论。

决策树上的路径或其对应的if-then规则集合具有一个重要的性质:互斥而且完备。每一个实例都是一条路径或者一条规则所覆盖,而且只被一条路径或一条规则所覆盖。

因为每条从根结点到各叶结点都是不同的路径,但这些路径加起来又包含了所有的选择。

2.1.3 决策树学习

假设给定训练数据集
D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } D=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} D={(x1,y1),(x2,y2),...,(xN,yN)}
其中, x i = ( x i ( 1 ) , x i ( 2 ) , . . . , x i ( n ) ) T x_i=(x_i^{(1)},x_i^{(2)},...,x_i^{(n)})^T xi=(xi(1),xi(2),...,xi(n))T为输入实例(特征向量),n为特征个数, y i ∈ { 1 , 2 , . . . , K } 为 y_i\in\{1,2,...,K\}为 yi{1,2,...,K}类标记, i = 1 , 2 , . . . , N , N i=1,2,...,N,N i=1,2,...,N,N为样本容量。决策树学习的目标是根据给定的训练数据集构建一个决策树模型,使他能够对实例进行正确的分类。

但我们也可以发现决策树可以有多个,这就取决于我们怎么定义分类的顺序,不同的排列组合,但我们应该选择一个不进对训练数据与很好的拟合,而且对未知数据有很好的预测。

决策树学习用损失函数表示这一目标。决策树学习的损失函数通常是正则化的极大似然函数。决策树学习的策略是以损失函数为目标函数的最小化。

当我们确定了损失函数,决策树的学习问题就变成了损失函数下选择最优决策树的问题。因为从所有可能的决策树中选取最优决策树是NP完全问题,所以现实中决策树学习算法通常采用启发式方法,近似求解这一最优化问题。这样得到的决策树是次最优化的。

NP完全问题:在超多项式时间内解决的问题是不易处理的,通俗来讲,就是以难以解决著称的问题。

决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有个最好的分类的过程。这一过程对应着特征空间的划分,也对应这决策树的构建。

大概步骤为:

  1. 开始,构建根节点,将所有训练数据都放在根节点。
  2. 选择一个最优特征,按照这一特征将训练数据集分割成子集,使各个子集都有一个在当前条件下最好的分类。
  3. 如果子集已经基本被正确分类,将子集放到新构建的子结点中;否则继续2步骤
  4. 直到所有的训练子集都已经基本被正确分类,或者没有合适的特征为止。

但是,以上方法生成的决策树可能对训练数据由很好的分类能力,但是对未知的测试数据却未必有很好的分类能力,即可能发生过拟合现象

拟合:曲线能否正确描述出样本的特性。
过拟合:太过贴近于训练数据的特征了,在训练集上表现非常优秀,但是在新的测试集上却很拉胯,不具泛化性。大白话来说,就是训练集上猛如虎,测试集上零杠五。
欠拟合:就是训练集的特征没学到,大白话来说,训练集上零杠五。

因此,我们需要对已生成的树自下而上进行剪枝,将数变得更简单,从而使它具有更好的泛化能力。具体的就是,去掉过于细分的叶结点,使其回退到父结点,甚至更高的结点,然后将父结点甚至更高的结点改为新的叶结点。

通过上述,我们发现决策树学习算法包括特征选择决策树的生成决策树的剪枝过程

决策树的生成对应于模型的局部选择
决策树的剪枝对应于模型的全局选择

决策树学习常用的算法有ID3,C4.5CART

2.2 特征选择

2.2.1 特征选取问题

特征选择在于选取对训练数据具有分类能力的特征。如果利用一个特征进行分类的结果与随机分类的结果没有区别,则称这个特征是没有分类能力的。因此如何选择有价值的特征就显得格外重要了。通常特征选择的准则是信息增益或者信息增益比。

首先我们,介绍一下信息增益

信息熵是度量样本集合中纯度常用的一种指标。假定当前样本集合 D D D 中第 k k k 类样本所占的比例为 p k ( k = 1 , 2 , . . . . , ∣ Y ∣ ) p_k(k=1,2,....,|Y|) pk(k=1,2,....,Y),则D的信息熵为
E n t ( D ) = ∑ k = 1 ∣ Y ∣ p k l o g 2 p k Ent(D)=\sum_{k=1}^{|Y|}{p_k}log_2{p_k} Ent(D)=k=1Ypklog2pk

E n t ( D ) Ent(D) Ent(D)的值越小,D的纯度越高

假定离散属性a有 V V V 个可能的取值 { a 1 , a 2 , . . . , a V } \{a^1,a^2,...,a^V\} {a1,a2,...,aV},若使用a对样本 D D D 进行划分,则产生 V V V个分支节点。其中第v个分支节点包含了D中所有在属性a上取值为 a v a^v av的样本,记为 D v D^v Dv。那么用属性a对样本D进行划分所获得的信息增益
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D,a)=Ent(D)-\sum_{v=1}^{V}{\frac{|D^v|}{|D|}Ent(D^v)} Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)
一般而言,信息增益越大,意味着使用属性a来进行划分所获得的纯度提升越大。著名的ID3算法就是以信息增益来选择划分属性的。

我们通过上述公式中 ∣ D v ∣ ∣ D ∣ \frac{|D^v|}{|D|} DDv也可以看出样本数越多的分支,影响越大。

实际上,信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,著名的C4.5算法采用了增益率来选择最优划分属性。增益率定义为
G a i n _ r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) , Gain\_ratio(D,a)=\frac{Gain(D,a)}{IV(a)}, Gain_ratio(D,a)=IV(a)Gain(D,a)
其中
I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D v ∣ ∣ D ∣ IV(a)=-\sum_{v=1}^{V}{\frac{|D^v|}{|D|}log_2{\frac{|D^v|}{|D|}}} IV(a)=v=1VDDvlog2DDv称为属性a的固有值,属性a的可能取值越多, I V ( a ) IV(a) IV(a)的值通常会变大,

2.3 决策树的生成

2.3.1 ID3算法

ID3算法的核心是在决策树各个节点上应用信息增益准则选择特征,递归的选择决策树。具体方法是:从根节点开始,对结点计算所有可能的信息增益,选择信息增益最大的特征作为节点的特征,由该特征的不同取值建立子节点,再对子节点递归的调用以上方法,构建决策树:直到所有特征的信息增益均很小或者没有特征可以选择为止,最后得到一个决策树。

算法为:
输入:训练数据集D,特征值集A阈值 ϵ \epsilon ϵ
输出:决策树T

  1. 若D中所有实例属于同一类 C k C_k Ck,则T为单节点树,并将类 C k C_k Ck该节点的类标记,返回T。
  2. 若A = ∅ \varnothing ,则T为单节点树。
  3. 否则,计算A中的各特征D的信息增益,选择信息增益最大的特征 A g A_g Ag
  4. 如果 A g A_g Ag的信息增益小于阈值 ϵ \epsilon ϵ ,则置T为单节点树,并将D中实例树最大的类 C k C_k Ck作为该节点的类标记。
  5. 否则,根据 A g A_g Ag去划分集合,重复步骤3

具体案例:

2.3.2 C4.5算法

C4.5的算法 与ID3的算法类似,区别在于C4.5选择特征的依据是信息增益比

2.4 决策树的剪枝

剪枝是决策树学习算法为了解决过拟合的主要方法。在决策树学习中,为了尽可能正确分类训练样本,结果划分过程将不断重复,有时会造成决策树分支过多,这时就可能因训练样本学习的太好了,而导致过拟合。
决策树剪枝的基本策略有预剪枝后剪枝
预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前的划分不能带来决策树泛化性能提升,则停止划分当前节点并标记为叶节点。后剪枝则是先从训练集生成一个完整的决策树,然后自下而上的对非叶节点进行考察,如果该节点对应的子树替换为叶节点能带来性能提升,则将该子树替换为叶节点。

编号 色泽 根蒂 敲声 纹理 脐部 触感 好瓜
4 青绿 蜷缩 沉闷 清晰 凹陷 硬滑
5 浅白 蜷缩 浊响 清晰 凹陷 硬滑
8 乌黑 稍蜷 浊响 清晰 稍凹 硬滑
9 乌黑 稍蜷 沉闷 稍糊 稍凹 硬滑
11 浅白 硬挺 清脆 模糊 平坦 硬滑
12 浅白 蜷缩 浊响 模糊 平坦 软粘
13 青绿 稍蜷 浊响 稍糊 凹陷 硬滑

2.4.1 预剪枝

我们以“脐部”这个属性来演示一下预剪枝。

在划分之前,所有样例集中在根节点。我们可以发现只有编号为 { 4 , 5 , 8 } \{4,5,8\} {458}的三个样例被分类正确了,正确率只有 3 7 \frac{3}{7} 73
但是假设用“脐部”这个属性划分:凹陷->好瓜,稍凹->好瓜,平坦->坏瓜。
我们可以发现编号为 { 4 , 5 , 8 , 11 , 12 } \{4,5,8,11,12\} {4,58,11,12}的样例被分类正确,正确率为 5 7 \frac{5}{7} 75。这个值是大于 3 7 \frac{3}{7} 73的,所以我们选择用这个特征进行划分。

2.4.2 后剪枝

后剪枝先从训练集生成一颗完整的决策树,然后自底向上的对树中所有的非叶节点去逐一考察,判断他的剪枝前和剪枝后准确度,如果剪枝后准确度更高,则剪枝该分支。

一般情况下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。

总结

以上python实现部分主要来自慕课网中flare_zhao老师的机器学习课程,有兴趣的可以去学习。 理论知识的学习可以参考李航老师的《统计学习方法》,讲解的很好。

你可能感兴趣的:(人工智能,决策树,sklearn,机器学习)