1. 決策樹演算法基礎 ID3與C4.5
決策樹演算法基礎:ID3與C4.5
設X是一個取有限個值得離散隨機變數,其概率分布為P(X=xi)=pi, i=1,2,…,n。則隨機變數X的信息熵為
條件熵H(Y|X)表示在已知隨機變數X的條件下隨機變數Y的不確定性。H(Y|X)的計算公式為
所以決策樹分支後信息總熵H(D|A)=P1*H1+P2*H2+...+Pn*Hn,(特徵A條件下D的經驗條件熵)
所以信息增益ΔH=H(D)-H(D|A)
H(D|A)越小,ΔH越大,該特徵A越適合作為當前的決策節點。
選取最佳特徵偽代碼:
計算信息總熵H(D)
遍歷每一個特徵下的關於D的經驗條件熵H(D|A)
計算每一個特徵的信息增益ΔH
將信息增益ΔH最大的特徵作為最佳特徵選為當前決策節點
ID3演算法偽代碼:
如果第一個標簽的數量等於所有的標簽數量,說明這是一個單節點樹,返回這個標簽作為該節點類
如果特徵只有一個,說明這是一個單節點樹,用多數表決法投票選出標簽返回作為該節點類
否則,按信息增益最大的特徵A作為當前決策節點,即決策樹父節點
如果該特徵的信息增益ΔH小於閾值,則用多數表決法投票選出標簽返回作為該節點類
否則,對於該特徵A的每一個可能值ai,將原空間D分割為若干個子空間Di
對於若干個非空子集Di,將每個Di中實例數最大的類作為標記,構建子節點
以Di為訓練空間,遞歸調用上述步驟
由於信息增益存在偏向於選擇取值較多的特徵的問題,而C4.5演算法中,將ID3演算法里的信息增益換成信息增益比,較好地解決了這個問題。
決策樹的優點在於計算量簡單,適合有缺失屬性值的樣本,適合處理不相關的特徵。而缺點是容易過擬合,可以通過剪枝來簡化模型,另外隨機森林也解決了這個問題。
2. 如何利用id3演算法建立決策樹
利用 ID3 演算法構建決策樹是一種有效的方法,尤其在面對復雜決策時。首先,從信息量最大的條件開始推斷結果,能夠以最少的步驟達到目的。在構建決策樹時,通過量化信息量,使用信息熵作為度量工具,來選擇最佳分叉點。
信息熵定義為集合中正反例的比例,通過公式 Entropy(S) = -p+log2(p+) - p-log2(p-)來計算,其中 p+ 是正例比例,p- 是反例比例。熵值越高,表示信息量越小;值越低,則信息量越大。這個指標在多個類別情況中同樣適用,且在單一類別時熵值為零,多個類別且數量相等時熵值最大。
構建決策樹時,選擇信息量最大的屬性作為根節點,遞歸地將數據集拆分為子集。每個屬性取值對應的子集形成分支,最終生成純度最高的葉子節點。在多個屬性選擇下,採用信息增益作為評價標准,信息增益 = 原始熵 - 子樹信息熵的平均值,以判斷最佳分叉屬性。該過程以自頂向下的方式,不斷細化決策分支,直至純度達到預設標准或無法進一步拆分。
ID3 演算法是由 J. Ross Quinlan 發明,並經過多次迭代優化。其核心在於通過信息熵和信息增益的計算,自動化地選擇最優屬性進行決策樹構建。優化方案如 C4.5 等進一步提升了演算法的性能。
為幫助理解和演示 ID3 演算法,可以參考相關在線可視化工具和 PPT 材料,如 id3.js.org 或其他教育資源。
3. 決策樹的原理及演算法
決策樹基本上就是把我們以前的經驗總結出來。我給你准備了一個打籃球的訓練集。如果我們要出門打籃球,一般會根據「天氣」、「溫度」、「濕度」、「刮風」這幾個條件來判斷,最後得到結果:去打籃球?還是不去?
上面這個圖就是一棵典型的決策樹。我們在做決策樹的時候,會經歷兩個階段:構造和剪枝。
構造就是生成一棵完整的決策樹。簡單來說,構造的過程就是選擇什麼屬性作為節點的過程,那麼在構造過程中,會存在三種節點:
根節點:就是樹的最頂端,最開始的那個節點。在上圖中,「天氣」就是一個根節點;
內部節點:就是樹中間的那些節點,比如說「溫度」、「濕度」、「刮風」;
葉節點:就是樹最底部的節點,也就是決策結果。
剪枝就是給決策樹瘦身,防止過擬合。分為「預剪枝」(Pre-Pruning)和「後剪枝」(Post-Pruning)。
預剪枝是在決策樹構造時就進行剪枝。方法是在構造的過程中對節點進行評估,如果對某個節點進行劃分,在驗證集中不能帶來准確性的提升,那麼對這個節點進行劃分就沒有意義,這時就會把當前節點作為葉節點,不對其進行劃分。
後剪枝就是在生成決策樹之後再進行剪枝,通常會從決策樹的葉節點開始,逐層向上對每個節點進行評估。如果剪掉這個節點子樹,與保留該節點子樹在分類准確性上差別不大,或者剪掉該節點子樹,能在驗證集中帶來准確性的提升,那麼就可以把該節點子樹進行剪枝。
1是欠擬合,3是過擬合,都會導致分類錯誤。
造成過擬合的原因之一就是因為訓練集中樣本量較小。如果決策樹選擇的屬性過多,構造出來的決策樹一定能夠「完美」地把訓練集中的樣本分類,但是這樣就會把訓練集中一些數據的特點當成所有數據的特點,但這個特點不一定是全部數據的特點,這就使得這個決策樹在真實的數據分類中出現錯誤,也就是模型的「泛化能力」差。
p(i|t) 代表了節點 t 為分類 i 的概率,其中 log2 為取以 2 為底的對數。這里我們不是來介紹公式的,而是說存在一種度量,它能幫我們反映出來這個信息的不確定度。當不確定性越大時,它所包含的信息量也就越大,信息熵也就越高。
ID3 演算法計算的是信息增益,信息增益指的就是劃分可以帶來純度的提高,信息熵的下降。它的計算公式,是父親節點的信息熵減去所有子節點的信息熵。
公式中 D 是父親節點,Di 是子節點,Gain(D,a) 中的 a 作為 D 節點的屬性選擇。
因為 ID3 在計算的時候,傾向於選擇取值多的屬性。為了避免這個問題,C4.5 採用信息增益率的方式來選擇屬性。信息增益率 = 信息增益 / 屬性熵,具體的計算公式這里省略。
當屬性有很多值的時候,相當於被劃分成了許多份,雖然信息增益變大了,但是對於 C4.5 來說,屬性熵也會變大,所以整體的信息增益率並不大。
ID3 構造決策樹的時候,容易產生過擬合的情況。在 C4.5 中,會在決策樹構造之後採用悲觀剪枝(PEP),這樣可以提升決策樹的泛化能力。
悲觀剪枝是後剪枝技術中的一種,通過遞歸估算每個內部節點的分類錯誤率,比較剪枝前後這個節點的分類錯誤率來決定是否對其進行剪枝。這種剪枝方法不再需要一個單獨的測試數據集。
C4.5 可以處理連續屬性的情況,對連續的屬性進行離散化的處理。比如打籃球存在的「濕度」屬性,不按照「高、中」劃分,而是按照濕度值進行計算,那麼濕度取什麼值都有可能。該怎麼選擇這個閾值呢,C4.5 選擇具有最高信息增益的劃分所對應的閾值。
針對數據集不完整的情況,C4.5 也可以進行處理。
暫無
請你用下面的例子來模擬下決策樹的流程,假設好蘋果的數據如下,請用 ID3 演算法來給出好蘋果的決策樹。
「紅」的信息增益為:1「大」的信息增益為:0
因此選擇「紅」的作為根節點,「大」沒有用,剪枝。
數據分析實戰45講.17 丨決策樹(上):要不要去打籃球?決策樹來告訴你