1. 程式人生 > >決策樹演算法:CART

決策樹演算法:CART

  我們前面講了兩種決策樹演算法ID3ID3C4.5C4.5,還有一種比較經典的決策樹演算法就是CARTCART,也叫分類迴歸樹演算法,它是一種二分遞迴分割演算法,把當前樣本劃分為兩個子樣本,使得生成的每個非葉子結點都有兩個分支,因此CART演算法生成的決策樹是結構簡潔的二叉樹。由於CARTCART演算法構成的是一個二叉樹,因此它在每一步的決策時只能用是或者否,不管一個特徵有多少個取值,它也是把資料分為兩部分。   當CARTCART是分類樹時,採用GINIGINI值作為節點分裂的依據;當CARTCART是迴歸樹時,採用樣本的最小方差作為節點分裂的依據。   節點A

A的不純度GINIGINI通常表示為: Gini(A)=1i=1Cpi2Gini(A) = 1 - \sum\limits_{i = 1}^C {p_i^2}   其中pip_i表示屬於ii類的概率。而GINIGINI值越大,代表節點越不純。當Gini(A)=0Gini(A)=0時,所有樣本屬於同類。   方差σ{\sigma _{}}通常表示為: σ=i=1I(xiu)2=i=1Ixi2nu2\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

  在上面的列表中有四個屬性outlookoutlooktemtemhumhumwindywindyplayplay為分類的結果。下面我們就根據outlookoutlook來預測playplay情況。   當特徵為outlookoutlook時,有三個屬性rainrainovercastovercastsunnysunny,其中屬性為rainrain時,yesyes的結果有1個,nono的結果有7個。屬性為overcastovercast時,yesyes的結果有4個,nono的結果有5個。屬性為sunnysunny時,yesyes的結果有7個,nono的結果有0個。對outlookoutlook有三種屬性,那麼它的取值也就有三種,每種的GINIGINI指數和方差σ{\sigma _{}}計算如下:   (1):

rain或overcast sunny
yes 5 7
no 12 0

  分類預測playplay:     Gini(rainovercast)=1(517)2(1217)2=0.4152Gini(rain|overcast) = 1 - {(\frac{5}{{17}})^2} - {(\frac{{12}}{{17}})^2} = 0.4152     Gini(sunny)=1(77)2=0Gini(sunny) = 1 - {(\frac{7}{7})^2} = 0     Gini(play)=1724Gini(rain|overcast)+724Gini(sunny) =0.2941Gini(play) = \frac{{17}}{{24}}*{\text{Gini(rain|overcast)}} + \frac{7}{{24}}{\text{Gini(sunny) }} = 0.2941   迴歸預測ageage:     Gain(age)=182+222+...+362+2721726.472+242+202+...+352+302727.292=43.8Gain(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

  分類預測playplay:     Gini(rainsunny)=1(815)2(715)2=0.4978Gini(rain|sunny) = 1 - {(\frac{8}{{15}})^2} - {(\frac{7}{{15}})^2} = 0.4978     Gini(overcast)=1(49)2(59)2=0.4938Gini(overcast) = 1 - {(\frac{4}{9})^2} - {(\frac{5}{9})^2} = 0.4938     Gini(play)=1524Gini(overcast)+924Gini(rain|sunny)=0.4963Gini(play) = \frac{{15}}{{24}}*Gini(overcast) + \frac{9}{{24}}*Gini({\text{rain|sunny}}) = 0.4963   迴歸預測ageage:     迴歸計算跟上面一樣,這裡資料有點多,所以我就不在此一一計算了,各位看官如果感興趣,就自己動手計算一下了。

  (3):

sunny或overcast rainy
yes 11 1
no 5 7

  分類預測playplay:     Gini(sunnyovercast)=1(1116)2(516)2=0.4297Gini(sunny|overcast) = 1 - {(\frac{{11}}{{16}})^2} - {(\frac{5}{{16}})^2} = 0.4297