1. 程式人生 > >決策樹演算法(ID3,C4.5,CART)

決策樹演算法(ID3,C4.5,CART)

ID3,C4.5,CART是是決策樹的核心演算法。它們都由特徵選擇,樹的生成,剪枝組成。但ID3和C4.5用於分類,CART可用於分類與迴歸。

1.ID3演算法

ID3演算法遞迴地構建決策樹,從根節點開始,對所有特徵計算資訊增益,選擇資訊增益最大的特徵作為節點的特徵,由該特徵的不同取值建立子節點;再對子節點遞迴地呼叫以上方法構建決策樹;知道所有特徵的資訊增益均很小或者沒有特徵可以選擇為止。最後得到一個決策樹。
  在演算法中(C4.5也是),有三種情形導致遞迴返回:
  (1)當前節點包含的樣本全屬於同一類別,無需劃分。
  (2)當前屬性集為空,或是所有樣本在所有屬性上取值相同,無法劃分。(此時將所含樣本最多的類別設定為該葉子節點類別)
  (3)當前節點包含的樣本集合為空,不能劃分。(將其父節點中樣本最多的類別設定為該葉子節點的類別)

2.C4.5演算法

資訊增益準則對可取值數目較多的屬性有所偏好,例如將資料的ID作為特徵的話,它的資訊增益將達到最大值,會造成過擬合。因而,C4.5演算法中將採用資訊增益比來進行特徵的選擇。資訊增益比準則對可取值數目較少的屬性有所偏好。

C4.5演算法同ID3演算法過程相似,僅在選擇特徵時,使用資訊增益比作為特徵選擇準則。


  輸入:訓練資料集 DD ,特徵集 AA , 閾值 ϵϵ ;
  過程:函式 TreeGenerate(D,A)TreeGenerate(D,A) .
  1:計算節點資訊增益比 Gainratio(D,a)Gainratio(D,a) :
  2:  節點a的熵: Ent(D,a)Ent(D,a)
  3:  節點D的熵: Ent(D)Ent(D)
  4:  節點資訊增益: Gain(D,a)=Ent(D)−Ent(D,a)Gain(D,a)=Ent(D)−Ent(D,a)
  5:  節點固定值: IV(a)IV(a)
  6:  節點資訊增益比: Gainratio(D,a)=Gain(D,a)IV(a)Gainratio(D,a)=Gain(D,a)IV(a)
  7:生成節點node:
  8:if

 DD 中樣本全屬於同一類別 CC then
  9:  將node標記為 CC 類葉節點;return
  10:end if
  11:if A=∅A=∅ OR DD 中樣本在 AA 上取值相同then
  12:  將node標記為葉節點,期類別標記為 DD 中樣本數最多的類;return
  13:end if
  14:按照節點資訊增益,從 AA 中選擇最優劃分屬性 a∗a∗
  15:for a∗a∗ 中的每一個值 ai∗a∗i do

  16:  為node生成一個分支;令 DiDi 表示 DD 中在 a∗a∗ 上取值為 ai∗a∗i 的樣本子集;
  17:  if DiDi 為空,then
  18:    將分支節點標記為葉節點,其類別標記為 DD 中樣本最多的類;return
  19:  else
  20:    以 TreeGenerate(Di,A/a∗)TreeGenerate(Di,A/a∗) 為分支節點
  21:  end if
  22:end for
  輸出:以node為根節點的一棵決策樹

3. CART演算法

CART分類樹通過基尼指數選擇最優特徵,同時決定該特徵的最優二值切分點(ID3和C4.5直接選擇最優特徵,不用劃分)。基尼指數越大,樣本集合不確定性越大。

CART樹生成

(1) 設結點的訓練資料集為D,計算現有特徵對該資料集的基尼指數.此時,對於每個特徵,每次取其中一個每個可能取得值,根據樣本點對該值的測試結果為”是”或”否”將D分成2部分,並計算基尼指數. 
(2) 在所有可能的特徵,以及他們所有可能的切分點中,選擇基尼指數最小的特徵,該選擇的特徵為最優特徵,該特徵中的切分點為最優切分點,依照最優特徵和最優切分點生成二叉樹,並把訓練資料集分配到子節點中。 
(3)對兩個子節點遞迴呼叫 (1) (2) ,直至滿足停止條件 
(4)生成CART決策樹。 
停止條件是樣本個數小於預定閾值,或樣本基尼指數小於預定閾值,或沒有更多特徵。

4. 剪枝操作

理想的決策樹有三種:

1.葉子節點數最少

2.葉子加點深度最小

3.葉子節點數最少且葉子節點深度最小。

而在實際操作中,會由於噪聲或者缺乏代表性樣本導致過擬合,這就需要進行剪枝操作。剪枝包含預剪枝和後剪枝。

預剪枝

通過提前停止樹的構建而對樹剪枝,一旦停止,節點就是樹葉,該樹葉持有子集元祖最頻繁的類。

停止決策樹生長最簡單的方法有:

1)定義一個高度,當決策樹達到該高度時就停止決策樹的生長

2)達到某個節點的例項具有相同的特徵向量,及時這些例項不屬於同一類,也可以停止決策樹的生長。這個方法對於處理

資料的資料衝突問題比較有效。

3)定義一個閾值,當達到某個節點的例項個數小於閾值時就可以停止決策樹的生長

4)定義一個閾值,通過計算每次擴張對系統性能的增益,並比較增益值與該閾值大小來決定是否停止決策樹的生長。

2.後剪枝方法

後剪枝(postpruning):它首先構造完整的決策樹,允許樹過度擬合訓練資料,然後對那些置信度不夠的結點子樹用葉子結點來代替,該葉子的類標號用該結點子樹中最頻繁的類標記。相比於先剪枝,這種方法更常用,正是因為在先剪枝方法中精確地估計何時停止樹增長很困難。

 

參考網址

https://www.cnblogs.com/lliuye/p/9008901.html