zoukankan      html  css  js  c++  java
  • 第5章--决策树

    决策树(decision tree)是一种基本的分类与回归方法,本章主要讨论用于分类的决策树。可以将决策树看成是一个if-then规则的集合。决策树的学习通常包括3个步骤:特征选择、决策树的生成和决策树的修剪。


    特征选择

    特征选择在于选取对训练数据具有分类能力的特征。如果利用一个特征进行分类的结果与随机分类没有很大差别,则称这个特征是没有分类能力的。通常特征选择的准则是信息增益或信息增益比。

    先给出熵与条件熵的定义。

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

    egin{align*}
    P(X=x_i)=p_i, quad i=1,2,cdots,n 
    end{align*}

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

    egin{align*}
    H(X) = -sum_{i=1}^{n} p_i log p_i ag{5.1}
    end{align*}

    若$p_i=0$,则定义$0log0=0$。(在数学上,$log0$是没有定义的。)通常上式中的对数以2或者$e$为底。有定义可知,熵只依赖于$X$的分布,而与$X$的取值无关,所以可以将$X$的熵记做$H(p)$,即:

    egin{align*}
    H(X) = -sum_{i=1}^{n} p_i log p_i ag{5.2}
    end{align*}

    熵越大,随机变量的不确定性越大。从定义可以验证:

    egin{align*}
    0 leq H(p) leq log n ag{5.3}
    end{align*}

    至于是怎么验证的,可参考wiki:拉格朗日乘数。这里贴出wiki上面的解题步骤:

    设有随机变量$(X,Y)$,其联合概率分布为:

    egin{align*}
    P(X=x_i,Y=y_i)=p_{ij}, quad i=1,2,cdots,n, quad j=1,2,cdots,m
    end{align*}

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

    egin{align*}
    H(Y|X) = sum_{i=1}^{n}p_iH(Y|X=x_i) ag{5.5}
    end{align*}

    当熵和条件熵中的概率有数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别称为经验熵(empirical entropy)和经验条件熵(empirical conditional entropy)。

    信息增益(information)表示得知特征X的信息而使得类Y的信息不确定性减少的程度。

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

    egin{align*}
    g(D,A) = H(D) - H(D|A) ag{5.6}
    end{align*}

    一般地,熵$H(Y)$与条件熵$H(Y|X)$之差称为互信息(mutual information)。决策树学习中的信息增益等价于训练数据集中类与特征的互信息。

    根据信息增益准则的特征选择方法是:对训练数据集(或子集)D,计算每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。


    决策树的生成

    算法5.2(ID3算法)
    输入:训练数据集$D$,特征$A$,阈值$varepsilon$
    输出:决策树$T$

    (1)若$D$中所有实例属于同一类$C_k$,则$T$为单节点树,并将$C_k$作为该节点的类标记,返回$T$;
    (2)若$A = varnothing$,则$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$。


     决策树的剪枝

    决策树额剪枝是为了降低树的负责度,防止过拟合,这与其他机器学习算法增加正则项是类似的。

    此时决策树学习的损失函数可以定义为:

    egin{align*}
    C_{alpha}(T) = C(T) + alphaleft | T ight | ag{5.14}
    end{align*}

    其中,$alpha geq 0$为参数;$left | T ight |$为树$T$的叶节点个数,表示模型复杂度。

    剪枝,就是当$alpha$确定时,选择损失函数最小的模型,即损失函数最下的子树。当$alpha$值确定时,子树越大,往往与训练数据的拟合越好,
    但是模型的复杂度就越高;相反,子树越小,模型的复杂度就越低,但是往往与训练数据的拟合不好。

    算法5.4(树的剪枝算法)
    输入:生成算法产生的整个树$T$,参数$alpha$;
    输出:修剪后的子树$T_{alpha}$。
    (1)计算每个节点的经验熵。
    (2)递归地从数的叶节点向上回缩。
    设一组叶节点回缩到其父节点之前与之后的整体数分别为$T_B$与$T_A$,其对应的损失函数值分别是$C_{alpha}(T_A)$与$C_{alpha}(T_B)$,如果

    egin{align*}
    C_{alpha}(T_A) leq C_{alpha}(T_B) ag{5.15}
    end{align*}

    则进行剪枝,即将父节点变为新的节点。

    (3)返回(2),直至不能继续为止,得到损失函数最小的子树$T_{alpha}$。


    CART算法

    分类与回归数(classification and regression tree,CART)模型是应用广泛的决策树学习方法。
    CART由决策树生成和决策树剪枝两部组成,与前面介绍的算法类似。

    CART剪枝时使用交叉验证确定参数$alpha$,这个地方还没有理解清楚,有时间再回来看看。

  • 相关阅读:
    LeetCode: Search in Rotated Sorted Array
    LeetCode: Search in Rotated Sorted Array II
    LeetCode: Search Insert Position
    LeetCode: Same Tree
    LeetCode: Search a 2D Matrix
    Oracle工具下载地址
    华为创始人任正非简介
    个人开公司的流程,以后用得着!
    如何更改收藏夹的位置,收藏夹的位置
    帮助大家了解到Google关键字排名、价格
  • 原文地址:https://www.cnblogs.com/royhoo/p/8602369.html
Copyright © 2011-2022 走看看