决策树数学原理(ID3,c4.5,cart算法)
?
上面這個圖就是一棵典型的決策樹。我們在做決策樹的時候,會經歷兩個階段:構造和剪枝。
構造
簡單來說,構造的過程就是選擇什么屬性作為節點的過程,那么在構造過程中,會存在三種節點:
根節點:就是樹的最頂端,最開始的那個節點。在上圖中,“天氣”就是一個根節點;選擇哪個屬性作為更節點!
內部節點:就是樹中間的那些節點,比如說“溫度”、“濕度”、“刮風”;選擇哪些屬性作為子節點!
葉節點:就是樹最底部的節點,也就是決策結果。什么時候停止并得到目標狀態!
節點之間存在父子關系。比如根節點會有子節點,子節點會有子子節點,但是到了葉節點就停止了,葉節點不存在子節點。
選擇哪個屬性作為根節點;選擇哪些屬性作為子節點;
剪枝
剪枝就是給決策樹瘦身,這一步想實現的目標就是,不需要太多的判斷,同樣可以得到不錯的結果。之所以這么做,是為了防止“過擬合”(Overfitting)現象的發生。
欠擬合,和過擬合就好比是下面這張圖中的第一個和第三個情況一樣,訓練的結果“太好“,反而在實際應用過程中會導致分類錯誤。
造成過擬合的原因之一就是因為訓練集中樣本量較小。這樣就會把訓練集中一些數據的特點當成所有數據的特點,但這個特點不一定是全部數據的特點,這就使得這個決策樹在真實的數據分類中出現錯誤,也就是模型的“泛化能力”差。
一般來說,剪枝可以分為“預剪枝”(Pre-Pruning)和“后剪枝”(Post-Pruning)。
預剪枝是在決策樹構造時就進行剪枝。方法是在構造的過程中對節點進行評估,如果對某個節點進行劃分,在驗證集中不能帶來準確性的提升,那么對這個節點進行劃分就沒有意義,這時就會把當前節點作為葉節點,不對其進行劃分。
后剪枝就是在生成決策樹之后再進行剪枝,通常會從決策樹的葉節點開始,逐層向上對每個節點進行評估。如果剪掉這個節點子樹(對該節點進行劈叉 ),分類準確性沒有變化或是能帶來準確性的提升,那么就可以把該節點子樹進行剪枝。方法是:用這個節點子樹的葉子節點來替代該節點,類標記為這個節點子樹中最頻繁的那個類。
顯然將哪個屬性(天氣、溫度、濕度、刮風)作為根節點是個關鍵問題,在這里我們先介紹兩個指標:純度和信息熵。你可以把決策樹的構造過程理解成為尋找純凈劃分的過程。數學上,我們可以用純度來表示,純度換一種方式來解釋就是讓目標變量的分歧最小。
信息熵(entropy)它表示了信息的不確定度。
信息學之父香農引入了信息熵的概念,并給出了計算信息熵的數學公式:
p(i|t) 代表了節點 t 為分類 i 的概率,當不確定性越大時,它所包含的信息量也就越大,信息熵也就越高。
我舉個簡單的例子,假設有 2 個集合:
集合 1:5 次去打籃球,1 次不去打籃球;
集合 2:3 次去打籃球,3 次不去打籃球。
節點劃分為類別 1 (不去打籃球)的概率是 1/6,為類別 2(打籃球) 的概率是 5/6,
從上面的計算結果中可以看出,信息熵越大,純度越低。集合中的所有樣本均勻混合時,信息熵最大,純度最低。
我們在構造決策樹的時候,會基于純度來構建。而經典的 “不純度”的指標有三種,分別是信息增益(ID3 算法)、、信息增益率(C4.5 算法)以及基尼指數(Cart 算法)。
ID3 算法計算的是信息增益,信息增益指的就是劃分可以帶來純度的提高,信息熵的下降。它的計算公式,是父親節點的信息熵減去所有子節點的信息熵。在計算的過程中,我們會計算每個子節點的歸一化信息熵,即按照每個子節點在父節點中出現的概率,來計算這些子節點的信息熵。
所以信息增益的公式可以表示為:
公式中 D 是父親節點,Di 是子節點,Gain(D,a) 中的 a ?作為 D 節點的屬性選擇。
假設天氣 = 晴的時候,會有 5 次去打籃球,5 次不打籃球。其中 D1 刮風 = 是,有 2 次打籃球,1 次不打籃球。D2 刮風 = 否,有 3 次打籃球,4 次不打籃球。那么 a 代表節點的屬性,即天氣 = 晴。
也就是 D 節點的信息熵 -2 個子節點的歸一化信息熵。2 個子節點歸一化信息熵?=3/10 的 D1 信息熵 +7/10 的 D2 信息熵。(3/10相當于是/否的權重)我們基于 ID3 的算法規則,訓練集中一共有 7 條數據,3 個打籃球,4 個不打籃球,所以根節點的信息熵是(來自于原表格):
如果你將天氣作為屬性的劃分,會有三個葉子節點 D1、D2 和 D3,分別對應的是晴天、陰天和小雨。我們用 + 代表去打籃球,- 代表不去打籃球。
于是我們可以用下面的方式來記錄 D1,D2,D3:
D1(天氣 = 晴天)={1-,2-,6+}
D2(天氣 = 陰天)={3+,7-}
D3(天氣 = 小雨)={4+,5-}
那么作為子節點的歸一化信息熵 = 3/7*0.918+2/7*1.0+2/7*1.0=0.965。
天氣作為屬性節點的信息增益為,Gain(D , 天氣)=0.985-0.965=0.020。
同理我們可以計算出其他屬性作為根節點的信息增益,它們分別為 :
Gain(D , 溫度)=0.128
Gain(D , 濕度)=0.020
Gain(D , 刮風)=0.020
我們能看出來溫度作為屬性的信息增益最大。因為 ID3 就是要將信息增益最大的節點作為父節點,這樣可以得到純度高的決策樹,所以我們將溫度作為根節點.
tips:在選擇最終的決策樹時,節點用屬性,節點與節點之間的連線用屬性對應的狀態,直到葉子節點是最終的打籃球/不打籃球;每個屬性值都得遍歷比較選擇信息增益最大得屬性,且在計算過程中,將屬性當作根節點(看其打籃球,不打籃球的次數計算信息熵),然后根節點下各狀態的葉子節點(看打籃球/不大籃球的次數,計算葉子節點的信息熵),最終計算該屬性的信息增益,同理,計算其它屬性的信息增益,比較得到最終的屬性。
然后我們要將上圖中第一個葉節點,也就是 D1={1-,2-,3+,4+}進一步進行分裂往下劃分,計算其不同屬性(天氣、濕度、刮風)作為節點的信息增益,可以得到:、
Gain(D , 天氣)=1
Gain(D , 濕度)=1
Gain(D , 刮風)=0.3115
同理,我們可以按照上面的計算步驟得到完整的決策樹,結果如下:
于是我們通過 ID3 算法得到了一棵決策樹。ID3 的算法規則相對簡單,可解釋性強。同樣也存在缺陷,比如我們會發現 ID3 算法傾向于選擇取值比較多的屬性。這樣,如果我們把“編號”作為一個屬性(一般情況下不會這么做,這里只是舉個例子)那么“編號”將會被選為最優屬性 。而實際上,編號屬性是無關屬性,它對分類沒有太大作用!
所以 ID3 有一個缺陷就是,有些屬性可能對分類任務沒有太大作用,但是他們仍然可能會被選為最優屬性。這種缺陷不是每次都會發生,只是存在一定的概率。在大部分情況下,ID3 都能生成不錯的決策樹分類。針對ID3算法可能的缺陷,后人提出了改進算法。
在 ID3 算法上進行改進的 C4.5 算法
針對ID3 算法傾向于選擇取值比較多的屬性:c4.5采用信息增益率的方式來選擇屬性。
信息增益率=信息增益/屬性熵;
當屬性值很多,雖然信息增益變大,但對于c4.5來說,屬性熵也會增大,所以整體的信息增益率并不大。
針對ID3容易產生過度擬合的情況:c4.5會在決策樹構造之后采用悲觀剪枝,這樣可以提升決策樹泛化能力。
c4.5可以處理連續屬性的情況,對連續屬性進行離散化的處理。
針對數據集不完整,c4.5也可以進行處理
| ? | ID3 | c4.5 | cart |
| 優點 | 算法簡單,解釋性強 | 信息增益率可以解決噪聲問題;還可以處理連續值,數據缺失問題。 | 很大程度與c4.5一樣,只是在屬性劃分上選擇基尼指數。其中回歸樹選擇偏差(絕對偏差,最小二乘偏差)作為選擇依據 |
| 缺點 | 對噪聲敏感 | 需要對數據進行多次掃描,算法效率低 | 類c4.5 |
| 工具 | sklearn 中的 DecisionTreeClassifier 創建 CART 分類樹 通過 DecisionTreeRegressor 創建 CART 回歸樹。 | ||
cart算法,全稱Classification and Regression Tree(學會發音很重要)分類回歸樹。ID3與C4.5可以生成二叉樹和多叉數,而cart只支持二叉樹。同時,cart算法既可以做分類樹,也可以做回歸樹。
分類樹可以處理離散數據,也就是數據種類有限的數據,它輸出的是樣本的類別,而回歸樹可以對連續型的數值進行預測,也就是數據在某個區間內都有取值的可能,它輸出的是一個數值。
Cart分類樹流程
ID3是基于信息增益來選擇,C4.5是基于信息增益率,而Cart是基于基尼系數來做屬性選擇.
基尼系數本身反應了樣本的不確定度。當基尼系數越小的時候,說明樣本之間的差異性小,不確定程度低。?CART 算法在構造分類樹的時候,會選擇基尼系數最小的屬性作為屬性的劃分。
假設 t 為節點,那么該節點的 GINI 系數的計算公式為:
這里 p(Ck|t) 表示節點 t 屬于類別 Ck 的概率,節點 t 的基尼系數為 1 減去各類別 Ck 概率平方和。
通過下面這個例子,我們計算一下兩個集合的基尼系數分別為多少:
集合 1:6 個都去打籃球;
集合 2:3 個去打籃球,3 個不去打籃球。
針對集合 1,所有人都去打籃球,所以 p(Ck|t)=1,因此 GINI(t)=1-1=0。
針對集合 2,有一半人去打籃球,而另一半不去打籃球,
p(C1|t)=0.5,p(C2|t)=0.5,
GINI(t)=1-(0.5*0.5+0.5*0.5)=0.5
所以,集合1的基尼系數更小,樣本更加穩定。
下面具體看示例:
節點 D 的基尼系數等于子節點 D1 和 D2 的歸一化基尼系數之和,用公式表示為:
GINI(D1)=1-1=0
GINI(D2)=0.5
GINI(D,A)=(6/12)*GINI(D1)+(6/12)*GINI(D2)=0.25
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的决策树数学原理(ID3,c4.5,cart算法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 决策树算法实现
- 下一篇: 数据抽象能力---适合任何行业