决策树算法:CART

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

  • 实例分析
      这里还是用我们前面的例子来做分析,因为之前的数据都是离散的,所以这里我们随机加了一组连续的数据预测回归,数据都是自己编的,不要在意符不符合实际:
outlooktemhumwindyplayage
overcasthothighnotno18
overcasthothighveryno22
overcasthothighmediumno16
sunnyhothighnotyes24
sunnyhothighmediumyes20
rainmildhighnotno16
rainmildhighmediumno19
rainhotnormalnotyes25
raincoolnormalmediumno30
rainhotnormalveryno28
sunnycoolnormalveryyes22
sunnycoolnormalmediumyes24
overcastmildhighnotno24
overcastmildhighmediumno35
overcastcoolnormalnotyes40
overcastcoolnormalmediumyes28
rainmildnormalnotno26
rainmildnormalmediumno34
overcastmildnormalmediumyes36
overcasthotnormalveryyes27
sunnymildhighveryyes36
sunnymildhighmediumyes35
sunnyhotnormalnotyes30
rainmildhighveryno26

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

rain或overcastsunny
yes57
no120

  分类预测 p l a y play 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 Gini(rainovercast)=1(175)2(1712)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 Gini(sunny)=1(77)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 Gini(play)=2417Gini(rain|overcast)+247Gini(sunny) =0.2941
  回归预测 a g e age 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 Gain(age)=182+222+...+362+2721726.472 +242+202+...+352+302727.292 =43.8

  (2):

rain或sunnyovercast
yes84
no75

  分类预测 p l a y play 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 Gini(rainsunny)=1(158)2(157)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 Gini(overcast)=1(94)2(95)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 Gini(play)=2415Gini(overcast)+249Gini(rain|sunny)=0.4963
  回归预测 a g e age age
    回归计算跟上面一样,这里数据有点多,所以我就不在此一一计算了,各位看官如果感兴趣,就自己动手计算一下了。

  (3):

sunny或overcastrainy
yes111
no57

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值