數據挖掘資料

https://blog.csdn.net/baimafujinji/article/details/53269040算法

在2006年12月召開的 IEEE 數據挖掘國際會議上(ICDM, International Conference on Data Mining),與會的各位專家選出了當時的十大數據挖掘算法( top 10 data mining algorithms ),能夠參見文獻【1】。本博客已經介紹過的位列十大算法之中的算法包括:數據結構

決策樹模型是一類算法的集合,在數據挖掘十大算法中,具體的決策樹算法佔有兩席位置,即C4.5和CART算法。本文主要介紹分類迴歸樹(CART,Classification And Regression Tree)也屬於一種決策樹,但願你在閱讀本文以前已經瞭解前文已經介紹過以內容:dom

歡迎關注白馬負金羈的博客 http://blog.csdn.net/baimafujinji,爲保證公式、圖表得以正確顯示,強烈建議你從該地址上查看原版博文。本博客主要關注方向包括:數字圖像處理、算法設計與分析、數據結構、機器學習、數據挖掘、統計分析方法、天然語言處理。機器學習


CART生成

CART假設決策樹是二叉樹,內部結點特徵的取值爲「是」和「否」,左分支是取值爲「是」的分支,右分支是取值爲「否」的分支。這樣的決策樹等價於遞歸地二分每一個特徵,將輸入空間即特徵空間劃分爲有限個單元,並在這些單元上肯定預測的機率分佈,也就是在輸入給定的條件下輸出的條件機率分佈。函數

CART算法由如下兩步組成:學習

  1. 決策樹生成:基於訓練數據集生成決策樹,生成的決策樹要儘可能大;
  2. 決策樹剪枝:用驗證數據集對已生成的樹進行剪枝並選擇最優子樹,這時損失函數最小做爲剪枝的標準。

CART決策樹的生成就是遞歸地構建二叉決策樹的過程。CART決策樹既能夠用於分類也能夠用於迴歸。本文咱們僅討論用於分類的CART。對分類樹而言,CART用Gini係數最小化準則來進行特徵選擇,生成二叉樹。 CART生成算法以下:測試

輸入:訓練數據集DD,中止計算的條件: 
輸出:CART決策樹。
大數據

根據訓練數據集,從根結點開始,遞歸地對每一個結點進行如下操做,構建二叉決策樹:atom

  1. 設結點的訓練數據集爲DD,計算現有特徵對該數據集的Gini係數。此時,對每個特徵AA,對其可能取的每一個值aa,根據樣本點對A=aA=a的測試爲「是」或 「否」將DD分割成D1D1和D2D2兩部分,計算A=aA=a時的Gini係數。
  2. 在全部可能的特徵AA以及它們全部可能的切分點aa中,選擇Gini係數最小的特徵及其對應的切分點做爲最優特徵與最優切分點。依最優特徵與最優切分點,從現結點生成兩個子結點,將訓練數據集依特徵分配到兩個子結點中去。
  3. 對兩個子結點遞歸地調用步驟l~2,直至知足中止條件。
  4. 生成CART決策樹。

算法中止計算的條件是結點中的樣本個數小於預約閾值,或樣本集的Gini係數小於預約閾值(樣本基本屬於同一類),或者沒有更多特徵。spa


一個具體的例子

下面來看一個具體的例子。咱們使用《數據挖掘十大算法之決策樹詳解(1)》中圖4-6所示的數據集來做爲示例,爲了便於後面的敘述,咱們將其再列出以下: 


 

 

首先對數據集非類標號屬性{是否有房,婚姻情況,年收入}分別計算它們的Gini係數增益,取Gini係數增益值最大的屬性做爲決策樹的根節點屬性。根節點的Gini係數 

 
Gini()=1(310)2(710)2=0.42Gini(是否拖欠貸款)=1−(310)2−(710)2=0.42


當根據是否有房來進行劃分時,Gini係數增益計算過程爲 

 


 

 

 
Gini()=1(03)2(33)2=0Gini()=1(37)2(47)2=0.4898Gini(左子節點)=1−(03)2−(33)2=0Gini(右子節點)=1−(37)2−(47)2=0.4898

 

 
Δ{}=0.42710×0.4898310×0=0.077Δ{是否有房}=0.42−710×0.4898−310×0=0.077

 

若按婚姻情況屬性來劃分,屬性婚姻情況有三個可能的取值{married,single,divorced},分別計算劃分後的

  • {married} | {single,divorced}
  • {single} | {married,divorced}
  • {divorced} | {single,married}

的Gini係數增益。 
當分組爲{married} | {single,divorced}時,SlSl表示婚姻情況取值爲married的分組,SrSr表示婚姻情況取值爲single或者divorced的分組 

 
Δ{}=0.42410×0610×[1(36)2(36)2]=0.12Δ{婚姻情況}=0.42−410×0−610×[1−(36)2−(36)2]=0.12


當分組爲{single} | {married,divorced}時, 

 
Δ{}=0.42410×0.5610×[1(16)2(56)2]=0.053Δ{婚姻情況}=0.42−410×0.5−610×[1−(16)2−(56)2]=0.053


當分組爲{divorced} | {single,married}時, 

 
Δ{}=0.42210×0.5810×[1(28)2(68)2]=0.02Δ{婚姻情況}=0.42−210×0.5−810×[1−(28)2−(68)2]=0.02


對比計算結果,根據婚姻情況屬性來劃分根節點時取Gini係數增益最大的分組做爲劃分結果,也就是{married} | {single,divorced}。

 

最後考慮年收入屬性,咱們發現它是一個連續的數值類型。咱們在前面的文章裏已經專門介紹過如何應對這種類型的數據劃分了。對此還不是很清楚的朋友能夠參考以前的文章,這裏再也不贅述。

對於年收入屬性爲數值型屬性,首先須要對數據按升序排序,而後從小到大依次用相鄰值的中間值做爲分隔將樣本劃分爲兩組。例如當面對年收入爲60和70這兩個值時,咱們算得其中間值爲65。假若以中間值65做爲分割點。SlSl做爲年收入小於65的樣本,SrSr表示年收入大於等於65的樣本,因而則得Gini係數增益爲 

 
Δ()=0.42110×0910×[1(69)2(39)2]=0.02Δ(年收入)=0.42−110×0−910×[1−(69)2−(39)2]=0.02


其餘值的計算同理可得,咱們再也不逐一給出計算過程,僅列出結果以下(最終咱們取其中使得增益最大化的那個二分準則來做爲構建二叉樹的準則): 

 



注意,這與咱們以前在《數據挖掘十大算法之決策樹詳解(1)》中獲得的結果是一致的。最大化增益等價於最小化子女結點的不純性度量(Gini係數)的加權平均值,以前的表裏咱們列出的是Gini係數的加權平均值,如今的表裏給出的是Gini係數增益。如今咱們但願最大化Gini係數的增益。根據計算知道,三個屬性劃分根節點的增益最大的有兩個:年收入屬性和婚姻情況,他們的增益都爲0.12。此時,選取首先出現的屬性做爲第一次劃分。

 

接下來,採用一樣的方法,分別計算剩下屬性,其中根節點的Gini係數爲(此時是否拖欠貸款的各有3個records)

 
Gini()=1(36)2(36)2=0.5Gini(是否拖欠貸款)=1−(36)2−(36)2=0.5


與前面的計算過程相似,對因而否有房屬性,可得 

 
Δ{}=0.546×[1(34)2(14)2]26×0=0.25Δ{是否有房}=0.5−46×[1−(34)2−(14)2]−26×0=0.25


對於年收入屬性則有:

 

 


 

 

最後咱們構建的CART以下圖所示:

 


 

 

最後咱們總結一下,CART和C4.5的主要區別:

  • C4.5採用信息增益率來做爲分支特徵的選擇標準,而CART則採用Gini係數;
  • C4.5不必定是二叉樹,但CART必定是二叉樹。

關於過擬合以及剪枝

決策樹很容易發生過擬合,也就是因爲對train數據集適應得太好,反而在test數據集上表現得很差。這個時候咱們要麼是經過閾值控制終止條件避免樹形結構分支過細,要麼就是經過對已經造成的決策樹進行剪枝來避免過擬合。另一個克服過擬合的手段就是基於Bootstrap的思想創建隨機森林(Random Forest)。關於剪枝的內容能夠參考文獻【2】以瞭解更多,若是有機會我也可能在後續的文章裏討論它。

相關文章
相關標籤/搜索