1. 程式人生 > >決策樹演算法原理及實現

決策樹演算法原理及實現

歡迎大家檢視實現的完整程式碼。。。

決策樹模型

分類決策樹模型是一種描述對例項進行分類的樹形結構。決策樹由結點和有向邊組成。結點有兩種型別:內部節點和葉節點,內部節點表示一個特徵或屬性,葉節點表示一個分類類別。
分類的時候,從根節點開始,按照某種策略對例項的每一個特徵進行測試,根據測試結果,將例項分配到其子結點;此時,每一個子結點對應著該特徵的一個取值。如此遞歸向下移動,直至達到滿足下面遞迴終止條件之一:

  1. 當前節點包含的所有樣本全部屬於同一類別;
  2. 當前節點的待選屬性集為空集,或者是當前節點的所有樣本在所有待選屬性集上的取值一樣。

對於第二種情形,將當前節點標記為葉節點,並將它的類別標記為所含樣本最多的類別(各個類別所含樣本數相等,則任意選擇一個類別作為其類別)

資料集特徵劃分選擇

我們知道,對於當前的節點的所有待選的特徵(屬性)集A={A1,A2,A3},選擇哪一個特徵來劃分當前資料集呢???直觀上地,我們當然希望選擇的這個特徵將資料集劃分到幾個子集中,使得每一個子集儘可能的屬於同一個類別,即,每一個子集的純度(Purity)越高越好。這裡我將介紹常見的三個量化指標,資訊增益(Information Gain)資訊增益率(Information Gain Ratio)基尼指數(Gini Index)
1. 資訊增益
資訊增益是通過資訊熵(更多關於它的介紹,看這裡理論來度量樣本集合純度的一個指標,我們假定當前的樣本集合為

D,其中第k{1,2,,|Y|}個類別所佔當前樣本集合的比例為pk,那麼當前樣本集合的資訊熵為,

Entropy(D)=k=1|Y|pklog2pk|Y|
很顯然,這個值越小,則當前資料集的純度就越高。
我們假定當前待選屬性集中某個屬性AV個取值{A1,A2,,AV},那麼我們選擇用它來劃分當前資料集,就會產生V個分支節點(子集),其中第v個分支節點為包含當前資料集D中所有在屬性A上取值為Av的樣本集合,記為,
Dv
,那麼我們使用屬性A來劃分資料集D的資訊增益為,info_gain(D,A)=Entropy(D)v=1V|Dv||D|Entropy(Dv)一般來說,資訊增益越大,則使用屬性A來劃分資料集得到的子集,整體而言純度就會越高,因此我們選擇的屬性就為,A=argmaxAAinfo_gain(D,A)A細心的你,可能發現了這種計算策略往往更加偏向於選擇那些取值比較多的屬性,也就是上面提到的V會比較大,因為這些屬性天然的會將資料集劃分為純度都比較高的子集(如ID屬性等),然而這樣的決策樹往往泛化能力較差,對未知資料不能準確預測。所以我們要對那些取值較多的屬性在計算資訊增益時進行改進
ID3
2. 資訊增益率
在前面提到的資訊增益的基礎上,做出如下改進,