决策树算法:CART

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

  我们前面讲了两种决策树算法 I D 3 ID3 C 4.5 C4.5 ,还有一种比较经典的决策树算法就是 C A R T CART ,也叫分类回归树算法,它是一种二分递归分割算法,把当前样本划分为两个子样本,使得生成的每个非叶子结点都有两个分支,因此CART算法生成的决策树是结构简洁的二叉树。由于 C A R T CART 算法构成的是一个二叉树,因此它在每一步的决策时只能用是或者否,不管一个特征有多少个取值,它也是把数据分为两部分。
  当 C A R T CART 是分类树时,采用 G I N I GINI 值作为节点分裂的依据;当 C A R T CART 是回归树时,采用样本的最小方差作为节点分裂的依据。
  节点 A A 的不纯度 G I N I GINI 通常表示为:
G i n i ( A ) = 1 i = 1 C p i 2 Gini(A) = 1 - \sum\limits_{i = 1}^C {p_i^2}   其中 p i p_i 表示属于 i i 类的概率。而 G I N I GINI 值越大,代表节点越不纯。当 G i n i ( A ) = 0 Gini(A)=0 时,所有样本属于同类。
  方差 σ {\sigma _{}} 通常表示为:
σ = i = 1 I ( x i u ) 2 = i = 1 I x i 2 n u 2 \sigma = \sqrt {\sum\limits_{i = 1}^I {{{({x_i} - u)}^2}} } = \sqrt {\sum\limits_{i = 1}^I {x_i^2 - n{u^2}} }   方差越大,表示该节点的数据越分散,预测的效果就越差。如果一个节点的所有数据都相同,那么方差就为0。
  

  • 实例分析
      这里还是用我们前面的例子来做分析,因为之前的数据都是离散的,所以这里我们随机加了一组连续的数据预测回归,数据都是自己编的,不要在意符不符合实际:
outlook tem hum windy play age
overcast hot high not no 18
overcast hot high very no 22
overcast hot high medium no 16
sunny hot high not yes 24
sunny hot high medium yes 20
rain mild high not no 16
rain mild high medium no 19
rain hot normal not yes 25
rain cool normal medium no 30
rain hot normal very no 28
sunny cool normal very yes 22
sunny cool normal medium yes 24
overcast mild high not no 24
overcast mild high medium no 35
overcast cool normal not yes 40
overcast cool normal medium yes 28
rain mild normal not no 26
rain mild normal medium no 34
overcast mild normal medium yes 36
overcast hot normal very yes 27
sunny mild high very yes 36
sunny mild high medium yes 35
sunny hot normal not yes 30
rain mild high very no 26

  在上面的列表中有四个属性 o u t l o o k outlook t e m tem h u m hum w i n d y windy p l a y play 为分类的结果。下面我们就根据 o u t l o o k outlook 来预测 p l a y play 情况。
  当特征为 o u t l o o k outlook 时,有三个属性 r a i n rain o v e r c a s t overcast s u n n y sunny ,其中属性为 r a i n rain 时, y e s yes 的结果有1个, n o no 的结果有7个。属性为 o v e r c a s t overcast 时, y e s yes 的结果有4个, n o no 的结果有5个。属性为 s u n n y sunny 时, y e s yes 的结果有7个, n o no 的结果有0个。对 o u t l o o k outlook 有三种属性,那么它的取值也就有三种,每种的 G I N I GINI 指数和方差 σ {\sigma _{}} 计算如下:
  (1):

rain或overcast sunny
yes 5 7
no 12 0

  分类预测 p l a y play
     G i n i ( r a i n o v e r c a s t ) = 1 ( 5 17 ) 2 ( 12 17 ) 2 = 0.4152 Gini(rain|overcast) = 1 - {(\frac{5}{{17}})^2} - {(\frac{{12}}{{17}})^2} = 0.4152
     G i n i ( s u n n y ) = 1 ( 7 7 ) 2 = 0 Gini(sunny) = 1 - {(\frac{7}{7})^2} = 0
     G i n i ( p l a y ) = 17 24 Gini(rain|overcast) + 7 24 Gini(sunny)  = 0.2941 Gini(play) = \frac{{17}}{{24}}*{\text{Gini(rain|overcast)}} + \frac{7}{{24}}{\text{Gini(sunny) }} = 0.2941
  回归预测 a g e age
     G a i n ( a g e ) = 18 2 + 22 2 + . . . + 36 2 + 27 2 17 26.47 2 + 24 2 + 20 2 + . . . + 35 2 + 30 2 7 27.29 2 = 43.8 Gain(age) = \sqrt {{{18}^2} + {{22}^2} + ... + {{36}^2} + {{27}^2} - 17*{{26.47}^2}} + \sqrt {{{24}^2} + {{20}^2} +...+ {{35}^2} + {{30}^2} - 7*{{27.29}^2}} = 43.8

  (2):

rain或sunny overcast
yes 8 4
no 7 5

  分类预测 p l a y play
     G i n i ( r a i n s u n n y ) = 1 ( 8 15 ) 2 ( 7 15 ) 2 = 0.4978 Gini(rain|sunny) = 1 - {(\frac{8}{{15}})^2} - {(\frac{7}{{15}})^2} = 0.4978
     G i n i ( o v e r c a s t ) = 1 ( 4 9 ) 2 ( 5 9 ) 2 = 0.4938 Gini(overcast) = 1 - {(\frac{4}{9})^2} - {(\frac{5}{9})^2} = 0.4938
     G i n i ( p l a y ) = 15 24 G i n i ( o v e r c a s t ) + 9 24 G i n i ( rain|sunny ) = 0.4963 Gini(play) = \frac{{15}}{{24}}*Gini(overcast) + \frac{9}{{24}}*Gini({\text{rain|sunny}}) = 0.4963
  回归预测 a g e age
    回归计算跟上面一样,这里数据有点多,所以我就不在此一一计算了,各位看官如果感兴趣,就自己动手计算一下了。

  (3):

sunny或overcast rainy
yes 11 1
no 5 7

  分类预测 p l a y play
     G i n i ( s u n n y o v e r c a s t ) = 1 ( 11 16 ) 2 ( 5 16 ) 2 = 0.4297 Gini(sunny|overcast) = 1 - {(\frac{{11}}{{16}})^2} - {(\frac{5}{{16}})^2} = 0.4297
     G i n i ( r a i n y ) = 1 ( 1 8 ) 2 ( 7 8 ) 2 = 0.2188 Gini(rainy) = 1 - {(\frac{1}{8})^2} - {(\frac{7}{8})^2} = 0.2188
     G i n i ( p l a y ) = 16 24 G a i n ( r a i n y ) + 8 24 G a i n ( sunny|overcast ) = 0.3594 Gini(play) = \frac{{16}}{{24}}*Gain(rainy) + \frac{8}{{24}}*Gain({\text{sunny|overcast}}) = 0.3594
  回归预测 a g e age
    同上,这里数据有点多,我就不一一计算了,各位看官如果感兴趣,就自己动手计算一下了。
  如果要预测是否 p l a y play ,从上面三种划分计算出的 G i n i ( p l a y ) Gini(play) 值,可以算出 { r a i n o v e r c a s t s u n n y {rain|overcast,sunny} } 的 G i n i ( p l a y ) Gini(play) 值最小,所以为最优划分。
  其他特征预测也是跟上面一样,这里也不一一介绍了,以上就是个人对 C A R T CART 算法的理解,欢迎大家一起来讨论。

猜你喜欢

转载自blog.csdn.net/keyue123/article/details/83176624
今日推荐