机器学习-决策树

决策树

在机器学习领域,决策树不管是在面试过程中还是在工作中都是非常常见的一个算法,所以有必要对决策树算法的概念进行深入的了解。

概念

决策树算法是一种基本的分类和回归算法,本文主要探讨的是分类方法。决策树分类是基于训练数据,根据损失函数最小化的原则建立决策树模型。决策树学习通常包含3个步骤:特征选择、决策树生成和决策树剪枝。分类决策树是一种描述对实例进行分类的树形结构。决策树由结点和有向边组成,结点有两种类型:内部结点和叶结点。内部结点表示一个特征或属性,叶结点表示一个类。

分类决策树选择特征的三种算法(ID3、C4.5、CART)

以下是贷款申请训练数据集D,本文讲解各种算法时会用到。数据包括贷款申请人的4个特征:1、年龄(取值为青年、中年、老年),2、是否有工作(是、否),3、是否有房子(是、否),4、信贷情况(非常好、好、一般)。最后一列是类型,表示是否同意贷款,取值为是、否。


ID 年龄 是否有工作 是否有房子 信贷情况 类别


1 青年 否 否 一般 否

2 青年 否 否 好 否

3 青年 是 否 一般 是

4 青年 是 是 一般 是

5 青年 否 否 一般 否

6 中年 否 否 一般 否

7 中年 否 否 好 否

8 中年 是 是 好 是

9 中年 否 是 非常好 是

10 中年 否 是 非常好 是

11 老年 否 是 非常好 是

12 老年 否 是 好 是

13 老年 是 否 好 是

14 老年 是 否 非常好 是

15 老年 否 否 一般 否


信息增益

首先给定随机变量X的概率分布
P ( X = x i ) = p i , i = 1 , 2 , 3 , . . . , n P(X=x_i) = p_i, i = 1, 2, 3, ..., n P(X=xi)=pi,i=1,2,3,...,n
熵表示随机变量的不确定性,则有随便变量X的熵定义为
H ( X ) = − ∑ i = 1 n p i l o g p i H(X) = -\sum_{i=1}^{n}{p_ilogp_i} H(X)=i=1npilogpi
条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性,公式为
H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) H(Y|X) = \sum_{i=1}^{n}{p_iH(Y|X=x_i)} H(YX)=i=1npiH(YX=xi)
信息增益表示得知特征X的信息而使得类Y的信息使Y的信息的不确定性减少的程度。其具体定义如下:

特征A对训练数据集D的信息增益g(D, A),定义为集合D的经验熵与特征A给定条件下D的经验条件熵H(D|A)之差,即、
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D, A) = H(D) - H(D|A) g(D,A)=H(D)H(DA)
其实就是上面两个公式,熵与条件熵之差。

信息增益算法(1.1)

输入:训练数据集D和特征A;

输出:特征A对训练数据集D的信息增益g(D|A)。

(1) 计算数据集D的经验熵H(D)
H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ l o g 2 ∣ C k ∣ D ∣ H(D) = -\sum_{k=1}^{K}{\frac{|C_k|}{|D|}log_2\frac{|C_k}{|D|}} H(D)=k=1KDCklog2DCk
(2) 计算特征A对数据集D的经验条件熵H(D|A)
H ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ ∑ k = 1 K l o g 2 ∣ D i k ∣ ∣ D i ∣ 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}log_2\frac{|D_ik|}{|D_i|}} H(DA)=i=1nDDiH(Di)=i=1nDDik=1Klog2DiDik
(3) 计算信息增益
g ( D ∣ A ) = H ( D ) − H ( D ∣ A ) g(D|A) = H(D) - H(D|A) g(DA)=H(D)H(DA)
下面结合例子说明一下信息增益算法选择最优特征的过程

解 首先计算经验熵H(D)

已知实例个数为15,类别为是的有9个,否的有6个,故
H ( D ) = − 9 15 l o g 2 9 15 − 6 15 l o g 2 6 15 = 0.971 H(D) = -\frac{9}{15}log_2\frac{9}{15}-\frac{6}{15}log_2\frac{6}{15}=0.971 H(D)=159log2159156log2156=0.971
然后计算个特征对数据集D的信息增益。分别以A1,A2,A3,A4表示年龄、有无工作、是否有房子和信贷情况4个特征,则
g ( D ∣ A 1 ) = H ( D ) − [ 5 15 H ( D 1 ) + 5 15 H ( D 2 ) + 5 15 H ( D 3 ) ] = 0.971 − [ 5 15 ( − 2 5 l o g 2 2 5 − 3 5 l o g 2 3 5 ) + 5 15 ( − 3 5 l o g 2 3 5 − 2 5 l o g 2 2 5 ) + 5 15 ( − 4 5 l o g 2 4 5 − 1 5 l o g 2 1 5 ) ] = 0.971 − 0.888 = 0.083 g(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{2}{5}log_2\frac{2}{5}-\frac{3}{5}log_2\frac{3}{5})+\\ \frac{5}{15}(-\frac{3}{5}log_2\frac{3}{5}-\frac{2}{5}log_2\frac{2}{5})+ \frac{5}{15}(-\frac{4}{5}log_2\frac{4}{5}-\frac{1}{5}log_2\frac{1}{5})]\\ =0.971-0.888 = 0.083 g(DA1)=H(D)[155H(D1)+155H(D2)+155H(D3)]=0.971[155(52log25253log253)+155(53log25352log252)+155(54log25451log251)]=0.9710.888=0.083
这里D1,D2,D3分别是D中A1(年龄)取值为青年、中年和老年的样本子集。类似地,
g ( D ∣ A 2 ) = 0.971 − [ 5 15 × 0 + 10 15 ( − 4 10 l o g 2 4 10 − 6 10 l o g 2 6 10 ) ] = 0.324 g(D|A_2) = 0.971-[\frac{5}{15}×0+\frac{10}{15}(-\frac{4}{10}log_2\frac{4}{10}-\frac{6}{10}log_2\frac{6}{10})]=0.324 g(DA2)=0.971[155×0+1510(104log2104106log2106)]=0.324

g ( D ∣ A 3 ) = 0.971 − [ 6 15 × 0 + 9 15 ( − 3 9 l o g 2 3 9 − 6 9 l o g 2 6 9 ) ] = 0.971 − 0.551 = 0.420 g(D|A_3) = 0.971-[\frac{6}{15}×0+\frac{9}{15}(-\frac{3}{9}log_2\frac{3}{9}-\frac{6}{9}log_2\frac{6}{9})]\\ = 0.971 - 0.551 = 0.420 g(DA3)=0.971[156×0+159(93log29396log296)]=0.9710.551=0.420

g ( D ∣ A 4 ) = 0.971 − 0.608 = 0.363 g(D|A_4) = 0.971 - 0.608 = 0.363 g(DA4)=0.9710.608=0.363

最后,比较各特征的信息增益值。由于特征 A 3 A_3 A3(是否有房子)的信息增益值最大,所以选择特征 A 3 A_3 A3作为最优特征。

信息增益比

以信息增益作为划分训练数据集的特征,存在偏向选择取值较多的特征的问题(比如例子中如果ID也作为特征输入,那么信息增益就会选择ID作为最优特征,但事实上ID对于决策来讲意义不大)。使用信息增益比可以对这一问题进行校正。这是特征选择的另一准则。

信息增益比算法(1.2)

特征A对训练数据集D的信息增益比gR(D, A)定义为其信息增益g(D, A)与训练数据集D关于特征A的值的额熵 H A ( D ) H_A(D) HA(D)之比,即
g R ( D , A ) = g ( D , A ) H A ( D ) gR(D, A) = \frac{g(D, A)}{H_A(D)} gR(D,A)=HA(D)g(D,A)
其中,
H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ H_A(D) = -\sum_{i=1}^{n}{\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|}} HA(D)=i=1nDDilog2DDi
n是特征A的取值的个数。

决策树的生成

接下来,让我们看看怎么利用上面的算法生成一棵决策树吧。

ID3算法

ID3算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。具体方法是:从根结点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的额特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归地调用以上方法,构建决策树;知道所有特征的信息增益均很小或没有特征可以选择为止。最后得到一棵决策树。ID3相当于用极大似然法进行概率模型的选择。

具体做法

输入:训练数据集D,特征值A阈值 ε \varepsilon ε;

输出:决策树T。

(1) 若D中所有实例属于同一类 C k C_k Ck,则T为单结点树,并将 C k C_k Ck作为结点的类标记,返回T;

(2) 若 A = ϕ A=\phi A=ϕ,则T为单结点树,并将D中实例数最大的类 C k C_k Ck作为该结点的标记,返回T;

(3) 否则,按决策树算法(1.1)计算A中各特征对D的信息增益,选择信息增益最大的特征 A g A_g Ag

(4) 如果 A g A_g Ag的信息增益小于阈值 ε \varepsilon ε,则置T为单结点数,并将D中的实例数最大的类 C k C_k Ck作为该结点的类标记,返回T;

(5) 否则,对 A g A_g Ag的每一个可能值 a i a_i ai,依 A g = a i A_g=a_i Ag=ai将D分割为若干非空子集 D i D_i Di,将 D i D_i Di中实例最大的类作为标记,构建子结点,又结点及其子结点构成树T,返回T;

(6) 对于第i个子结点,以 D i D_i Di为训练集,以 A − A g A-{A_g} AAg为特征集,递归调用(1) ~ (5)步,得到子树 T i T_i Ti,返回 T i T_i Ti

下面结合数据集说明一下

由于特征 A 3 A_3 A3(是否有房子)的信息增益最大,所以选择特征 A 3 A_3 A3作为根结点的特征。他将训练数据D划分为两个子集 D 1 D_1 D1( A 3 A_3 A3的取值为"是")和 D 2 D_2 D2( A 3 A_3 A3的取值为"否")。由于 D 1 D_1 D1只有同一类的样本点,所以他成为一个叶结点,结点的标记是"是"。

D 2 D_2 D2则需从特征 A 1 A_1 A1(年龄), A 2 A_2 A2(是否有工作)和 A 4 A_4 A4(信贷情况)中选择新的特征。计算各个特征的信息增益:

由于 A 3 A_3 A3选择"否"的情况下 D 2 D_2 D2还有9个实例,其中6个类别为"否",3个类别为"是",则有
H ( D 2 ) = − 6 9 l o g 2 6 9 − 6 9 l o g 2 6 9 = 0.918 H(D_2) = -\frac{6}{9}log_2\frac{6}{9}-\frac{6}{9}log_2\frac{6}{9} = 0.918 H(D2)=96log29696log296=0.918

g ( D 2 , A 1 ) = H ( D 2 ) − H ( D 2 ∣ A 1 ) = 0.918 − 0.667 = 0.251 g(D_2, A_1) = H(D_2) - H(D_2|A_1) = 0.918-0.667=0.251 g(D2,A1)=H(D2)H(D2A1)=0.9180.667=0.251

g ( D 2 , A 2 ) = H ( D 2 ) − H ( D 2 ∣ A 2 ) = 0.918 − 0 = 0.918 g(D_2, A_2) = H(D_2) - H(D_2|A_2) = 0.918-0=0.918 g(D2,A2)=H(D2)H(D2A2)=0.9180=0.918

g ( D 2 , A 4 ) = H ( D 2 ) − H ( D 2 ∣ A 4 ) = 0.474 g(D_2, A_4) = H(D_2) - H(D_2|A_4) = 0.474 g(D2,A4)=H(D2)H(D2A4)=0.474

选择信息增益最大的特征 A 2 A_2 A2作为结点的特征。当他选择"是"的时候类的标记全是"是",当他选择"否"的时候,类的标记全是"否",故决策树生成完成。

C4.5算法

C4.5其实就是在特征选择的时候用信息增益比替换信息增益

CART算法

CART就是分类回归树(classification and regression tree)。分类树用基尼指数选择最优 特征,同时决定该特征的最优二值切分点。CART假设决策树是二叉树,内部结点特征的取值为"是"和"否",左分支是取值为"是"分支,右分支是取值为"否"的分支。

基尼指数:分类问题中,假定有K个类,样本点属于第k类的概率为 p k p_k pk,则概率分布的基尼指数定义为
G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini(p)=\sum_{k=1}^{K}{p_k(1-p_k)}=1-\sum_{k=1}^{K}{p_k^2} Gini(p)=k=1Kpk(1pk)=1k=1Kpk2
对于二分类问题,若样本点属于第1类的概率是p,则概率分布的基尼指数为为
G i n i ( p ) = 2 p ( 1 − p ) Gini(p)=2p(1-p) Gini(p)=2p(1p)
对于给定的样本集合D,其基尼指数为
G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C K ∣ ∣ D ∣ ) 2 Gini(D)=1-\sum_{k=1}^{K}{(\frac{|C_K|}{|D|})^2} Gini(D)=1k=1K(DCK)2
这里, C k C_k Ck是D中属于第k类的样本子集,K是类的个数。

如果样本集合D根据特征A是否取某一个可能指a被分割成 D 1 D_1 D1 D 2 D_2 D2两部分,即
D 1 = ( x , y ) ∈ D ∣ A ( x ) = a , D 2 = D − D 1 D_1={(x,y)\in D|A(x)=a},D_2=D-D_1 D1=(x,y)DA(x)=a,D2=DD1
则在特征A的条件下,集合D的基尼指数定义为
G i n i ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) Gini(D,A) = \frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2) Gini(D,A)=DD1Gini(D1)+DD2Gini(D2)
基尼指数Gini(D)表示集合的不确定性,基尼指数Gini(D,A)表示经A=a分割后集合二D的不确定性。基尼指数值越大,样本的不确定性也就越大,这一点与熵的定义相似。

CART生成算法

输入:训练数据集D,停止计算的条件;

输出:CART决策树。

根据训练数据集,从根结点开始,递归地对每个结点进行一下操作,构建二叉决策树:

(1) 设结点的训练数据集为D,计算现有特征对该数据集的基尼指数。此时,对每一个特征A,对其可能取的每个值a,根据样本点对a的测试为"是"或"否",将D分割成 D 1 D_1 D1 D 2 D_2 D2两部分,利用Gini(D,A)计算A=a时的基尼指数。

(2) 在所有可能的特征A以及他们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点,将训练数据集依特征分配到两个子结点中去。

(3) 对两个子结点递归地调用(1),(2),直至满足停止条件。

(4) 生成CART决策树。

算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征。

结合数据说明下决策树的生成过程

A 1 A_1 A1, A 2 A_2 A2, A 3 A_3 A3, A 4 A_4 A4表示年龄、是否有工作、是否有房子和信贷情况4个特征,并以1, 2, 3表示年龄为青年、中年、老年,以1,2表示是否有工作和是否有房子的值为是和否,以1,2,3表示信贷情况的值为非常好、好和一般。

求特征 A 1 A_1 A1的基尼指数:
G i n i ( D , A 1 = 1 ) = 5 15 ( 2 × 2 5 × ( 1 − 2 5 ) ) + 10 15 ( 2 × 7 10 × ( 1 − 7 10 ) ) = 0.44 Gini(D,A_1=1)=\frac{5}{15}(2×\frac{2}{5}×(1-\frac{2}{5}))+\frac{10}{15}(2×\frac{7}{10}×(1-\frac{7}{10}))=0.44 Gini(D,A1=1)=155(2×52×(152))+1510(2×107×(1107))=0.44

G i n i ( D , A 1 = 2 ) = 0.48 Gini(D,A_1=2)=0.48 Gini(D,A1=2)=0.48

G i n i ( D , A 1 = 2 ) = 0.44 Gini(D,A_1=2)=0.44 Gini(D,A1=2)=0.44

这里稍微解释一下, 2 5 \frac{2}{5} 52表示年龄为青年时类别为"是"的概率, 7 10 \frac{7}{10} 107为年龄不为青年时(即中年和老年)类别为是类别为"是"的概率.

由于 G i n i ( D , A 1 = 1 ) Gini(D,A_1=1) Gini(D,A1=1) G i n i ( D , A 1 = 3 ) Gini(D,A_1=3) Gini(D,A1=3)相等,且最小,所以 A 1 = 1 A_1=1 A1=1 A 1 = 3 A_1=3 A1=3都可以选作 A 1 A_1 A1的最优切分点。

求特征 A 2 A_2 A2 A 3 A_3 A3的基尼指数:
G i n i ( D , A 2 = 1 ) = 0.32 G i n i ( D , A 3 = 1 ) = 0.27 Gini(D,A_2=1)=0.32\\ Gini(D,A_3=1)=0.27 Gini(D,A2=1)=0.32Gini(D,A3=1)=0.27
由于 A 1 A_1 A1 A 3 A_3 A3只有一个切分点,所以他们就是最优切分点。

求特征 A 4 A_4 A4的基尼指数:
G i n i ( D , A 4 = 1 ) = 0.36 G i n i ( D , A 4 = 2 ) = 0.47 G i n i ( D , A 4 = 3 ) = 0.32 Gini(D,A_4=1)=0.36\\ Gini(D,A_4=2)=0.47\\ Gini(D,A_4=3)=0.32 Gini(D,A4=1)=0.36Gini(D,A4=2)=0.47Gini(D,A4=3)=0.32
G i n i ( D , A 4 = 3 ) Gini(D,A_4=3) Gini(D,A4=3)最小,所以 A 4 = 3 A_4=3 A4=3 A 4 A_4 A4的最优切分点。

A 1 A_1 A1, A 2 A_2 A2, A 3 A_3 A3, A 4 A_4 A4几个特征中, G i n i ( D , A 3 = 1 ) = 0.27 Gini(D,A_3=1)=0.27 Gini(D,A3=1)=0.27最小,所以选择特征 A 3 A_3 A3为最优特征 A 3 = 1 A_3=1 A3=1为最优切分点。于是根结点生成两个子结点,一个是叶结点。对另一个结点继续使用以上方法在 A 1 A_1 A1, A 3 A_3 A3, A 4 A_4 A4中选择最优特征及其最优切分点,结果是 A 2 = 1 A_2=1 A2=1。以此计算得知,所得的结点都是叶结点。

剪枝

决策树的生长就是不断地拟合训练数据,但是如果只考虑拟合效果,决策树不断生长,模型复杂度增加,就会导致训练数据拟合效果很好,而未知数据的预测效果非常差,导致过拟合。剪枝就是在训练数据的拟合效果和模型复杂度之间寻找一个均衡,提高预测准确率。具体可以查找其他资料,这里不做展开。

注:本文内容大部分来自李航老师的<<统计学习方法 第二版>>第五章-决策树

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值