CART(Classification And Regression Tree)

CART算法(Classification And Regression Tree)

http://blog.csdn.net/u014568921/article/details/45082197
https://wenku.baidu.com/view/286c19dae009581b6bd9eb59.html
http://www.dataguru.cn/article-4720-1.html

一、介紹

採用一種二分遞歸分割的技術,分割方法採用基於最小距離的基尼指數估計函數,將當前的樣本集分爲兩個子樣本集,使得生成的每個非葉子節點都有兩個分支。因此,CART算法生成的決策樹是結構簡介的二叉樹。

1.分類樹

如果目標變量是離散變量,則是Classfication Tree;
分類樹是使用樹結構算法將數據分成離散類的方法。

2.迴歸樹

如果目標是連續變量,則是Regression Tree;
CART樹是二叉樹,不像多叉樹那樣形成過多的數據碎片。

二、分類樹兩個關鍵點

1.將訓練樣本進行遞歸地劃分自變量空間進行建樹
2.用驗證數據進行剪枝

A)對於離散變量X(x1…xn)

分別取X變量各值的不同組合,將其分到樹的左枝或右枝,並對不同組合而產生的樹,進行評判,找出最佳組合。

如果只有兩個取值,直接根據這兩個值就可以劃分樹。

取值多於兩個的情況就複雜一些,如變量年紀,其值有“少年”、“中年”、“老年”,則分別生產{少年,中年}和{老年},{少年、老年}和{中年},{中年,老年}和{少年},這三種組合,最後評判對目標區分最佳的組合。

因爲CART二分的特性,當訓練數據具有兩個以上的類別,CART需考慮將目標類別合併成兩個超類別,這個過程稱爲雙化。這裏可以說一個公式,n個屬性,可以分出(2^n-2)/2種情況。

B)對於連續變量X(x1…xn)

首先將值排序,分別取其兩相鄰值的平均值點作爲分隔點,將樹一分成左枝和右枝,不斷掃描,進而判斷最佳分割點。特徵值大於分裂值就走左子樹,或者就走右子樹。

這裏有一個問題,這次選中的分裂屬性在下次還可以被選擇嗎?

對於離散變量**XD,如果XD只有兩種取值,那麼在這一次分裂中,根據XD分裂後,左子樹中的subDataset中每個數據的XD屬性一樣,右子樹中的subDataset中每個數據的XD屬性也一樣,所以在這個節點以後,XD就不起作用了,就不用考慮**XD了。XD取3種,4種…情況類似。

至於連續變量*XC,離散化後相當於一個可以取n個值的離散變量,按剛剛離散變量的情況分析。除非XC的取值都一樣,否則這次用了XC作爲分裂屬性,下次還要考慮XC*。

三、變量和最佳切分點選擇原則

樹的生長,總的原則是,讓枝比樹更純,而度量原則是根據不純度指標來衡量。

對於分類樹,則用GINI指標、Twoing指標、Order Twoing等;
如果是迴歸樹則用,最小平方殘差、最小絕對殘差等指標衡量

這裏寫圖片描述
這裏寫圖片描述

四、終止條件

整個樹的生長是一個遞歸過程,直到終止條件

終止條件:

1.節點是純結點,即所有的記錄的目標變量值相同
2.樹的深度達到了預先指定的最大值
3.混雜度的最大下降值小於一個預先指定的值
4.節點的記錄量小於預先指定的最小節點記錄量
5.一個節點中的所有記錄其預測變量值相同

五、CART生成算法

輸入:訓練數據集D,停止計算條件
**輸出:**CART決策樹

根據訓練數據,從根節點開始,遞歸地對每個節點進行以下操作,構建二叉決策樹:

1.設結點的訓練數據集爲D,計算現有特徵對該數據集的Gini係數。此時,對每一個特徵A,對其可能取的每個值a,根據樣本點對A=a的測試爲“是”或 “否”將D分割成D1和D2兩部分,計算A=a時的Gini係數。

2.在所有可能的特徵A以及它們所有可能的切分點a中,選擇Gini係數最小的特徵及其對應的切分點作爲最優特徵與最優切分點。依最優特徵與最優切分點,從現結點生成兩個子結點,將訓練數據集依特徵分配到兩個子結點中去。

3.對兩個子結點遞歸地調用步驟l~2,直至滿足停止條件。

4.生成CART決策樹。

六、剪枝

剪枝目的:避免過擬合(Overfitting)。在一般的數據集中,過擬合的決策樹的錯誤率比經過簡化的決策樹的錯誤率要高。

剪枝的準則是如何確定決策樹的規模,可以參考的剪枝思路有以下幾個:

  1. 使用訓練集合(Training Set)和驗證集合(Validation Set),來評估剪枝方法在修剪結點上的效用

  2. 使用所有的訓練集合進行訓練,但是用統計測試來估計修剪特定結點是否會改善訓練集合外的數據的評估性能,如使用Chi-Square(Quinlan,1986)測試來進一步擴展結點是否能改善整個分類數據的性能,還是僅僅改善了當前訓練集合數據上的性能。

  3. 使用明確的標準來衡量訓練樣例和決策樹的複雜度,當編碼長度最小時,停止樹增長,如MDL(Minimum Description Length)準則。

1.Reduced-Error Pruning(REP,錯誤率降低剪枝)

該剪枝方法考慮將每個節點作爲修剪的候選對象,決定是否修剪這個結點由如下步驟組成:
1)刪除以此結點爲根的子樹
2)使其成爲葉子結點
3)賦予該結點關聯的訓練數據的最常見分類
4)當修剪後的樹對於驗證集合的性能不會比原來的樹差時,才真正刪除該結點

因爲訓練集合的過擬合,使得驗證集合數據能夠對其進行修正,反覆進行上面的操作,
從底向上的處理結點,刪除那些能夠最大限度的提高驗證集合的精度的結點,直到進一步修剪有害爲止(有害是指修剪會減低驗證集合的精度)

REP是最簡單的後剪枝方法之一,不過在數據量比較少的情況下,REP方法趨於過擬合而較少使用。這是因爲訓練數據集合中的特性在剪枝過程中被忽略,所以在驗證數據集合比訓練數據集合小的多時,要注意這個問題

儘管REP有這個缺點,不過REP仍然作爲一種基準來評價其它剪枝算法的性能。它對
於兩階段決策樹學習方法的優點和缺點提供了了一個很好的學習思路。由於驗證集合沒有參與決策樹的創建,所以用REP剪枝後的決策樹對於測試樣例的偏差要好很多,能夠解決一定程度的過擬合問題。

2.Pessimistic Error Pruning(PEP,悲觀剪枝)

先計算規則在它應用的訓練樣例上的精度,然後假定此估計精度爲二項式分佈,並計算它的標準差。對於給定的置信區間,採用下界估計作爲規則性能的度量。這樣做的結果,是對於大的數據集合,該剪枝策略能夠非常接近觀察精度,隨着數據集合的減小,離觀察精度越來越遠。該剪枝方法儘管不是統計有效的,但是在實踐中有效。

PEP爲了提高對測試集合的預測可靠性,PEP對誤差估計增加了連續性校正(Continuity Correction)。PEP方法認爲,如果:

這裏寫圖片描述

其中,e(t)爲結點t出的誤差;
i爲覆蓋Tt的葉子結點;
Nt爲子樹Tt的葉子樹;
n(t)爲在結點t處的訓練集合數量。

PEP採用自頂向下的方式,如果某個非葉子結點符合上面的不等式,就裁剪掉該葉子結點。該算法被認爲是當前決策樹後剪枝算法中精度比較高的算法之一,但是也存在缺陷。

首先,PEP算法是唯一使用Top-Down剪枝策略,這種策略會導致與先剪枝出現同樣的問題,將該結點的某子節點不需要被剪枝時被剪掉;另外PEP方法會有剪枝失敗的情況出現

雖然PEP方法存在一些侷限性,但是在實際應用中表現出了較高的精度。另外PEP方法不需要分離訓練集合和驗證集對於數據量比較少的情況比較有利

其剪枝策略比其它方法相比效率更高,速度更快。因爲在剪枝過程中,樹中的每顆子樹最多需要訪問一次,在最壞的情況下,它的計算時間複雜度也只和非剪枝樹的非葉子節點數目成線性關係。

3.代價複雜性剪枝(Cost-Complexity Pruning,CCP)

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

剪枝過程特別重要,所以在最優決策樹生成過程中佔有重要地位。有研究表明,剪枝過程的重要性要比樹生成過程更爲重要,對於不同的劃分標準生成的較大樹(Maximum Tree),在剪枝之後都能夠保留最重要的屬性劃分,差別不大。反而是剪枝方法對於最優樹的生成更爲關鍵。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章