決策樹(ID3、C4.5、CART)
1、決策樹基本介紹
決策樹是一種基本的分類與回歸方法,他既可以是if-then 規則的集合,也可以認為是定義在特征空間與類空間上的條件概率分布。
- 主要有點:可讀性、分類快
- 本質:從訓練數據集中歸納出一組分類規則
2、 決策樹模型
決策樹構建策略
常用算法:
- ID3是: 使用信息增益的方式來選擇特征 --容易過擬合
- C4.5: 用信息增益比來選擇特征
- 分類與回歸樹 CART算法 可以分類 也可以回歸
算法過程
特征選擇、
決策樹生成、
決策樹的剪枝(通過極小化決策樹整體的損失函數或代價函數實現)
3、特征選擇
- 特征選在於選取對訓練數據具有分類能力的特征。這樣可以提高決策樹學習效率。
- 選取准則:信息增益、信息增益比
1、信息商
注意:式子中的對數是以2或者e為底,熵只依賴於X的分布不依賴X的取值,所以也可以將X的熵記做H(p)
- 使用決策樹的過程是不斷減少信息熵的過程---計算示例見下圖
2、信息增益
-
信息增益表示得知特征X的信息而使得類Y的信息的不確定性減少的程度。
-
定義:特征A對訓練數據集D的信息增益g(D,A),定義為集合的經驗熵H(D)與特征A給定條件下D的經驗熵H(D|A)之差 :即
g(D,A)=H(D)-H(D|A) -
如果A1,A2,A3 分別代表顏色、硬度、香味,那么在選擇分類特征的時候就需要取一個使得信息增益最大的特征 如下式:
argmax{g(D|A1),g(D|A2),g(D|A2)}
如果通過計算得知顏色的信息增益最大 那么就可以通過硬度來划分 -
在計算某一個特征信息增益的時候如下:
g(D,A) = H(D)-H(D|A) = H(D)-{H(D1|A)+H(D2|A)}
注意:如果選擇特征是顏色 如下圖
D1就是左邊4個紅色蘋果的信息熵
D2就是左邊6個紅色蘋果的信息熵
- 1、信息增益計算方法
- 簡單解釋
假設有10個蘋果,4個好蘋果 6個壞蘋果,特征分別是 顏色、硬度、味道
(1) 計算經驗熵
H(D)=-[4/10log4/10+6/10log6/10]
(2)計算特征A對數據集D的經驗條件熵H(D|A)
H(D1|A)=1/4log1/4+3/4log3/4
H(D2|A)=3/6log3/6+3/6log3/6
H(D|A)=-[4/10*(D1|A)+6/10*(D2|A)]
=-[4/10*(1/4*log1/4+3/4*log3/4)+6/10&*(3/6*log3/6+3/6*log3/6)]
g(D,A)=H(D)-H(D|A)=........
- 計算實例
信息增益推導(每個特征都計算一遍信息增益 求出薪資增益最大的特征)
信息增益比
如果以信息增益為划分依據,存在偏向選擇取值較多的特征,信息增益比是對比這一問題進行校正
4、 決策樹的構建
ID3算法的核心是在決策樹各個節點上應用信息增益准則選擇特征,遞歸的構建決策樹。
-
具體方法 :從根節點開始,對節點計算所有可能的特征的信息增益,選擇信息增益最大的特征作為借點特征,由該特征的不同取值建立子節點,再對子節點遞歸調用以上方法,構建決策樹;直到所有特征的信息增益均很小或者沒有特征可以選擇為止。
-
ID3相當於用極大似然法進行概率模型的選擇。
ID3生成算法
C4.5生成算法
5、決策樹剪枝
在決策樹學習中,將已生成的樹進行簡單化的過程稱為剪枝。
- 待補充
6、CART算法--分類回歸樹(可以分類也可以回歸)--基尼系數--純二叉樹
CART是在給定輸入隨機變量X條件下輸出隨機變量Y的條件概率分布的學習方法。
CART分類樹算法使用基尼系數來代替信息增益比,基尼系數代表了模型的不純度,基尼系數越小,不純度越低,特征越好。這和信息增益(比)相反。
- CART算法由兩步組成
(1)決策樹生成:基於訓練數據集生成決策樹,生成的決策樹要盡量大。
(2)決策樹剪枝:用經驗數據集對已生成的樹進行剪枝並選擇最優子樹,這是用損失函數最小作為剪枝的標准。
1、基尼系數
-
假設K個類別,第k個類別的概率為pk,概率分布的基尼系數表達式:
-
如果是二分類問題,第一個樣本輸出概率為p,概率分布的基尼系數表達式為:
-
對於樣本D,個數為|D|,假設K個類別,第k個類別的數量為|Ck|,則樣本D的基尼系數表達式:
- 對於樣本D,個數為|D|,根據特征A的某個值a,把D分成|D1|和|D2|,則在特征A的條件下,樣本D的基尼系數表達式為:
比較基尼系數和熵模型的表達式,二次運算比對數簡單很多。尤其是二分類問題,更加簡單。
- 和熵模型的度量方式比,基尼系數對應的誤差有多大呢?對於二類分類,基尼系數和熵之半的曲線如下:
基尼系數和熵之半的曲線非常接近,因此,基尼系數可以做為熵模型的一個近似替代。
CART分類樹算法每次僅對某個特征的值進行二分,而不是多分,這樣CART分類樹算法建立起來的是二叉樹,而不是多叉樹。
2、CART分類樹算法具體流程
CART分類樹建立算法流程,之所以加上建立,是因為CART分類樹算法有剪枝算法流程。
- 算法輸入訓練集D,基尼系數的閾值,樣本個數閾值。
- 輸出的是決策樹T。
算法從根節點開始,用訓練集遞歸建立CART分類樹。
(1)、對於當前節點的數據集為D,如果樣本個數小於閾值或沒有特征,則返回決策子樹,當前節點停止遞歸。
(2)、計算樣本集D的基尼系數,如果基尼系數小於閾值,則返回決策樹子樹,當前節點停止遞歸。
(3)、計算當前節點現有的各個特征的各個特征值對數據集D的基尼系數,對於離散值和連續值的處理方法和基尼系數的計算見第二節。缺失值的處理方法和C4.5算法里描述的相同。
(4)、在計算出來的各個特征的各個特征值對數據集D的基尼系數中,選擇基尼系數最小的特征A和對應的特征值a。根據這個最優特征和最優特征值,把數據集划分成兩部分D1和D2,同時建立當前節點的左右節點,做節點的數據集D為D1,右節點的數據集D為D2。
(5)、對左右的子節點遞歸的調用1-4步,生成決策樹。
對生成的決策樹做預測的時候,假如測試集里的樣本A落到了某個葉子節點,而節點里有多個訓練樣本。則對於A的類別預測采用的是這個葉子節點里概率最大的類別。
3、 案例
例:根據下表所給的訓練集,應用CART算法生成決策樹。
##4、CART分類樹算法對連續特征和離散特征的處理
CART分類樹算法對連續值的處理,思想和C4.5相同,都是將連續的特征離散化。唯一區別在選擇划分點時,C4.5是信息增益比,CART是基尼系數。
具體思路:m個樣本的連續特征A有m個,從小到大排列a1,a2,......,am,則CART取相鄰兩樣本值的平均數做划分點,一共取m-1個,其中第i個划分點Ti表示為:Ti = (ai + ai+1)/2。分別計算以這m-1個點作為二元分類點時的基尼系數。選擇基尼系數最小的點為該連續特征的二元離散分類點。比如取到的基尼系數最小的點為at,則小於at的值為類別1,大於at的值為類別2,這樣就做到了連續特征的離散化。
注意的是,與ID3、C4.5處理離散屬性不同的是,如果當前節點為連續屬性,則該屬性在后面還可以參與子節點的產生選擇過程。
CART分類樹算法對離散值的處理,采用的思路:不停的二分離散特征。
在ID3、C4.5,特征A被選取建立決策樹節點,如果它有3個類別A1,A2,A3,我們會在決策樹上建立一個三叉點,這樣決策樹是多叉樹。
CART采用的是不停的二分。會考慮把特征A分成{A1}和{A2,A3}、{A2}和{A1,A3}、{A3}和{A1,A2}三種情況,找到基尼系數最小的組合,比如{A2}和{A1,A3},然后建立二叉樹節點,一個節點是A2對應的樣本,另一個節點是{A1,A3}對應的樣本。由於這次沒有把特征A的取值完全分開,后面還有機會對子節點繼續選擇特征A划分A1和A3。這和ID3、C4.5不同,在ID3或C4.5的一顆子樹中,離散特征只會參與一次節點的建立。
5、 CART回歸樹建立算法
- CART回歸樹和CART分類樹的建立類似,這里只說不同。
(1)、分類樹與回歸樹的區別在樣本的輸出,如果樣本輸出是離散值,這是分類樹;樣本輸出是連續值,這是回歸樹。分類樹的輸出是樣本的類別,回歸樹的輸出是一個實數。
(2)、連續值的處理方法不同。
(3)、決策樹建立后做預測的方式不同。
分類模型:采用基尼系數的大小度量特征各個划分點的優劣。
回歸模型:采用和方差度量,度量目標是對於划分特征A,對應划分點s兩邊的數據集D1和D2,求出使D1和D2各自集合的均方差最小,同時D1和D2的均方差之和最小。表達式為:
其中,c1為D1的樣本輸出均值,c2為D2的樣本輸出均值。
對於決策樹建立后做預測的方式,CART分類樹采用葉子節點里概率最大的類別作為當前節點的預測類別。回歸樹輸出不是類別,采用葉子節點的均值或者中位數來預測輸出結果。
CART樹算法的剪枝
CART樹的生成:基於訓練數據集,遞歸構建二叉決策樹。CART樹的剪枝:用驗證數據集對生成的樹進行剪枝並選擇最優子樹,損失函數最小作為剪枝的標准。
CART分類樹的剪枝策略在度量損失的時候用基尼系數;CART回歸樹的剪枝策略在度量損失的時候用均方差。
決策樹很容易對訓練集過擬合,導致泛化能力差,所以要對CART樹進行剪枝,即類似線性回歸的正則化。CART采用后剪枝法,即先生成決策樹,然后產生所有剪枝后的CART樹,然后使用交叉驗證檢驗剪枝的效果,選擇泛化能力最好的剪枝策略。
- 剪枝損失函數表達式
α為正則化參數(和線性回歸的正則化一樣),C(Tt)為訓練數據的預測誤差,|Tt|是子樹T葉子節點數量。
當α = 0時,即沒有正則化,原始生成的CART樹即為最優子樹。當α = ∞時,正則化強度最大,此時由原始的生成CART樹的根節點組成的單節點樹為最優子樹。當然,這是兩種極端情況,一般來說,α越大,剪枝剪的越厲害,生成的最優子樹相比原生決策樹就越偏小。對於固定的α,一定存在使得損失函數Cα(Tt)最小的唯一子樹
- 剪枝的思路:
對於位於節點t的任意一顆子樹Tt,如果沒有剪枝,損失函數是:
如果將其剪掉,僅保留根節點,損失函數是:
當α = 0或α很小,Cα(Tt)<Cα(T),當α增大到一定程度時
當α繼續增大時不等式反向,即滿足下式:
Tt和T有相同的損失函數,但T節點更少,因此可以對子樹Tt進行剪枝,也就是將它的子節點全部剪掉,變為一個葉子結點T。
- 交叉驗證策略:
如果我們把所有節點是否剪枝的值α都計算出來,然后針對不同α對應的剪枝后的最優子樹做交叉驗證。這樣可以選擇最好的α,有了這個α,用對應的最優子樹作為最終結果。
有了上面的思路,CART樹的剪枝算法:
輸入是CART樹建立算法得到的原始決策樹T。
輸出是最優決策樹Tα。
算法過程:
(1)、初始化αmin = ∞,最優子樹集合ω = {T}。
(2)、從葉子結點開始自下而上計算內部節點 t 的訓練誤差損失函數Cα(Tt)(回歸樹為均方差,分類樹為基尼系數),葉子節點數|Tt|,以及正則化閾值
,更新αmin = α
(3)、得到所有節點的α值得集合M。
(4)、從M中選擇最大的值αk,自上而下的訪問子樹 t 的內部節點,如果
時,進行剪枝。並決定葉子節點 t 的值。如果是分類樹,這是概率最高的類別,如果是回歸樹,這是所有樣本輸出的均值。這樣得到αk對應的最優子樹Tk
(5)、最優子樹集合ω = ωυTk,M = M - {αk}。
(6)、如果M不為空,則回到步驟4。否則就已經得到了所有的可選最優子樹集合ω。
(7)、采用交叉驗證在ω選擇最優子樹Tα
總結
回歸的時候是用均方差
--CART算法缺點:
(1)、無論ID3,C4.5,CART都是選擇一個最優的特征做分類決策,但大多數,分類決策不是由某一個特征決定,而是一組特征。這樣得到的決策樹更加准確,這種決策樹叫多變量決策樹(multi-variate decision tree)。在選擇最優特征的時,多變量決策樹不是選擇某一個最優特征,而是選擇一個最優的特征線性組合做決策。代表算法OC1。
(2)、樣本一點點改動,樹結構劇烈改變。這個通過集成學習里面的隨機森林之類的方法解決。
優點:
這里不糾結ID3、C4.5、CART,這部分來自scikit-learn英文文檔。
- 1、簡單直觀,生成的決策樹很直觀。
- 2、基本不需要預處理,不需要提前歸一化和處理缺失值。
- 3、使用決策樹預測的代價是O(log2m)。m為樣本數。
- 4、既可以處理離散值也可以處理連續值。很多算法只是專注於離散值或者連續值。
- 5、可以處理多維度輸出的分類問題。
- 6、相比於神經網絡之類的黑盒分類模型,決策樹在邏輯上可以很好解釋。
- 7、可以交叉驗證的剪枝來選擇模型,從而提高泛化能力。
- 8、對於異常點的容錯能力好,健壯性高。
缺點:
- 1、決策樹算法非常容易過擬合,導致泛化能力不強。可以通過設置節點最少樣本數量和限制決策樹深度來改進。
- 2、決策樹會因為樣本發生一點的改動,導致樹結構的劇烈改變。這個可以通過集成學習之類的方法解決。
- 3、尋找最優的決策樹是一個NP難題,我們一般是通過啟發式方法,容易陷入局部最優。可以通過集成學習的方法來改善。
- 4、有些比較復雜的關系,決策樹很難學習,比如異或。這個就沒有辦法了,一般這種關系可以換神經網絡分類方法來解決。
- 5、如果某些特征的樣本比例過大,生成決策樹容易偏向於這些特征。這個可以通過調節樣本權重來改善。