决策树模型

一、决策树

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

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

二、信息熵介绍

1. 熵与条件熵

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

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

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

\[H(X)=-p_i\sum_{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} \times 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++实现,待续。。。)

决策树存在的问题

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

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

posted @ 2017-09-02 16:30  曹孟德  阅读(877)  评论(0编辑  收藏  举报