決策樹:屬性的選擇(續)

接先前一節總結決策樹的,還有一些問題。上節的參考:

決策樹:從特徵的重要程度說起

上節主要介紹了決策樹的構造方法,以及非常重要一部分是對於每個節點的特徵屬性是怎麼選擇的,這是決策樹的核心。

比較原始的是基於信息熵與信息增益的方法做的,這也對應着最開始的ID3方法。爲了改進ID3,出現了基於信息增益率的特徵選擇以及基於基尼係數的特徵選擇方法。對應起來就是:

(1)信息增益 -> ID3
(2)信息增益率 -> C4.5
(3)基尼指數 -> CART

  • 信息增益

信息增益的做法最簡單,上節主要探討的是這種,簡單來說就是幾個步驟:

(1)首先計算一個未挑選屬性之前,從樣本分類角度來看的一個系統的信息熵。用實例假設好理解,假設100個樣本,每個樣本有7維特徵A-G,100個樣本中20個類別1,30個樣本爲類別2,50個爲類別3,那麼基於類別的系統的信息熵就是info(F) = -sum(plogp) = -20/100 * log(20/100)-30/100 * log(30/100) - 50/100*log(50/100)

(2)計算挑選一個屬性後,按該屬性分類完的分類系統信息熵。假設以A屬性劃分,劃分完可以分爲兩半,假設一半40個樣本(10個類1,10個類2,20個類3),另一半60個樣本(10個類1,20個類2,30個類3),那麼從類別角度來看系統的信息熵爲:info(F|A) = -(sum(組1) +sum(組2)) = -([10/40 * log(10/40) + 10/40 * log(10/40) + 20/40 * log(20/40)] + [10/60 * log(10/60) + 20/60 * log(20/60) + 30/60 * log(30/60)]), info(F|A)此爲A劃分條件下的信息熵.

(3)A屬性信息增益爲 g(F,A) =(info(F) - info(F|A))

(4)選擇A-G中最大的信息增益作爲分裂節點。

  • 信息增益率

上面這個過程中有一個非常重要的環節,就是步驟(2),我們上面說以屬性A進行劃分爲兩半,那麼究竟是怎麼劃分的呢?爲什麼就劃分爲2半而不是3半呢?

首先劃分爲兩半是簡單的以爲屬性A的特徵值只有兩個,比如只有0與1,那麼可以正好劃分爲兩半,而實際情況通常不是這樣的,屬性A所對應的特徵值對不同的樣本可能是很分散的,我們假設A的取值可以是0-9中間的任何一個,那麼這個時候我們要以哪個數劃分呢?劃分爲幾半呢?

首先說說劃分爲幾半,A的取值可以是0-9,理論上都可以劃分爲10份吧,每個樹對應一份,這樣的缺點是對應的分叉太多了,而決策樹構造的樹基本上都是二分叉的,簡單。既然是二分叉,0-9中選擇哪個數來分叉比較好呢?

這就涉及到一個分叉數了,如果A的取值更多,比如有1000個,那麼通常設置一個分叉數10,也就是0-100爲一個分割區間,100-200爲一個分割區間等等來進行劃分。

我們還是假設A的取值可以是0-9,假設分叉數爲5,也就是0-2一個區間,2-4爲一個區間,等等,共5個區間。然後按照這5個區間去劃分所有樣本,這樣就有5個子集合了,然後去做步驟(2),這時可以發現,現在的sum求信息熵裏面是不是就有5個了。

至此,我們終於可以引出信息增益的弊端了。因爲我們是靠信息增益來選擇屬性的,當A的取值很多的時候,那麼A的分叉數就會很多,導致每個子集都很純,因爲分的太細了嘛,這樣sum出來的信息熵就會很小,也就是信息增益很大,那麼就很大可能選擇A作爲節點的分割屬性。所以結論就是,信息增益的方法進行屬性選擇的時候會偏向取值較多的特徵。

解決這個問題的根本方法就是如何避免屬性A取值較多的情況,解決的一個方法就是信息增益率。

信息增益率怎麼做的呢?同樣先按照上面方法計算信息增益。只是多了一個步驟,還會計算一個分裂信息熵。還是假設A有10個取值,分裂成5個區間,那麼分裂信息熵的着眼目標不是類標籤,而是分裂值,什麼意思呢,假設0-2的區間有10個樣本(至於裏面有幾個0類別,有幾個1類別,不管),2-4有8個樣本,等等。總樣本數假設是100的話,那麼分裂信息熵就是H(A) = sum(-p*log§) = -(10/100) * (10/100) - (8/100) * (8/100) - …
這就是分裂信息熵,可以看到,加入分裂份數越多,也就是屬性A的取值越多的話,sum裏面的項越多,這個值也就越大(想想爲什麼)。那麼信息增益率的計算就是g(F,A)/H(A), 其中g(F,A)是前面的信息增益。

  • 基尼指數:Gini

最後來看下基尼指數(基尼不純度),定義就是表示在樣本集合中一個隨機選中的樣本被分錯的概率。Gini指數越小表示集合中被選中的樣本被分錯的概率越小,也就是說集合的純度越高,反之,集合越不純。

基尼指數(基尼不純度)= 樣本被選中的概率 * 樣本被分錯的概率。

用公式表示就是:
在這裏插入圖片描述

其實基尼指數的功能對標的是p*log§的功能,舉個例子,還是假設按照屬性A進行分割,100個樣本分成了兩半,一半40個樣本(10個類0,30個類1),一半60個樣本(20個類0,40個類1),這樣子集1中,Gini1§ = 1 - [(10/40) * (10/40) + (30/40) * (30/40)], 子集2的Gini2§ = 1 - [(20/60) * (20/60) + (40/60) * (40/60)]

那麼基於A屬性劃分得到的Gini = Gini1+ Gini2. 這樣對所有屬性選擇Gini最小的屬性作爲分割屬性。

其實可以看到,Gini的方法同樣會面對假如A的特徵值有很多的情況。對於一個具有多個取值(超過2個)的特徵,需要計算以每一個取值作爲劃分點,對樣本集D劃分之後子集的純度Gini(D,Ai),(其中Ai 表示特徵A的可能取值),也就是比如A的取值[0-2]一個區間,剩下的[2-9]一個區間計算基尼指數,[2-4]爲一個,剩下的區間爲一個,依次類推最後選擇最佳的。

相比而言,基尼指數只是換了一種方式計算信息熵而已,剩下的計算方法都相似,一個小區別就是基尼指數不需要計算log,而是p*p的方式,所以它的速度更快點,大多數時候,二者沒有特別的效果優劣;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章