机器学习 - 决策树(中)- ID3、C4.5 以及剪枝

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37352167/article/details/84894733

机器学习 - 决策树(中)- ID3、C4.5 以及剪枝

  • 决策树简述

    决策树,它的精髓就是决策,可以认为它是 if-then 规则的集合构建成树形结构的模型。(另,也可认为是定义在特征空间与类空间上的条件概率分布。)

    • if-then 规则

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

      其中,对于数据集中的每一个实例都被一条且只有一条路径或规则覆盖。

    • 条件概率分布

      此条件概率分布定义在特征空间的一个划分上。将特征空间划分为互不相交的单元或区域,并在每个单元定义一个类的概率分布,就构成了一个条件概率分布。决策树所表示的条件概率分布由各个单元给定条件下类的条件概率分布组成。具体的,


      对于包含 N 个样本的数据集,假设每个样本具有的特征为: { x ( 1 ) , x ( 2 ) , . . . x ( n ) } \{x^{(1)},x^{(2)},...x^{(n)}\} ,从 n 个特征 合理 选择一个 x ( i ) x^{(i)} ,而后根据 x ( i ) x^{(i)} 的取值进行分类,如果 x ( i ) x^{(i)} 取值是离散的,则按值分类;如果 x ( i ) x^{(i)} 取值是连续的,则可以按区间划分;接着再根据不同的 x ( j ) x^{(j)} 对已经在上一轮划分好的样本基础上继续划分。

    那么上文中提到的“合理”是怎样的,对于 x ( i ) x^{(i)} x ( i ) x^{(i)} 又是依据什么进行选取的呢?接着看下文。

  • 决策树过程

    对于决策树的生成,主要运用熵的计算。熵的基础概念在上文《机器学习 - 决策树(上)- 信息论基础》已经做了介绍,不再赘述。对于合理的选择特征,关键在于生成一棵熵不断下降,且下降速度最快的树。

    直接上实例:

    假设有数量为 10 的数据集 D D ,其中女生 6 人, 男生 4 人,每个样本都具有特征 x ( 1 ) = = { } x ( 2 ) = = { } x^{(1)}=喜爱的节目类型=\{偶像剧,战争剧\},x^{(2)}=学历=\{小学,高中\} (具体数据见下表)。

    以此数据建立决策树,并预测新样本为男生还是女生。

    样本ID 喜爱节目类型 学历 性别
    1 偶像剧 小学
    2 偶像剧 初中
    3 偶像剧 小学
    4 战争剧 初中
    5 偶像剧 初中
    6 战争剧 小学
    7 偶像剧 小学
    8 战争剧 初中
    9 战争剧 初中
    10 偶像剧 小学

    对于数据集 D D ,目标为预测性别。

    在未分类的时候(即根节点)的熵为香农熵: H ( D ) = [ P ( ) log P ( ) + P ( ) log P ( ) ] = ( 6 10 log 6 10 + 4 10 log 4 10 ) = 0.292 H(D)=-[P(女)\log P(女)+P(男)\log P(男)]=-(\frac{6}{10}\log\frac{6}{10}+\frac{4}{10}\log\frac{4}{10})=0.292
    根节点

    假设以学历作为划分依据 { 3 / 2 3 / 2 } \{小学:3 女 / 2 男;初中:3 女 / 2 男\} ,取值有 2 种,则分为 2 个分支:
    在这里插入图片描述

    此时对于整个数据集 D D 所包含的信息用条件熵来计算:

    H ( D ) = k P ( k ) H ( k ) , k { } H(D|学历)=\sum_{k}P(k)H(k),k∈\{小学,初中\}

                      = [ 5 10 H ( ) + 5 10 H ( ) ] =-[\frac{5}{10}H(小学)+\frac{5}{10}H(初中)]

                      = [ 5 10 ( 3 5 log 3 5 + 2 5 log 2 5 ) + 5 10 ( 2 5 log 2 5 + 3 5 log 3 5 ) ] =-[\frac{5}{10}(\frac{3}{5}\log\frac{3}{5}+\frac{2}{5}\log\frac{2}{5})+\frac{5}{10}(\frac{2}{5}\log\frac{2}{5}+\frac{3}{5}\log\frac{3}{5})]

                      = 0.292 =0.292

    假设以喜爱节目类型作为划分依据 { 5 / 1 3 / 1 } \{偶像剧:5 女 / 1 男;战争剧:3 男 / 1 女\} ,取值 2 中,则分为 2 支:
    喜爱节目类型
    同理可以计算出:

    H ( D ) = k P ( k ) H ( k ) , k { } H(D|类型)=\sum_{k}P(k)H(k),k∈\{偶像剧,战争剧\}

                           = [ 6 10 ( 1 6 log 1 6 + 5 6 log 5 6 ) + 4 10 ( 1 4 log 1 4 + 3 4 log 3 4 ) ] =-[\frac{6}{10}(\frac{1}{6}\log\frac{1}{6}+\frac{5}{6}\log\frac{5}{6})+\frac{4}{10}(\frac{1}{4}\log\frac{1}{4}+\frac{3}{4}\log\frac{3}{4})]

                           = 0.276 =0.276

    以上,具有两种划分方式(学历,喜爱节目类型),那么该以哪个特征作为划分呢?(以下用 “类型” 代替 “喜爱节目类型”)

    1. ID3

      ID3 是通过 信息增益(互信息) 来衡量特征选取优劣的,即在划分后,计算信息量的改变量,改变量大的意味着带给我们更多的信息,那么它就是更优的特征。

      计算公式为: g ( D , A ) = H ( D ) H ( D A ) g(D,A)=H(D)-H(D|A) ,具体的,


      \bullet 对于学历,其信息增益为: g ( D , ) = H ( D ) H ( D ) = 0 g(D,学历)=H(D)-H(D|学历)=0

      \bullet 对于喜爱的节目类型,其信息增益为: g ( D , ) = H ( D ) H ( D ) = 0.016 g(D,类型)=H(D)-H(D|类型)=0.016

      因为 g ( D , ) > g ( D , ) g(D,类型) > g(D,学历) 所以选用“喜爱的节目类型”作为划分特征。

    2. C4.5

      C4.5 是通过 信息增益比 来衡量优劣。

      以信息增益作为划分标准,存在偏向于选择取值较多的特征的问题,因为信息增益反映的给定一个条件以后不确定性减少的程度,必然是分得越细数据集整体的确定性越高,也就是条件熵越小,信息增益越大。使用信息增益比可以对这一问题进行校正。

      信息增益比的计算公式为: g R ( D , A ) = g ( D , A ) H A ( D ) H A ( D ) = i = 1 n D i D log D i D g_R(D,A)=\frac{g(D,A)}{H_A(D)},H_A(D)=\sum_{i=1}^{n}\frac{|D_i|}{|D|}\log\frac{|D_i|}{|D|}

      其中 H A ( D ) H_A(D) 为数据集 D D 关于特征 A 的值的熵(对特征 A 的取值个数进行衡量)。具体的,


      \bullet 对于学历,其 H ( D ) = D i D log D i D = [ 5 10 log 5 10 + 5 10 log 5 10 ] H_{学历}(D)=-\sum_{学历}\frac{D_i}{D}\log\frac{D_i}{D}=-[\frac{5}{10}\log\frac{5}{10}+\frac{5}{10}\log\frac{5}{10}]

      其信息增益比为: g R ( D , ) = g ( D , ) H ( D ) = 0 g_R(D,学历)=\frac{g(D,学历)}{H_{学历}(D)}=0

      \bullet 对于喜爱的节目类型,其 H ( D ) = [ 4 10 log 4 10 + 6 10 log 6 10 ] = H_{类型}(D)=-[\frac{4}{10}\log\frac{4}{10}+\frac{6}{10}\log\frac{6}{10}]=

      其信息增益比为: g R ( D , ) = g ( D , ) H ( D ) = 0.055 g_R(D,类型)=\frac{g(D,类型)}{H_{类型}(D)}=0.055

      因为 g ( D , ) > g ( D , ) g(D,类型) > g(D,学历) 所以选用 “喜爱的节目类型” 作为划分特征。

    3. 过拟合

      对于树的过拟合现象,有两种解决办法,第一种采用“随机森林+Bagging” 的策略(有关 Bagging 的详情可参阅 《机器学习 - 集成方法(Bagging VS. Boosting)》

      另一种方法为剪枝。而剪枝又分为预剪枝与后剪枝。对于预剪枝,其含义为在完全拟合整个数据集之前停止增长,但是停止的标准难以确定。下面主要介绍后剪枝。

      后剪枝的策略是先让树以最大规模生长,而后自底向上修建。不过缺点是之前生成完全树的计算被浪费。

      剪枝定义

      此算法考虑树的复杂度,通过极小化决策树整体损失来实现。

      设树为 T T ,叶节点个数为 T |T| t t 是树 T T 的叶节点,每个叶节点有 N t N_t 个样本点。其中属于 k k 类的样本点有 N t k , k = 1 , 2 , . . . , k N_{tk},k=1,2,...,k H t ( T ) H_t(T) 为叶节点 t t 上的经验熵, α 0 α\ge0 为参数。

      那么损失函数为: C α ( T ) = t = 1 T N t H t ( T ) + α T H t ( T ) = k N t k N t log N t k N t C_α(T)=\sum_{t=1}^{|T|}N_tH_t(T)+α|T|,H_t(T)=\sum_{k}\frac{N_{tk}}{N_t}\log\frac{N_{tk}}{N_t}

      C ( T ) = t = 1 T N t H t ( T ) C(T)=\sum_{t=1}^{|T|}N_tH_t(T)

      C α ( T ) = C ( T ) + α T C_α(T)=C(T)+α|T|

      C ( T ) C(T) 表示模型对训练数据的预测误差, T |T| 表示模型复杂度;

      参数 α 0 α\ge0 控制对复杂度的要求: { α = 0 α α \begin{cases} α=0,对复杂度无要求\\ α\nearrow,倾向于选择简单模型\\ α\searrow,倾向于选择复杂模型\\ \end{cases}

      剪枝过程

      在生成完全树之后:

      (1) 计算每个结点的经验熵;

      (2) 递归地从树的叶节点向上回缩,若修剪前的树为 T A T_A ,修剪后的树为 T B T_B ,对应的损失函数值为 C α ( T A ) C α ( T B ) C_α(T_A),C_α(T_B)

      C α ( T A ) C α ( T B ) C_α(T_A)\ge C_α(T_B) ,则进行剪枝,将父节点变为新的叶节点,而此叶节点的类别通过投票决定;

      (3) 返回 (2) ,直至无法继续。

猜你喜欢

转载自blog.csdn.net/weixin_37352167/article/details/84894733