决策树-特征属性选择划分
? ? ? ?決策樹是一個樹結構(可以是二叉樹或非二叉樹),其每個非葉節點表示一個特征屬性上的測試,每個分支代表這個特征屬性在某個值域上的輸出,而每個葉節點存放一個輸出類別。使用決策樹進行決策的過程就是從根節點開始,測試待分類項中相應的特征屬性,并按照其值選擇輸出分支,直到到達葉子節點,將葉子節點存放的類別作為決策結果。
決策樹學習通常包含這幾個方面:特征選擇、決策樹生成、決策樹剪枝、缺失值/異常值處理、決策樹集成學習。
決策樹-特征屬性選擇劃分
決策樹-缺失值和連續值處理及屬性劃分
決策樹-不同的決策樹模型對比
決策樹-避免過擬合預剪枝和后剪枝對比區別
決策樹-算法小結及常見問題
? ??
特征選擇,就是決策樹的構造過程,為了找到最優的劃分特征,我們需要先了解一些信息論的知識。
目錄
信息熵(Information Entropy)
條件熵(Conditional Entropy)
信息增益(Information Gain)
信息增益比/增益率(Information?Gain-ratio)
基尼系數(Gini)
其他
? ? ? ?決策樹構建過程中,需要將特征作為決策樹中的節點,其中特征(屬性)的劃分,目的是保證節點的純度越來越高,劃分樣本的能力越強,特征區分效果越好。
信息熵越小,純度越高,特征劃分效果越好;
信息增益越大,純度越高,特征劃分效果越好;
基尼系數越小,純度越高,特征劃分效果越好;
?
信息熵(Information Entropy)
? ? ? ?信息是個很抽象的概念。人們常常說信息很多,或者信息較少,但卻很難說清楚信息到底有多少。比如一本五十萬字的中文書到底有多少信息量。直到1948年,香農提出了“信息熵”的概念,才解決了對信息的量化度量問題。信息熵這個詞是香農從熱力學中借用過來的。熱力學中的熱熵是表示分子狀態混亂程度的物理量。香農用信息熵的概念來描述信源的不確定度。
信息熵是用來衡量一個隨機變量出現的期望值,一個變量的信息熵越大,那么他出現的各種情況也就越多,也就是包含的內容多(所以在機器學習中信息熵越小越好)。
? ? ? ?我們要描述他就需要付出更多的表達才可以,也就是需要更多的信息才能確定這個變量。在實際的情況中,每種可能情況出現的概率并不是相同的,所以熵(entropy)就用來衡量整個系統的平均信息量。熵只有特征的種類和概率有關系,與取值沒有關系。
對于一個取有限個值的隨機變量X,如果其概率分布為:
那么隨機變量X的熵可以用以下公式描述:
舉個例子,如果一個分類系統中,類別的標識是c,取值情況是 c1,c2,?,cn;其中n為類別的總數。那么此分類系統的熵為:
更特別一點,如果是個二分類系統,那么此系統的熵為:
其中p(c0)、p(c1)分別為正負樣本出現的概率。
?
示例1:世界杯決賽的兩支球隊中,哪支球隊將獲得冠軍?
在對球隊實力沒有任何了解的情況下,每支球隊奪冠的概率都是1/2,所以誰獲得冠軍這條信息的信息量是
如果信息是四強中的球隊誰獲得了冠軍,它的信息量是
其實這正好對應了計算機對數字的表示,如果用二進制表示,每一位出現0和1的概率都是1/2,所以每一位的信息量是1bit。如果用十六進制表示,每一位出現任意一個符號的概率是1/16,所以每一位能表示
所以1位十六進制的信息量,和4位二進制信息量是相同的。
熵是平均信息量,也可以理解為不確定性。例如進行決賽的巴西和南非,假設根據經驗判斷,巴西奪冠的幾率是80%,南非奪冠的幾率是20%,則誰能獲得冠軍的信息量就變為:
?
小于1 bit了,經驗減少了判斷所需的信息量,消除了不確定性。
而且通過計算可以發現,巴西奪冠的幾率越高,計算出的熵就越小,即越是確定的情況,不確定性越小,信息量越少。如果巴西100%奪冠,那么熵是0,相當于沒有任何信息。當兩隊幾率都是50%最難判斷,所熵達到最大值1。其實之前的 - log2 1/2 = 1 bit 是簡化了的計算過程,其結果也是通過熵的公式來計算的
計算信息量要綜合考慮每種結果的可能性。
另一個會迷惑的問題是熵會大于1嗎?答案當然是肯定的,剛剛計算的最大值為1bit,是因為最終的結果只有兩種情況。在有四支球隊的時候,其最大值就是
當四支球隊奪冠概率不等的時候,熵會小于2 bit。
?
條件熵(Conditional Entropy)
如果投擲一枚均勻的篩子,那么篩子出現1-6的概率是相等的,此時,整個系統的熵可以表述為:
如果我們加一個特征,告訴你擲篩子的結果出來是偶數,因為擲篩子出來為偶數的結果只可能為2,4,6,那么此時系統的熵為:
因為我們加了一個特征x:結果為偶數,所以整個系統的熵減小,不確定性降低。
?
信息增益(Information Gain)
在信息增益中,衡量標準是看特征能夠為分類系統帶來多少信息,帶來的信息越多,該特征越重要。對一個特征而言,系統有它和沒它時信息量將發生變化,而前后信息量的差值就是這個特征給系統帶來的信息量。所謂信息增益。
系統含有特征 t 的時候信息量很好計算,就是剛才的式子,它表示的是包含所有特征時系統的信息量。對應到我們的系統中,就是下面的等價:
(1)系統不包含特征 t ;
(2)系統雖然包含特征t,但是t已經固定了,不能變化。我們計算分類系統不包含特征t的時候,就使用情況
(3)來代替,就是計算當一個特征t不能變化時,系統的信息量是多少。這個信息量其實也有專門的名稱,就叫做 “ 條件熵 ” ,條件,自然就是指 “ t 已經固定 ” 這個條件。
例如一個特征X,它可能的取值有 n 多種(x1,x2,……,xn),當計算條件熵而需要把它固定的時候,要把它固定在哪一個值上呢?答案是每一種可能都要固定一下,計算n個值,然后取均值才是條件熵。而取均值也不是簡單的 加一加然后除以n,而是要用每個值出現的概率來算平均(簡單理解,就是一個值出現的可能性比較大,固定在它上面時算出來的信息量占的比重就要多一些)。
因此有這樣兩個條件熵的表達式:
這是指特征X被固定為值 xi 時的條件熵,
這是指特征X被固定時的條件熵,注意與上式在意義上的區別。從剛才計算均值的討論可以看出來,第二個式子與第一個式子的關系就是:
具體到我們文本分類系統中的特征 t,t 有幾個可能的值呢?注意 t 是指一個固定的特征,比如他就是指關鍵詞“經濟”或者“體育”,當我們說特征“經濟”可能的取值時,實際上只有兩個,“經濟”要么出現,要么不出現。一般的,t 的取值只有 t(代表 t 出現)和(代表 t 不出現),注意系統包含 t 但 t 不出現與系統根本不包含 t 可是兩回事。
因此固定t時系統的條件熵就有了,為了區別 t 出現時的符號與特征 t 本身的符號,我們用 T 代表特征,而用 t 代表 T 出現,那么:
與剛才的式子對照一下,含義很清楚對吧,P(t)就是T出現的概率,就是T不出現的概率。這個式子可以進一步展開,其中的
另一半就可以展開為:
因此特征T給系統帶來的信息增益就可以寫成系統原本的熵與固定特征T后的條件熵之差:
公式中的東西看上去很多,其實也都很好計算。比如P(Ci),表示類別Ci出現的概率,其實只要用1除以類別總數就得到了(這是說你平等的看待每個類別而忽略它們的大小時這樣算,如果考慮了大小就要把大小的影響加進去)。再比如P(t),就是特征T出現的概率,只要用出現過T的文檔數除以總文檔數就可以了,再比如P(Ci|t)表示出現T的時候,類別Ci出現的概率,只要用出現了T并且屬于類別Ci的文檔數除以出現了T的文檔數就可以了。
從以上討論中可以看出,信息增益也是考慮了特征出現和不出現兩種情況,與開方檢驗一樣,是比較全面的,因而效果不錯。但信息增益最大的問題還在于它只能考察特征對整個系統的貢獻,而不能具體到某個類別上,這就使得它只適合用來做所謂“全局”的特征選擇(指所有的類都使用相同的特征集合),而無法做“本地”的特征選擇(每個類別有自己的特征集合,因為有的詞,對這個類別很有區分度,對另一個類別則無足輕重)。
下面舉個例子,依然用天氣預報數據集:在這個例子中,最后一列指是否出去玩,這里作為我們所要預測的標記值(label),而前四列就是我們需要借助的數據,每一列都是一個特征(feature)。
示例2:
在這個例子中,最后一列指是否出去玩,這里作為我們所要預測的標記值(label),而前四列就是我們需要借助的數據,每一列都是一個特征(feature)屬性。初始狀態下,label列總共為14行,有9個yes和5個no,所以label列初始信息熵為:
假設我們先劃分outlook這一列,分成sunny、rain、overcast三類,數量分別為5:5:4,考慮到每個類別下對應的label不同,可以計算出劃分后的信息熵:
其中E(S1)、E(S2)、E(S3)分別為每個類別下對應的label列的熵。
而信息增益(Info-Gain)就是指劃分前后信息熵的變化:
在ID3算法中,信息增益(Info-Gain)越大,劃分越好,決策樹算法本質上就是要找出每一列的最佳劃分以及不同列劃分的先后順序及排布。
?
示例3:
在測試樣本中,一共有17個樣本,正例8個,反例9個,則決策樹的根節點的信息熵(初始信息熵,label的信息熵)為:
求出每個特征的信息增益:
以此類推,通過計算信息增益來生成決策樹。
信息增益做特征選擇的優缺點:
優點:
- 信息增益考慮了特征出現與不出現的兩種情況,比較全面,一般而言效果不錯;
- 使用了所有樣例的統計屬性,減小了對噪聲的敏感度;
- 容易理解,計算簡單;
缺點:
- 信息增益考察的是特征對整個系統的貢獻,沒有到具體的類別上,所以一般只能用來做全局的特征選擇,而沒法針對單個類別做特征選擇;
- 只能處理離散型的屬性值,沒法處理連續值的特征(這個是與基尼系數的區別);
- 算法天生偏向選擇分支多的屬性,容易導致overfitting;
?
信息增益比/增益率(Information?Gain-ratio)
前面提到,信息增益的一個大問題就是偏向選擇分支多的屬性導致overfitting,那么我們能想到的解決辦法自然就是對分支過多的情況進行懲罰(penalty)了。于是我們有了信息增益比,或者說信息增益率:
特征X的熵:
特征X的信息增益 :
那么信息增益比為:
根據前文的例子,Info-Gain在面對類別較少的離散數據時效果較好,上例中的outlook、temperature等數據都是離散數據,而且每個類別都有一定數量的樣本,這種情況下使用ID3與C4.5的區別并不大。但如果面對連續的數據(如體重、身高、年齡、距離等),或者每列數據沒有明顯的類別之分(最極端的例子的該列所有數據都獨一無二),在這種情況下,我們分析信息增益(Info-Gain)的效果:
根據公式
E(S)為初始label列的熵,并未發生變化,則IGain(S,A)的大小取決于E(A)的大小,E(A)越小,IGain(S,A)越大,而根據前文例子,
若某一列數據沒有重復(連續值中沒有重復,重復率很低),ID3算法傾向于把每個數據自成一類,此時
這樣E(A)為最小,IGain(S,A)最大,程序會傾向于選擇這種劃分,這樣劃分效果極差。
為了解決這個問題,引入了信息增益率(Gain-ratio)的概念,計算方式如下:
這里Info為劃分行為帶來的信息,信息增益率如下計算:
這樣就減輕了劃分行為本身的影響。
?
基尼系數(Gini)
Gini系數是一種與信息熵類似的做特征選擇的方式,可以用來數據的不純度。在CART(Classification and Regression Tree)算法中利用基尼指數構造二叉決策樹。
Gini系數的計算方式如下:
其中,D表示數據集全體樣本,pi表示每種類別出現的概率。取個極端情況,如果數據集中所有的樣本都為同一類,那么有p0=1,Gini(D)=0,顯然此時數據的不純度最低。
與信息增益類似,我們可以計算如下表達式:
上面式子表述的意思就是,加入特征X以后,數據不純度減小的程度。很明顯,在做特征選擇的時候,我們可以取ΔGini(X)最大的那個。
計算流程:
- 計算每個節點的基尼得分;
- 計算劃分出的所有節點基尼得分的加權平均和;
- 比較各種劃分方式所得到的所有節點的基尼平均和,Gini加權平均和超過父節點的Gini得分,并且Gini加權平均和最大的劃分方式作為最終的劃分方式。
(1)如何計算劃分出的某一個子節點的Gini得分
一個子節點的Gini得分=節點中各類別記錄數所占的百分比的平方和。
比如:一個決策樹的目標變量有兩個分類A和B,一個子節點,A的記錄占比是80%,B的記錄占比是20%,那么,本節點的Gini得分為
0.8*0.8+0.2*0.2=0.64+0.04 = 0.68。
?
(2)如何計算劃分出的所有子節點的Gini加權平均和
1)計算每個子節點的Gini得分;
2)計算每個子節點的Gini得分加權平均值;
一個子節點的Gini得分加權平均值=節點Gini得分*節點記錄數占所有子節點總記錄數的比例。比如:一個子節點的Gini得分是0.68,本節點有3000個記錄,另外還有兩個子節點,記錄數分別為5000和2000,那么,本節點的Gini得分加權平均值是:
0.68*3000/(3000+5000+2000)=0.68*0.3= 0.204
?
在決策樹算法中,ID3使用信息增益,C4.5使用信息增益比,CART使用基尼系數
?
其他
基于熵減少的劃分算法
(1)什么是熵
(2)目標:劃分出的所有子節點的熵的加權平均和最小。
(3)過程:
1)計算劃分出的每個子節點的熵;
2)計算劃分出的所有子節點的熵的加權平均和;
3)比較各種劃分方式所得到的所有子節點的熵加權平均和,熵加權平均和超過父節點的熵,并且熵加權平均和最大的劃分方式作為最終的劃分方式。
(4)如何計算劃分出的某一個子節點的熵
一個子節點的熵=節點中各類別記錄數所占的百分比乘以該比例的以2為底的對數,然后在把各類別的這個結果相加,然后再乘以-1,即取相反數。比如:一個決策樹的目標變量有兩個分類A和B,一個子節點,A的記錄占比是80%,B的記錄占比是20%,那么,本節點的熵=-1*(0.8*log20.8+0.2*log20.2)。
(5)如何計算劃分出的所有子節點的熵
1)計算每個子節點的熵;
2)計算每個子節點的熵加權平均值;
一個子節點的熵加權平均值=節點熵*節點記錄數占所有子節點總記錄數的比例。
比如:一個子節點的熵是0.32,本節點有3000個記錄,另外還有兩個子節點,記錄數分別為5000和2000,那么,本節點的熵加權平均值是:
0.32 *3000/(3000+5000+2000)=0.32*0.3= 0.096
3)計算所有子節點的熵加權平均值的和。
?
基于卡方檢驗的劃分算法
(1)什么是卡方檢驗
卡方檢驗室統計學里的一種檢驗統計顯著性的檢驗方法。其目標是檢驗某個劃分不可能是由偶然因素和隨機產生的可能性。
(2)目標:劃分出的所有子節點的卡方值最大。
(3)過程:
1)計算劃分出的每個子節點的卡方值;
2)計算劃分出的所有子節點的卡方值的和;
3)比較各種劃分方式所得到的所有子節點的卡方值的和,卡方值的和最大的劃分方式作為最終的劃分方式。
(4)如何計算劃分出的某一個子節點的卡方值
(5)劃分出的所有子節點的卡方就是每個子節點卡方的和。
(6)使用卡方檢驗的決策樹算法:CHAID。
?
基于方差的劃分算法
(1)基于方差的劃分算法主要應用于決策樹應用于預測數值型變量的情況下。
(2)目標是子節點的方差減少。
?
基于F檢驗的劃分算法
簡單介紹一下,基于F檢驗的方法,目標是使劃分的F檢驗值變大,越大,說明劃分效果越好。
?
?
?
?
?
總結
以上是生活随笔為你收集整理的决策树-特征属性选择划分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 模型算法-支持向量机SVM
- 下一篇: 决策树-基于不同算法的决策树模型对比