决策树算法简述:ID3,C4.5,CART

1. 决策

我理解的决策就是根据当前已有的条件,得出一个结果。

如以下这个简单的例子:

ID Leg Color Bite Type
1 short yellow yes cat
2 long black yes cat
3 long yellow yes cat
4 short yellow no cat
-1 long yellow no dog
-2 short white yes dog
-3 long white yes dog
-4 long white no dog
-5 short black no dog

以上这个也叫做决策表。通过 腿长颜色是否咬人 来判断是 还是

2. 决策树

我们可以将以上的表格转换成一棵树:

决策树

每次决策的时候从根节点出发,根据属性值选择子树,直到叶子节点就是一个决策。

3. ID3算法

构建树的时候,把哪个属性放在根节点,哪个属性放在第二层节点,就值得我们思考了。可以预想到,根据不同的顺序,构建出来的决策树的构造可能是不一样的。如果树中的节点越少,那么平均每次决策所需要的判断次数也就越少,算法的效率就越高。

ID3算法就是为了构造出一棵较优的(注意,不一定最优)的树,使得每次决策的平均判断次数更少。

3.1 信息熵

在高中学过, 表示一个系统的无序程度。比如刚整理好的房间的熵值就比你住过两周不收拾以后的房间的熵值要小。

信息熵 是类似的,其定义为离散随机事件出现的概率,一个系统越是有序,信息熵就越低,反之一个系统越是混乱,它的信息熵就越高。

假设一个随机变量 X 的取值为 X=\{x_1, x_2, ...,x_n\},每一种取到的概率为 P=\{p_1,p_2,...,p_n\},那么 X 的熵值为:
\begin{aligned} E(X) = -\sum\limits_{i=1}^{n}p_i\log_2p_i \end{aligned}
注意,虽然前面有个负号,但是熵值是正的。

以上面的决策为例,Type = \{cat, dog\},其概率分别是 \{\frac{4}{9}, \frac{5}{9} \},那么其熵值为:
\begin{aligned} E(Type) = -(\frac{4}{9} \log_2\frac{4}{9}+\frac{5}{9}\log_2\frac{5}{9}) = 0.9911 \end{aligned}

3.2 条件熵

还是以上的例子,如果把所有的样本仅按照 Leg 进行分类的话,可以分成两类:

按Leg分类

分别计算熵值,可得:
\begin{aligned} E(long) &= -(\frac{2}{5} \log_2 \frac{2}{5}+\frac{3}{5}\log_2\frac{3}{5}) = 0.9710 \\ E(short) &= -(\frac{1}{2}\log_2\frac{1}{2}+\frac{1}{2}\log_2\frac{1}{2}) = 1 \end{aligned}
因此,划分后的熵值为:
\begin{aligned} E(Type|Leg) &= \frac{5}{9}\cdot E(long)+\frac{4}{9}\cdot E(short) \\&=\frac{5}{9}\cdot 0.9710+\frac{4}{9}\cdot 1 \\&= 0.9839 \end{aligned}
因此信息增益为:
\begin{aligned} G(Leg)=E(Type)-E(Type|Leg)=0.0071 \end{aligned}

3.3 ID3 算法

ID3 算法就是找出信息增益最大的属性,然后将其当成根节点,然后对于由此划分得到的子数据,重复以上的步骤。

同样的方法计算 Color 属性的信息增益:

按Color分类

\begin{aligned} E(yellow) &= -(\frac{3}{4} \log_2\frac{3}{4}+\frac{1}{4}\log_2\frac{1}{4}) = 0.8113 \\ E(black) &= -(\frac{1}{2} \log_2\frac{1}{2}+\frac{1}{2}\log_2\frac{1}{2}) = 1 \\ E(white) &= -(\frac{0}{3} \log_2\frac{0}{3}+\frac{3}{3}\log_2\frac{3}{3}) = 0 \\ E(Type|Color) &= \frac{4}{9}\cdot E(yellow)+\frac{2}{9}\cdot E(black) + \frac{3}{9}\cdot E(white) = 0.5828 \\ G(Color) &= E(Type)-E(Type|Color) = 0.4083 \end{aligned}
再算Bite 属性的信息增益:

按Bite分类

\begin{aligned} E(yes) &= -(\frac{3}{5}\log_2\frac{3}{5}+\frac{2}{5}\log_2\frac{2}{5}) = 0.9710 \\ E(no) &= -(\frac{1}{4} \log_2\frac{1}{4}+\frac{3}{4}\log_2\frac{3}{4}) = 0.8113 \\ E(Type|Bite) &= \frac{5}{9}\cdot E(yes)+\frac{4}{9}\cdot E(no) = 0.9000 \\ G(Bite) &= E(Type)-E(Type|Bite) = 0.0911 \end{aligned}
很明显,Color 属性以绝对的优势胜出,当选根节点。

于是数据被 Color 分成了三部分,对每一部分数据 ,去除 Color 属性的影响,按以上的方法递归生成决策树,这里就不赘述了。

但是ID3算法的缺点是很明显的(虽然我自己不觉得明显,但是书上都这么说):

  • ID3算法不能处理连续的数据

    这个很好理解,假设有一个属性是精确到小数点后三位的体重值,那么可能所有样本的值都不一样,则该属性的信息增益最大。ID3算法就会仅使用该属性,把每个样本都分到单独的一类中。即,反正体重都不一样,那根据体重来判断就完事了~

  • ID3算法倾向于选择取值较多的属性

    信息增益反映的给定一个条件以后不确定性减少的程度,必然是分得越细的数据集确定性更高,也就是条件熵越小,信息增益越大。

4. C4.5算法

为了克服 “ID3算法倾向于选择取值较多的属性” 的缺点,C.45算法使用了信息增益率来代替信息增益。其思想就是,增加一个惩罚,取值越多的属性惩罚越大,以此来平衡其选择。

如果使用C.45的话,上面的公式就变成:
\begin{aligned} GR(Leg) = \frac{G(Leg)}{E(Leg)} \end{aligned}
复习一下,E(Leg) 就是将样本按照属性 Leg 划分以后的信息熵。

可以得到:
\begin{aligned} E(Leg) &= -(\frac{4}{9} \log_2\frac{4}{9}+\frac{5}{9}\log_2\frac{5}{9}) = 0.9911 \\ GR(Leg) &= \frac{G(Leg)}{E(Leg)} = \frac{0.0071}{0.9911} = 0.0072 \end{aligned}

同样的方法计算 Color 属性的信息增益率:

\begin{aligned} E(Color) &= -(\frac{4}{9}\log_2\frac{4}{9}+\frac{2}{9}\log_2\frac{2}{9}+\frac{3}{9}\log_2\frac{3}{9}) = 1.5305 \\ GR(Color) &= \frac{G(Color)}{E(Color)} = \frac{0.4083}{1.5305} = 0.2668 \end{aligned}
再算Bite 属性的信息增益率:
\begin{aligned} E(Bite) &= -(\frac{5}{9}\log_2\frac{5}{9}+\frac{4}{9}\log_2\frac{4}{9}) = 0.9911 \\ GR(Bite) &= \frac{G(Bite)}{E(Bite)} = \frac{0.0911}{0.9911} = 0.0919 \end{aligned}
可以看到,虽然还是 Color 属性的信息增益率最高,但是值已经被压缩了,而另外两个属性的值得到了小幅度的上升,各个属性之间的差异更小了。

5. CART 算法

上述两个算法生成的树中,一个节点有几个子节点取决于该属性的取值数量,而CART算法生成的则是二叉树。

Chart算法则使用了一个叫做 Gini系数 的东西,假设一个随机变量 X 的取值为 X=\{x_1, x_2, ...,x_n\},每一种取到的概率为 P=\{p_1,p_2,...,p_n\},那么 X 的为:
\begin{aligned} Gi(X)=1-\sum \limits_{i=1}^{n}p_i^2 \end{aligned}
如果根据属性 R 把数据 D 划分为 \{D_1,D_2\},则:
\begin{aligned} Gi(D, R)=\frac{|D_1|}{|D|}Gi(D_1)+\frac{|D_2|}{|D|}Gi(D_2)=Gi(R) \end{aligned}
则Gini系数增益为:
\begin{aligned} \Delta Gi(R)=Gi(D)-Gi(D,R) \end{aligned}
按照惯例,使用上面的例子计算一下:

首先算出整个数据集的 Gini 系数:
\begin{aligned} Gi(Type) &= 1 - (\frac{5}{9})^2 - (\frac{4}{9})^2 = 0.4938 \end{aligned}

对于 Leg 属性:

按Leg分类

\begin{aligned} Gi(long) &= 1 - (\frac{2}{5})^2 - (\frac{3}{5})^2 = 0.48 \\ Gi(short) & = 1 - (\frac{1}{2})^2 - (\frac{1}{2})^2 = 0.5 \\ Gi(Leg) &= \frac{5}{9} \cdot 0.48+\frac{4}{9} \cdot 0.5 = 0.4889 \\ \Delta Gi(Leg) &= Gi(Type)-Gi(Leg) = 0.005 \end{aligned}

对于 Color 属性,就比较麻烦了,因为有三个取值,但是CART生成的是二叉树,因此就会有三种情况。

按Color分类
  • case 1:

\begin{aligned} Gi(yellow) &= 1 - (\frac{3}{4})^2 - (\frac{1}{4})^2 = 0.375 \\ Gi(black\&white) &= 1 - (\frac{1}{5})^2 - (\frac{4}{5})^2 = 0.320 \\ Gi_1(Color) &= \frac{4}{9} \cdot 0.375 + \frac{5}{9} \cdot 0.320 = 0.3827 \\ \Delta Gi_1(Color) &= Gi(Type)-Gi_1(Color) = 0.1111 \end{aligned}

  • case 2:

\begin{aligned} Gi(black) &= 1 - (\frac{1}{2})^2 - (\frac{1}{2})^2 = 0.5 \\ Gi(yellow\&white) &= 1 - (\frac{3}{7})^2 - (\frac{4}{7})^2 = 0.4898 \\ Gi_2(Color) &= \frac{2}{9} \cdot {0.5} + {\frac{7}{9}} \cdot 0.4898 = 0.4921 \\ \Delta Gi_2(Color) &= Gi(Type)-Gi_2(Color) = 0.0017 \end{aligned}

  • case 3:

\begin{aligned} Gi(white) &= 1 - (\frac{0}{3})^2 - (\frac{3}{3})^2 = 0 \\ Gi(yellow\&black) &= 1 - (\frac{4}{6})^2 - (\frac{2}{6})^2 = 0.4444 \\ Gi_3(Color) &= \frac{3}{9} \cdot 0 +\frac{6}{9} \cdot 0.4444 = 0.1975 \\ \Delta Gi_3(Color) &= Gi(Type)-Gi_3(Color) = 0.2936 \end{aligned}

对于 Bite 属性:

按Bite分类

\begin{aligned} Gi(yes) &= 1 - (\frac{3}{5})^2 - (\frac{2}{5})^2 = 0.48 \\ Gi(no) & = 1 - (\frac{1}{4})^2 - (\frac{3}{4})^2 = 0.375 \\ Gi(Bite) &= \frac{5}{9} \cdot 0.48+\frac{4}{9} \cdot 0.375 = 0.4333 \\ \Delta Gi(Bite) &= Gi(Type)-Gi(Bite) = 0.0605 \end{aligned}

可以看出,当根节点为 Color 属性并且左边是 white,右边是 yellow & black 时,Gini系数增益最大。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容