接先前一節總結決策樹的,還有一些問題。上節的參考:
決策樹:從特徵的重要程度說起
上節主要介紹了決策樹的構造方法,以及非常重要一部分是對於每個節點的特徵屬性是怎麼選擇的,這是決策樹的核心。
比較原始的是基於資訊熵與資訊增益的方法做的,這也對應著最開始的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指數越小表示集合中被選中的樣本被分錯的概率越小,也就是說集合的純度越高,反之,集合越不純。
基尼指數(基尼不純度)= 樣本被選中的概率 * 樣本被分錯的概率。
用公式表示就是:
其實基尼指數的功能對標的是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的方式,所以它的速度更快點,大多數時候,二者沒有特別的效果優劣;
決策樹選擇
資訊增益 偏向取值較多的特徵 資訊增益比 偏向取值較少的特徵 基尼 被選中的概率乘以被分錯的概率 資訊增益準則對那些屬性的取值比較多的屬性有所偏好,也就是說,採用資訊增益作為判定方法,會傾向於去選擇屬性取值比較多的屬性。那麼,選擇取值多的屬性為什麼就不好了呢?舉個比較極端的例子,如果將身份證號作為乙...
決策樹 特徵選擇
決策樹的特徵選擇標準有兩種 資訊增益,資訊增益比 0.熵指不穩定程度。熵越大,不穩定程度越高,則越容易 決策樹中也指某結點內含資訊量較多,分類能力較差.計算公式 其中,pi為隨機變數x在樣本空間的分布,即第i個型別出現的概率。為i到n求和。n為特徵取值種類數量.ps 為何使用這樣的乙個函式?xlog...
決策樹之特徵選擇
一般而言,隨著劃分過程不斷進行,我們希望決策樹的分支結點所包含的樣本盡可能屬於同一類別,即結點的 純度 purity 越來越高。假設當前樣本集合 d 中第 k 類樣本所佔的比例為 p k k 1,2,mathcal y 離散屬性 a 有 v 個可能的取值 若使用 a 來對樣本集 d 進行劃分,則會產...