• 决策树模型


    一、决策树

      决策树的方法在分类、预测、规则提取等领域有着广泛的应用。决策树是一种树形结构,它的每一个叶节点对应一个分类,非叶节点对应某个属性上的划分,根据样本在属性上的取值将其划分为若干个子集。对于非纯的叶节点,多数类的标号给出到达这个节点样本所属的类。

    例如上图是一颗决策树,首先它根据年龄分成三颗子树,然后再根据其它属性继续分。决策树的好处是它可以从数据中提取规则,这也符合人的逻辑判断习惯。对于一个数据集,我们可以构造很多棵决策树,决策树算法(ID3、C4.5等)就是根据一定的衡量标准来构造一棵最优的决策树,它使得分类效果最好。这里主要介绍ID3算法的原理和步骤。

    二、信息熵介绍

    1. 熵与条件熵

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

    [P(X=x_i)=p_i quad i = 1,2,...,n ]

    则随机变量(X)的熵定义为

    [H(X)=-p_isum_{i=1}^n{log(p_i)} ]

    上式中,通常取对数为以(2)(e)为低。从上面可知,熵的分布只与(X)的分布有关,而与(X)的取值无关。熵越大,随机变量的不确定性越大,又定义可知

    [ 0 leq H(X) leq log(n) ]

    一般的,当(n=2)时,(P(X=x_1)=p,P(X=x_2)=1-p),则(X)的熵为

    [H(X)=-plog_2(p)-(1-p)log_2(1-p) ]

    (H(X))随p的变化图为

    (p=0)或者(p=1)时,(H(p)=0),随机变量完全没有不确定性,当(p=0.5)时,(H(p)=1),熵取值最大,随机变量不确定性最大。
    设有随机变量((X,Y)),其联合概率分布为

    [P(X=x_i,Y=y_j)=p_{ij} quad i=1,2,...,n quad j=1,2...m ]

    条件熵(H(Y|X))表示已知随机变量(X)的条件下随机变量(Y)的不确定性,即为随机变量(X)给定的条件下随机变量(Y)的条件熵。它的定义为

    [H(Y|X)=sum_{i=1}^n{p_iH(Y|X=x_i)} quad quad p_i=P(x=x_i) ]

    如果有0概率,则定义(0log0=0)

    2.信息增益

      特征(A)对训练数据集(D)的信息增益为(g(D,A)),定义为集合(D)的经验熵(H(D))与特征(A)给定条件下(D)的经验条件熵(H(D|A))之差,即为

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

      决策树的学习应用信息增益准则选择特征,给定训练集数据(D)和特征(A),经验熵(H(D))表示对数据集(D)进行分类的不确定性,而经验条件熵(H(D|A))表示在特征(A)给定的条件下对数据集(D)进行分类的不确定性,那么它们的差就表示信息增益。信息增益大的特征具有更强的分类能力。

    3. 一个信息增益的计算例子

    一个贷款样本的数据表

    ID 年龄 有工作 有自己的房子 信贷情况 类别
    1 青年 一般
    2 青年
    3 青年
    4 青年 一般
    5 青年 一般
    6 中年 一般
    7 中年
    8 中年
    9 中年 非常好
    10 中年 非常好
    11 老年 非常好
    12 老年
    13 老年
    14 老年 非常好
    15 老年 一般

    下面我们来在计算每个属性条件下的信息增益,然后选择一个信息增益最大的属性。

    首先计算训练数据的熵(H(D))

    [H(D)=-frac{6}{15}log_2(frac{6}{15})--frac{9}{15}log_2(frac{9}{15})=0.971 ]

    然后计算各个特征对(D)的信息增益,从表格左到右特征依次记做(A_1,A_2,A_3,A_4)

    (1)计算(A_1)条件下信息增益

    [g(D,A_1)=H(D)-H(D|A_1)=H(D)-[frac{5}{15}H(D_1)+frac{5}{15}H(D_2)+frac{5}{15}H(D_3)] ]

    [=0.971 - frac{5}{15}[-frac{3}{5}log_2(frac{3}{5})-frac{2}{5}log_2(frac{2}{5})] ]

    [- frac{5}{15}[-frac{2}{5}log_2(frac{2}{5})-frac{3}{5}log_2(frac{3}{5})] - frac{5}{15}[-frac{1}{5}log_2(frac{1}{5})-frac{4}{5}log_2(frac{4}{5})]=0.083 ]

    (2)计算(A_2)条件下信息增益

    [g(D,A_2)=H(D)-H(D|A_2)=H(D)-[frac{5}{15}H(D_1)+frac{10}{15}H(D_2)] ]

    [=0.971 - frac{5}{15} imes 0-frac{10}{15}[-frac{4}{10}log_2(frac{4}{10})-frac{6}{10}log_2(frac{6}{10})] = 0.324 ]

    (3)同理计算(A_3)条件下信息增益

    [g(D,A_3)=0.420 ]

    (4)同理计算(A_4)条件下信息增益

    [g(D,A_4)=0.363 ]

    根据比较可知,特征(A_3)条件下信息增益最大,所以最优划分特征为(A_3)

    三、ID3算法原理

      ID3算法的思想是在决策树各个节点上应用信息增益准则来选择特征,递归的构建决策树。从根节点开始,对节点计算所有可能的特征的信息增益,选择信息增益最大的特征作为节点特征,由该特征的不同取值建立子节点,再对子节点递归的调用以上方法,构建决策树。算法流程如下:

    输入:训练数据(D),特征(A),阈值 (varepsilon)

    输出:决策树(T)

    1. (D)中所有实例都属于同一类(C_k),则(T)为单节点树,并将类(C_k)作为该节点的标记,返回(T).
    2. (A=emptyset),则(T)为单节点树,并将(D)中实例数最大的类(C_k)作为节点的标记,返回(T).
    3. 否则计算(A)中各种特征(D)的信息增益,选择信息增益最大的特征(A_g)
    4. 如果(A_g)的信息增益小于阈值(varepsilon),则(T)为单节点树,并将(D)中实例数最大的类(C_k)做为该节点的标记,返回(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_i)

    (算法用C++实现,待续。。。)

    决策树存在的问题

      决策树生成算法递归的生成决策树,直到不能继续下去为止,这样产生的树往往对训练数据的分类很正确,但是对未知测试数据的分类却每那么准确,即出现过拟合现象,过拟合原因在于学习时过多的考率如何提高对训练数据的正确分类,从而构建过于复杂的决策树,解决这类问题常用的做法就是剪枝,对已生成的决策树进行简化。

    (就到这里了,以后再完善。。。)

  • 相关阅读:
    【常用配置】Spring框架web.xml通用配置
    3.从AbstractQueuedSynchronizer(AQS)说起(2)——共享模式的锁获取与释放
    2.从AbstractQueuedSynchronizer(AQS)说起(1)——独占模式的锁获取与释放
    1.有关线程、并发的基本概念
    0.Java并发包系列开篇
    SpringMVC——DispatcherServlet的IoC容器(Web应用的IoC容器的子容器)创建过程
    关于String的问题
    Spring——Web应用中的IoC容器创建(WebApplicationContext根应用上下文的创建过程)
    <<、>>、>>>移位操作
    System.arraycopy(src, srcPos, dest, destPos, length) 与 Arrays.copyOf(original, newLength)区别
  • 原文地址:https://www.cnblogs.com/td15980891505/p/7467016.html
Copyright © 2020-2023  润新知