資料探勘十大演算法之CART詳解

2021-08-31 21:21:48 字數 3543 閱讀 1389

在2023年12月召開的 ieee 資料探勘國際會議上(icdm, international conference on data mining),與會的各位專家選出了當時的十大資料探勘演算法( top 10 data mining algorithms ),可以參見文獻。本部落格已經介紹過的位列十大演算法之中的演算法包括:

[1] k-means演算法(

[2] 支援向量機svm(

[3] em演算法(

[4] 樸素貝葉斯演算法(

[5] kknn演算法(

[6] c4.5決策樹演算法(

決策樹模型是一類演算法的集合,在資料探勘十大演算法中,具體的決策樹演算法占有兩席位置,即c4.5和cart演算法。本文主要介紹分類回歸樹(cart,classification and regression tree)也屬於一種決策樹,希望你在閱讀本文之前已經了解前文已經介紹過之內容:

《資料探勘十大演算法之決策樹詳解(1)》

《資料探勘十大演算法之決策樹詳解(2)》

歡迎關注白馬負金羈的部落格 為保證公式、圖表得以正確顯示,強烈建議你從該位址上檢視原版博文。本部落格主要關注方向包括:數字影象處理、演算法設計與分析、資料結構、機器學習、資料探勘、統計分析方法、自然語言處理。

cart生成

cart假設決策樹是二叉樹,內部結點特徵的取值為「是」和「否」,左分支是取值為「是」的分支,右分支是取值為「否」的分支。這樣的決策樹等價於遞迴地二分每個特徵,將輸入空間即特徵空間劃分為有限個單元,並在這些單元上確定**的概率分布,也就是在輸入給定的條件下輸出的條件概率分布。

cart演算法由以下兩步組成:

決策樹生成:基於訓練資料集生成決策樹,生成的決策樹要盡量大;

決策樹剪枝:用驗證資料集對已生成的樹進行剪枝並選擇最優子樹,這時損失函式最小作為剪枝的標準。

cart決策樹的生成就是遞迴地構建二叉決策樹的過程。cart決策樹既可以用於分類也可以用於回歸。本文我們僅討論用於分類的cart。對分類樹而言,cart用gini係數最小化準則來進行特徵選擇,生成二叉樹。 cart生成演算法如下:

輸入:訓練資料集dd,停止計算的條件: 

輸出:cart決策樹。

根據訓練資料集,從根結點開始,遞迴地對每個結點進行以下操作,構建二叉決策樹:

設結點的訓練資料集為dd,計算現有特徵對該資料集的gini係數。此時,對每乙個特徵aa,對其可能取的每個值aa,根據樣本點對a=aa=a的測試為「是」或 「否」將dd分割成d1d1和d2d2兩部分,計算a=aa=a時的gini係數。

在所有可能的特徵aa以及它們所有可能的切分點aa中,選擇gini係數最小的特徵及其對應的切分點作為最優特徵與最優切分點。依最優特徵與最優切分點,從現結點生成兩個子結點,將訓練資料集依特徵分配到兩個子結點中去。

對兩個子結點遞迴地呼叫步驟l~2,直至滿足停止條件。

生成cart決策樹。

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

乙個具體的例子

下面來看乙個具體的例子。我們使用《資料探勘十大演算法之決策樹詳解(1)》中圖4-6所示的資料集來作為示例,為了便於後面的敘述,我們將其再列出如下: 

首先對資料集非類標號屬性分別計算它們的gini係數增益,取gini係數增益值最大的屬性作為決策樹的根節點屬性。根節點的gini係數 

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

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

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

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

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

δ=0.42−710×0.4898−310×0=0.077

δ=0.42−710×0.4898−310×0=0.077

若按婚姻狀況屬性來劃分,屬性婚姻狀況有三個可能的取值,分別計算劃分後的

| |

| 的gini係數增益。 

當分組為 | 時,slsl表示婚姻狀況取值為married的分組,srsr表示婚姻狀況取值為single或者divorced的分組 

δ=0.42−410×0−610×[1−(36)2−(36)2]=0.12

δ=0.42−410×0−610×[1−(36)2−(36)2]=0.12

當分組為 | 時, 

δ=0.42−410×0.5−610×[1−(16)2−(56)2]=0.053

δ=0.42−410×0.5−610×[1−(16)2−(56)2]=0.053

當分組為 | 時, 

δ=0.42−210×0.5−810×[1−(28)2−(68)2]=0.02

δ=0.42−210×0.5−810×[1−(28)2−(68)2]=0.02

對比計算結果,根據婚姻狀況屬性來劃分根節點時取gini係數增益最大的分組作為劃分結果,也就是 | 。

最後考慮年收入屬性,我們發現它是乙個連續的數值型別。我們在前面的文章裡已經專門介紹過如何應對這種型別的資料劃分了。對此還不是很清楚的朋友可以參考之前的文章,這裡不再贅述。

對於年收入屬性為數值型屬性,首先需要對資料按公升序排序,然後從小到大依次用相鄰值的中間值作為分隔將樣本劃分為兩組。例如當面對年收入為60和70這兩個值時,我們算得其中間值為65。倘若以中間值65作為分割點。slsl作為年收入小於65的樣本,srsr表示年收入大於等於65的樣本,於是則得gini係數增益為 

δ(年收入)=0.42−110×0−910×[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.5

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

與前面的計算過程類似,對於是否有房屬性,可得 

δ=0.5−46×[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一定是二叉樹。

關於過擬合以及剪枝

參考文獻

資料探勘十大經典演算法 CART

資料探勘十大經典演算法 10 cart 分類回歸樹 cart,classification and regression tree 也屬於一種決策樹,分類回歸樹是一棵二叉樹,且每個非葉子節點都有兩個孩子,所以對於第一棵子樹其葉子節點數比非葉子節點數多1。決策樹生長的核心是確定決策樹的分枝準則。1 如...

資料探勘十大演算法

資料探勘十大演算法分為c4.5,k means,svm,apriori,em,pagerank,adaboost,knn,bayes,cart十種演算法。c4.5 關聯演算法 id3。關係 c4.5是id3的改進。決策樹演算法的一種。k means 聚類演算法。svm 支援向量機。apriori 關...

資料探勘十大演算法之Appriori演算法

理論的核心 頻繁專案集的子集仍是頻繁專案集 非頻繁專案集的超集是非頻繁專案集。這個理論一直作為經典的資料探勘理論被應用。如果專案集x是頻繁專案集,那麼它的所有非空子集都是頻繁專案集。如果專案集x是非頻繁專案集,那麼它的所有超集都是非頻繁專案集。題目 資料庫有5個事務。設min sup 60 min ...