zoukankan      html  css  js  c++  java
  • 决策树

    • 决策树的学习通常包含三个步骤:特征选择,决策树的生成,利用决策树进行分类

    决策树模型与学习


    决策树模型

    • 决策树定义:决策树由结点(node)和有向边(directed edge)组成。结点有两种类型:内部结点(internal node)和叶结点(leaf node)。内部结点标识一个特征或者属性,叶结点标识一个类。

    决策树学习

    • 决策树学习的本质是从训练数据集中鬼拿出一组分类规则。与训练数据集不相矛盾的决策树可能有多个,也可能一个也没有。我们需要的是一个与训练数据矛盾较小,同时具有很好的泛化能力

    • 从另一个角度来看,决策树学习是由训练数据集估计条件概率模型。

    • 决策树学习的算法通常是一个递归的选择最优特征,并根据该特征对训练数据进行分割,使得各子数据有一个最好的分类过程。

    • 决策树构建过程

    1. 构建根结点,将所有的训练数据放在根节点。选择一个最优的特征,按照这个特征将训练数据分割成子集,使得各子集在当前条件下有一个最好的分类。如果这些子集能够基本正确分类,则构建叶结点。
    2. 如果还有子集不能被正确分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的结点。
    3. 如此递归的迭代下去,直到所有的训练数据子集被基本分类正确。最后,每个子集都被分到叶结点上,这就形成了一棵决策树。
    • 以上方法生成的决策树可能产生过拟合,因此需要对已经生成的决策树进行剪枝,增加泛化能力。

    具体,主要是去掉过于细分的叶结点,使其退回到父结点,甚至更高的结点。然后将父节点或更高的结点改为新的叶结点。


    特征选择

    • 通常的特征选择准则是信息增益或信息增益比

    • 按照某个特征将训练数据集分隔成子集,使得各个子集在当前条件下具有最好的分类,那么就更应该选择这个特征。

    信息增益

    • 熵:随机变量不确定性的度量。
      设X是一个取值有限的离散随机变量,概率分布为:

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

    则随机变量X的熵定义为:

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

    通常对数以2(比特)为底或以e为底(纳特)。

    熵越大,随机变量的不确定度越大。

    • 条件熵:(H(Y|X))表示在已知随机变量X的条件下随机变量Y的不确定性。

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

    其中(p_i = P(X=x_i), i=1, 2, ..., n)
    当熵和条件熵中的概率由数据估计得到时,所对应的熵和条件熵分别称为经验熵和经验条件熵。

    • 信息增益:得知特征X的信息而使得类Y的信息的不确定性减少的程度。
      特征A对训练数据集D的信息增益(g(D, A)),定义为集合D的经验熵(H(D))与特征A给定条件下D的经验条件熵(H(D|A))之差

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

    一般地,熵(H(Y))与条件熵(H(Y|X))之差称为互信息。

    • 决策树学习中的信息增益等价于训练数据集中类与特征的互信息。

    • 信息增益准则下的特征选择方法:对训练数据集D,计算其没个特征的信息增益,比较他们的大小,选择信息增益最大的特征。

    • 信息增益的算法:
      输入:训练数据集D和特征A;
      输出:特征A对训练数据D的信息增益(g(D|A)).

    1. 计算数据集D的经验熵(H(D))

    [H(D) = -sum _{k=1}^K frac {|C_k|} {|D|} log_2 frac {C_k} {D} ]

    1. 计算特征A对训练数据集D的经验条件熵(H(D|A))

    [H(D|A) = sum_{i=1}^n frac {|D_i|} {|D|} H(D_i) = - sum_{i=1}^n frac {|D_i|} {|D|} sum_{k=1}^K frac {|D_{ik}|} {|D_i|} log_2 frac {|D_{ik}|} {|D_i|} ]

    1. 计算信息增益

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

    1. 比较信息增益值。选择信息增益值最大的特征。

    信息增益比

    • 以信息增益作为划分训练数据集的特征,存在偏向于选择取值最多的特征问题。使用信息增益比可以对这一问题进行校正。

    • 信息增益比:特征A对训练数据集D的信息增益比(g_R(D, A))定义为信息增益(g(D, A))与训练数据集D关于特征A的值的熵(H_A(D))之比

    [g_R(D, A) = frac {g(D,A)} {H_A(D)} ]

    其中,(H_A(D) = - sum_{i=1}^n frac {|D_i|} {|D|} log_2 frac {|D_i|} {|D|}),n是特征A取值的个数。


    决策树的生成

    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中实例最大的类(C_k)作为该结点的类标记,返回T;
    5. 否则,对(A_g)的每一可能值(a_i),依(A_g=a_i)将D分割为若干个非空子集(D_i),将(D)中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T;
    6. 对第(i)个子结点,以(D_i)为训练集,以(A-{ A_g })为特征集,递归的调用步骤(1)~(5),得到子树(T_i),返回(T_i)

    C4.5算法

    • C4.5算法与ID3算法相似,C4.5算法对ID3算法进行改进,在生成树的过程中,使用信息增益比来选择特征。

    决策树的剪枝

    • 剪枝主要解决生成决策树的过拟合问题。方法是考虑决策树的复杂度,对已经成圣的决策树进行简化。
      具体地,剪枝从已生成的树上裁剪掉一些子树或叶结点,并将其根结点或父结点作为新的叶结点,从而简化模型。

    • 决策树的剪枝往往通过极小化决策树整体的损失函数或代价函数来实现。
      设树T的叶结点个数为(|T|),t是树(T)的叶结点,该叶结点有(N_t)个样本点,其中(k)类的样本有(N_{tk})个,(k=1, 2, ..., K)(H_t(T))为叶结点t上的经验熵,(alpha geq 0)为参数,则决策树学习的损失函数可以定义为

    [C_{alpha} = sum_{t=1}^{|T|} N_t H_t(T) + alpha|T| ]

    其中经验熵为

    [H_t(T) = -sum_{k} frac {N_{tk}} {N_t} log frac {N_{tk}} {N_t} ]

    较大的(alpha)促使选择简单的模型,相反则选择较复杂的模型。(alpha=0)则只考虑模型与训练数据的拟合程度,不考虑模型的复杂度。

    • 决策树的生成只考虑了通过提高信息增益(或信息增益比)对训练数据进行更好的拟合;而决策树的剪枝则通过优化损失函数还考虑了减小模型的复杂度。

    • 树的剪枝算法
      输入:生成的树T,参数(alpha)
      输出:修剪后的子树(T_{alpha})

    1. 计算没个子结点的经验熵;
    2. 递归的从树的叶结点向上回缩;
      设一组叶结点回缩到其父结点之前与之后整体树分别为(T_B)(T_A),其对应的损失函数为(C_{alpha}(T_B))(C_{alpha}(T_A)),如果满足

    [C_{alpha}(T_A) leq C_{alpha}(T_B) ]

    则进行剪枝,即将父节点变为新的叶结点。
    3. 返回(2),直到不能继续为止,得到损失函数最小的子树(T_alpha)


    CART算法

    1. 决策树的生成:基于训练数据集生成决策树,生成的决策树尽量大;
    2. 决策树的剪枝:用验证数据集对一生成的树进行剪枝并选择最优子树,这时损失函数最小作为剪枝的标准。

    CART生成

    • 回归树使用平方误差最小化准则,分类树用基尼指数最小换准则

    回归树

    • 训练数据集(D = {(x_1,y_1), (x_2,y_2),...,(x_N,y_N)})

    • 回归树:假设已经将输入空间划分为M个单元(R_1, R_2, ..., R_M),并且在(R_m)上都有固定的输出(c_m),则回归树模型表示为$$f(x) = sum^M_{m=1}c_m I(x in R_m)$$其中,单元(R_m)上的(c_m)的最优值(hat{c_m})(R_m)上所有输入实例(x_i)输出的均值$$hat{c_m} = ave(y_i| x_i in R_m)$$

    • 回归树的损失函数:

    [sum_{x_i in R_m}(y_i - f(x_i))^2 ]

    • 划分输入空间,寻找切分变量(j)和切分点(s)

    [min_{j,s} [ min_{c_1} sum_{x_i in R_1(j,s)} (y_i - c_1)^2 + min_{c_1} sum_{x_i in R_1(j,s)} (y_i - c_2)^2] ]

    对于固定输入变量(j)可以找到最优切分点(s)

    [hat{c_1} = ave(y_i|x_i in R_1(j,s))$$$$hat{c_2} = ave(y_i|x_i in R_2(j,s)) ]

    • 最小二乘回归树生成算法
      输入:训练数据集(D)
      输出:回归树(f(x))
    1. 选择最优切分变量j和切分点s,求解:

    [min_{j,s} [ min_{c_1} sum_{x_i in R_1(j,s)} (y_i - c_1)^2 + min_{c_1} sum_{x_i in R_1(j,s)} (y_i - c_2)^2] ]

    遍历变量(j),对固定的切分变量(j)扫描切分点(s),选择使上式达到最小值的((j,s))
    2. 选择固定的((j,s))划分区域并决定相应的输出值:

    [R_1(j,s) = { x|x^j leq s },\,\,\,\,\,\, R_2(j,s) = { x|x^j > s }$$ $$hat{c_m} = frac {1} {N_m} sum _{x_i in R_m(j,s)} y_i, \,\,\,\,\,\,x in R_m, \,\,\,\,\,\,m=1,2 ]

    1. 继续对两个子区域调用步骤1,2直到满足停止条件
    2. 将输入空间划分为(M)个区域(R_m),生成决策树:

    [f(x) = sum^M_{m=1} hat{c_m} I(x in R_m) ]

    分类树

    • 基尼指数:分类问题中,假设有K个类,样本点属于k类的概率为(p_k),则概率分布的基尼指数定义为

    [Gini(p) = sum^K_{k=1}p(1-p_k) = 1 - sum^K_{k=1}p^2_k ]

    二分类问题中,如果样本点属于1的概率为p,则概率分布的基尼指数为

    [Gini(p) = 2p(1-p) ]

    对于样本集合D,基尼指数为

    [Gini(D) = 1 - sum^K_{k=1} (frac{|C_k|} {|D|})^2 ]

    样本集合D根据特征A是否取值a划分为(D_1)(D_2)两部分,则在特征A的条件下,集合D的基尼指数定义为:

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

    其中,Gini(D)表示样本集合D的不确定度,基尼指数越大,样本的不确定度越大,类似于熵。

    • CART树生成
      输入:训练数据集D,停止计算条件
      输出:CART决策树
    1. 计算所有特征对该数据集的基尼指数Gini(D, A)。
    2. 在所有可能的特征A以及他们可能的切分点中,选择基尼指数最小的特征以及相应的切分点作为最优特征与最优切分点。
    3. 对两个子结点递归的调用1,2,知道满足停止条件
    4. 生成CART树。

    算法停止的条件是结点中的样本个数小于预订阈值,或样本集的基尼指数小于预订阈值,或者没有更多的特征。

    CART树剪枝

    • 剪枝算法
      输入:CART算法生成的决策树
      输出:最优决策树T
    1. (k=0,\,\,\, T=T_0)
    2. (alpha = +infty)
    3. 自上而下对内部结点t计算(C(T_t))(|T_t|)以及

    [g(t) = frac {C(t) - C(T_t)} {|T_t| - 1}$$ $$alpha = min(alpha, g(t)) ]

    其中,(T_t)为以t为根节点的子树,(C(T_t))为训练数据的预测误差,(|T_t|)是叶结点个数。
    4. 自上而下访问内部结点t,如果(g(t) = alpha),进行剪枝,并对叶结点t以多数表决法决定其类,得到树T。
    5. 设(k = k+1)(alpha_k = alpha)(T_k = T)
    6. 如果T不是由根节点单独构成的树,则返回到步骤4.
    7. 采用交叉验证法在子树序列中选取最优子树(T)

  • 相关阅读:
    用jQuery实现的简单柱状统计图
    转:Mac下配置eclipse的pydev
    准备做些东西
    UIImageJPEGRepresentation 和 UIImagePNGRepresentation
    UITableView,UITableViewCell,UIPickerView,UISearchBar
    UITableViewCell的显示格式
    js 数据类型检测
    data-xxx 属性的作用是什么
    TCP连接篇
    DNS篇
  • 原文地址:https://www.cnblogs.com/milkcoffeesugar/p/5756561.html
Copyright © 2011-2022 走看看