前言
主要涉及ID3決策樹、C4.5決策樹、CART決策樹、決策樹的剪枝、連續值和缺失值的處理。
決策樹是基於樹結構來進行決策的,一般的一顆決策樹包含一個根結點、若干個內部結點和若干個葉結點。葉結點對應於決策結果,其他每個結點則對應於一個屬性測試,每個結點包含的樣本集合根據屬性測試的結果被劃分到子結點中,根結點包含樣本全集。
決策樹的工作原理和我們平時做決定時所採用的的機制是很相似的,也就是根據一堆if、else規則來進行判斷,不同的判斷條件也就構成了不同的模型。
決策樹的學習目的是爲了產生一顆泛化能力強的決策樹,爲了達到此目的,最重要的環節包括屬性的劃分、決策樹的剪枝。
屬性劃分的要求、目標:希望決策樹的分支結點點所包含的樣本儘可能屬於同一類別,即結點的純度越來越高。
那麼基於上面的學習目標,產生了三種劃分屬性的度量指標:信息增益、增益率、基尼指數。
1、信息熵
“信息熵”(information entropy)是度量樣本集合純度最常用的一種指標,代表一個系統中蘊含多少信息量,信息量越大表明一個系統的不確定性就越大,就存在越多的可能性,即信息熵大。
下面開始推導ID3算法。
假定當前樣本集合D中第k類樣本所佔的比例爲Pk(k=1,2,...,∣y∣),則D的信息熵爲:
Ent(D)=−k=1∑∣y∣Pklog2Pk(1)
其中,|y|表示樣本類別總數,Pk表示第k類樣本所佔的比例,且0≤Pk≤1,∑k=1nPk=1,Ent(D)值越小,純度越高。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
舉例說明式(1):
假設當前數據集有5個樣本D={x1,x2,x3,x4,x5},其標籤爲分別爲{0,0,1,2,2}(三類,k=1,2,3),那麼每一類所佔比爲P1=2/5,P2=1/5,P3=2/5,則此時的信息熵爲:
Ent(D)=−k=1∑3Pklog2Pk=−P1log2P1−P2log2P2−P3log2P3=−52log252+−51log251+−52log252
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
上面說了“Ent(D)值越小,純度越高”,那麼這個程度該怎樣量化呢?就是說什麼樣的樣本可以說是程度高?什麼樣的樣本可以說是純度低?下面通過求解信息熵的最大值和最小值來說明這個問題。
+++++++++++++++++++++++++++++++++++++證明信息熵的取值範圍+++++++++++++++++++++++++
證明式:
0≤Ent(D)≤log2∣y∣(2)
1、首先求Ent(D)的最大值:
若令∣y∣=n,Pk=xk,那麼信息熵Ent(D)就可以看做一個n元實值函數,也即:
Ent(D)=f(x1,x2,...,xn)=−k=1∑nxklog2xk(3)
其中,0≤xk≤1,∑k=1nxk=1
所以,此時若想求信息熵的最大值,等價於求n元實值函數f(x1,x2,...,xn)的最大值,也就是將原求信息熵的最大值轉成了求多元實值函數求最值的問題,並且對於每一個xk都要滿足約束0≤xk≤1,∑k=1nxk=1,即求有約束的最大值問題。
如果不考慮約束0≤xk≤1,僅考慮∑k=1nxk=1的話,對f(x1,x2,...,xn)求最大值等價於如下最小化問題:
min k=1∑nxklog2xk(4)
s.t. k=1∑nxk=1(5)
很明顯上面的目標函數(4)是凸函數(結合x的取值範圍和目標函數的二階導數恆大於0),並且其約束條件(5)明顯是線性函數,所以該問題就是凸優化問題。
顯然,對於0≤xk≤1時,該問題爲凸優化問題,而對於凸優化問題來說,滿足KKT條件的點即爲最優解。由於此最小化問題僅含等式約束,那麼能另其拉格朗日函數的一階偏導數等於0的點即爲滿足KKT條件的點。
由上面紅色字體的分析,根據拉格朗日乘子法,該優化問題的拉格朗日函數爲:
L(x1,x2,...,xn,λ)=k=1∑nxklog2xk+λ(k=1∑nxk−1)(6)
對上面拉格朗日函數分別關於x1,...,xn,λ求一階偏導數,並令偏導數等於0
首先對x1求偏導,並令其等於0:
∂x1∂L(x1,x2,...,xn)=∂x1∂[k=1∑nxklog2xk+λ(k=1∑nxk−1)]=log2x1+x1⋅x1ln21+λ=log2x1+⋅ln21+λ=0(7)
所以可得λ:
λ=−log2x1−ln21(8)
同理,當令剩下的x2,..xn的導數爲0時,求出的lambda都類似於式(8),這裏就不一一求了,即:
λ=−log2x1−ln21=−log2x2−ln21=...=−log2xn−ln21(9)
然後對式(6)中的λ求偏導:
∂λ∂L(x1,x2,...,xn)=∂λ∂[k=1∑nxklog2xk+λ(k=1∑nxk−1)]=0(10)
由式(10)可得:
k=1∑nxk=1(11)
所以根據式(9)和(11)可得該最小化問題的最優解:
x1=x2=...=xn=n1(12)
又因爲xk還需要滿足約束0≤xk≤1,顯然0≤n1≤1,所以x1=x2=...=xn是滿足所有約束的最優解,也即爲當前最小化問題的最小值點,同時也是f(x1,x2,...,xn)的最大值點。
將x1,x2,...,xn=n1帶入f(x1,x2,...,xn)中可得:
f(n1,...,n1)==k=1∑nn1log2n1=−n⋅n1log2n1=log2n(13)
證明完了信息熵的最大值,現在給出一個總結:
f(x1,x2,...,xn)在滿足約束0≤xk≤1,∑k=1nxk=1時的最大值爲log2n
關於信息熵的取值範圍已經給出證明,當信息熵取值最大時,表明信息是最不純的,那麼最不純的時候有什麼表現呢,即當信息熵取值最大時,樣本有什麼樣的表現呢?
我們知道xk表示的就是第k類樣本在集合中所佔比例,觀察式(12),當信息熵值最大時,xk均相等,也即Pk均相等。也就是說,此時樣本集合中的各類樣本式均勻分佈的,那麼這時候樣本集合的純度就是最低的時候。
2、現在開始證明信息熵Ent(D)的最小值
如果不考慮約束∑k=1nxk=1,僅考慮0≤xk≤1的話,由式(3),可知f(x1,x2,...,xn)可以看做是n個互不相關的一元函數的加和,也即:
f(x1,x2,...,xn)=k=1∑ng(xk)(14)
其中,g(xk)=−∑k=1nxklog2xk,0≤xk≤1。
那麼當g(x1),g(x2),,...,g(xn)分別取到其最小值時,f(x1,x2,...,xn)也就取到了最小值。
由於g(x1),g(x2),,...,g(xn)的定義域和函數表達式均相同,所以只需求出g(x1)的最小值也就求出了g(x1),g(x2),,...,g(xn)的最小值。
下面考慮求g(x1)的最小值:
首先,對g(x1)關於x1求一階和二階導數:
g,(x1)=dx1d(−x1log2x1)=−log2x1−x1⋅x2ln21=−log2x1−ln2114)(()
g,,(x1)=dx1d(g,(x1))=dx1d(−log2x1−ln21)=−x1ln21(15)
顯然,當0≤xk≤1時,所以g(x1)的二階導小於0,所以g(x1)是一個在其定義域範圍內開口向下的凹函數,那麼其最小值必然在邊界取,於是分別取x1=0和x1=1帶入到g(x1)可得:
g(0)=−0log20=0g(1)=−1log21=0(16)
所以g(x1)的最小值爲0,同理可得g(x2),g(x3),...,g(xn)的最小值也爲0,那麼f(x1,x2,...,xn)的最小值此時也爲0。
但是此時僅考慮0≤xk≤1時取到的最小值,若考慮約束∑k=1nxk=1的話,那麼(x1,x2,...,xn)的最小值一定大於等於0。(此時兩個約束都考慮) 如果令某個xk=1,那麼根據約束∑k=1nxk=1可知x1=x2=...=xk−1=xk+1=...=xn=0將其帶入式(3)中可得:
f(0,0,...,0,1,0,...,0)=−0log20−0log20−...−0log20−1log21−0log20−,...,−0log20=0(17)
所以xk=1,x1=x2=...=xk−1=xk+1=...=xn=0一定是f(x1,x2,...,fn)在滿足約束0≤xk≤1,∑k=1nxk=1的條件下的最小值點,其最小值爲0。
證明完了信息熵的最大值,現在給出一個總結:
當樣本的信息熵等於0的時候,樣本的純度是最高的,那麼純度最高時樣本有什麼樣的特性呢?
由信息熵最小值的推導過程可知,當信息熵最小時,某個樣本$x_{k}=1$,其他的等於0,而$x_{k}$表示得到就是$P_{k}$,這就說明該樣本集合中僅僅只包含一類樣本(k類),那麼很顯然,這時候的純度就是最高的
+++++++++++++++++信息熵的最大值、最小值證明完畢,以及最取最大值和最小值時樣本的特徵也已說明+++++++++
2、條件熵
什麼是條件熵?
答:通俗地說,可以理解爲 在知道一些已知條件下,計算出來的信息熵。
條件熵的定義:在已知樣本屬性a的取值情況下,度量樣本集合純度的一種指標
H(D∣a)=v=1∑V∣D∣∣Dv∣Ent(Dv)(17)
上式中關於各個變量一定要搞懂!其中,a表示樣本的某個屬性,假定屬性a由V個可能的取值{a1,a2,...,aV},樣本集合D中在屬性a上取值爲av的樣本記爲Dv,Ent(Dv)表示樣本集合Dv的信息熵。H(D∣a)值越小,純度越高。
ID3算法
現在知道了信息熵和條件熵了,那麼就可以定義ID3算法了。
ID3決策樹是以信息增益爲準則來劃分屬性的決策樹。
信息增益:
Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)=Ent(D)−H(D∣a)(18)
觀察上式(18),信息增益就等於信息熵減去條件熵,得出來的差值就表示樣本集合純度的提升度。爲什麼這麼說?因爲信息熵表示的是沒有任何已知條件下,計算出來的樣本的純度;而條件熵是在知道一些一直條件下算出來的集合的純度,那麼他們的差值就表示:在知道一些已知條件情況下,純度得到的提升。
選擇信息增益值最大的屬性作爲劃分屬性,因爲信息增益越大,則意味着使用該屬性來進行劃分所獲得的“純度提升”越大。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
下面舉個具體例子來實現ID3算法(來自西瓜書)。
以下面的西瓜數據集來學習一棵沒剝開的是不是好瓜的決策樹,顯然|y|=2。
觀察上面數據集,其中“是好瓜”的視爲正例,“不是好瓜”視爲負例,其中正例佔p1=178,反例佔p2=179
於是根據式(1)可計算出根節點的信息熵:
Ent(D)=−k=1∑2pklog2pk=−(178log2178+179log2179)=0.998
然後分別計算出當前屬性集合{色澤,根蒂,敲聲,紋理,臍部,觸感}中每個屬性的信息增益。
以"色澤"爲例,它有3個可能的取值:{青綠,烏黑,淺白},若使用該屬性對D進行劃分,則可得到3個子集,分別記爲:D1(色澤=青綠),D2(色澤=烏黑),D3(色澤=淺白)。
那麼按照這三個子集,可將原數據集分成如下三個部分:子集D1包含編號爲{1,4,6,10,1317}的6個樣例,其中正例佔p1=63,反例佔p2=63;D2包含編號爲{2,3,7,8,9,15}的6個樣例,其中正、反例分別佔p1=64,p2=62;D3包含編號爲{5,11,12,14,16}的五個樣例,其中正、反例分別佔p1=51,p2=54。
計算用“色澤”劃分之後所獲得的3個分支節點的信息熵爲:
Ent(D1)=−(63log263+63log263)=1.00
Ent(D2)=−(64log264+62log262)=0.918
Ent(D3)=−(51log251+54log254)=0.722
然後,根據式(18)可計算出屬性“色澤”的信息增益爲:
Gain(D,色澤)=Ent(D)−v=1∑3∣D∣∣Dv∣Ent(Dv)=0.998−(176×Ent(D1)+176×Ent(D2)+175×Ent(D3))=0.998−(176×1.000+176×0.918+175×0.722)=0.109
類似的,可計算出其他屬性的信息增益:
Gain(D,根蒂)=0.143; Gain(D,敲聲)=0.141; Gain(D,紋理)=0.381; Gain(D,臍部)=0.289; Gain(D,觸感)=0.006
對比上面求出的所有屬性的信息增益,屬性“紋理”的信息增益最大,所以它被選爲劃分屬性,下圖是基於“紋理”對根節點進行劃分的結果:
然後,決策樹學習算法將對每個分支節點做進一步劃分,以上圖中第一個分直節點(“紋理=清晰”)爲例,該節點包含的樣例集合D1中有編號{1,2,3,4,5,6,8,10,15}的9個樣例,可用屬性集合爲{色澤,根蒂,敲聲,臍部,觸感}。基於D1計算出各屬性的信息增益:
Gain(D1,色澤)=0.043; Gain(D1,根蒂)=0.458; Gain(D1,敲聲)=0.331; Gain(D1,臍部)=0.458; Gain(D1,觸感)=0.458
“根蒂”、“臍部”、“觸感”3個屬性均取得了最大的信息增益,可選其中之一作爲劃分屬性(注意:葉節點就是當前屬性的特徵全部屬於一類,即全部屬於正例或全部屬於負例,例如下圖中的屬性根蒂的兩個特徵:蜷縮和硬挺)。類似的,對每個分支節點進行上述操作,最終得到的決策樹如下:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C4.5決策樹
ID3算法沒有考慮連續特徵,也沒有考慮缺失值的問題。
使用信息增益來進行屬性的劃分會存在一個缺陷:以信息增益爲準則的ID3決策樹對可取值數目較多的屬性有所偏好
下面就用數學來說明上述問題:
信息熵增益:
Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)=Ent(D)−v=1∑V∣D∣∣Dv∣(−k1∑∣y∣pklog2pk)=Ent(D)−v=1∑V∣D∣∣Dv∣(−k=1∑∣y∣∣Dv∣∣Dkv∣log2∣Dv∣∣Dkv∣)(19)
其中,Dkv表示在樣本集合D中在屬性a上取值爲av且類別爲k的樣本。
爲了說明問題,假設一種極端的情況,即假設取av的樣本個數只有1個,說明屬性a可取值個數和樣本個數是一樣多,即:V=∣D∣,Dkv=Dv=1,顯然此時屬性a可以視爲取值數目較多的屬性。將該情況下的Dkv=Dv=1帶入到式(19)中,發現H(D|a)=0,當被減數條件熵取0的時候信息增益取最大,所以此時以信息增益最大的那個屬性作爲劃分屬性的話,那麼肯定選屬性a作爲劃分屬性,但是這樣選擇出來的決策樹泛化能力特別差,嚴重過擬合
要修復ID3算法的這個缺陷,就提出了C4.5決策樹,下面開始說明C4.5決策樹。
C4.5決策樹是以信息增益率爲準則來選擇劃分屬性的決策樹。
定義信息增益率:
Gainratio(D,a)=IV(a)Gain(D,a)(20)
其中,
IV(a)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣(21)
觀察信息增益率(20)可知,它在信息增益的基礎上再除以一個懲罰項IV(a),那麼再觀察懲罰項IV(a),發現其類似於前面說的信息熵的表達式。在說信息熵的時候已經交代過:當各類樣本分佈均勻的時候,它們的信息熵就越大。那麼將這個思想應用到信息增益率(20)上,即屬性a的可取值數目越多的話,那麼懲罰項IV(a)就會越來越大,從而導致信息增益率越來越小。這樣一來,對於那些可取值數目較多的屬性獲得更大的懲罰,使得其信息增益率小。
C4.5決策樹解決了“可取值較多數目的偏好”問題,那麼又帶來了另一個問題:相反的,信息增益率偏好於那些取值數目較少的屬性。
爲了解決這個問題,C4.5決策樹提出了這個方法:算法首先找出信息增益高出平均水平的屬性,再在這些屬性裏面選擇信息增益率最高的屬性作爲最優劃分屬性
C4.5算法的不足:
a. C4.5算法生成的是多叉樹,生成決策樹對的效率比較慢
b.C4.5只能用於分類
c.C4.5由於使用了熵模型,裏面有大量的耗時的對數運算
CART決策樹
CART決策樹是以基尼指數爲準則來選擇劃分屬性的決策樹
基尼值:
Gini(D)=k=1∑∣y∣k′=k∑pkpk′=k=1∑∣y∣pkk′=k∑pk′=k=1∑∣y∣pk(1−pk)=1−k=1∑∣y∣pk2(22)
直觀地來看,基尼值就是表示集合D中,隨機抽出兩個樣本,不是同一類別的概率。
基尼指數:
Giniindex(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)(23)
基尼指數就是在基尼值得前面加上了權重,基尼值和基尼指數越小,樣本集合純度越高。
CART決策樹既能做分類任務,又能做迴歸任務。
1、CART決策樹的分類算法
算法流程:
- 根據基尼指數公式Giniindex(D,a)=∑v=1V∣D∣∣Dv∣Gini(Dv)找出基尼指數最小的屬性a∗;
- 計算屬性a∗的所有可能取值的基尼值Gain(Dv),v=1,2,...,V,選擇基尼值最小的取值a∗v作爲劃分點,將集合D劃分爲D1和D2兩個集合(節點),其中D1集合的樣本爲a∗=a∗v的樣本,D2集合爲a∗=a∗v的樣本;
- 對集合D1和D2重複步驟1和步驟2,直至滿足停止條件。
2、CART決策樹的迴歸算法
CART決策樹的迴歸算法幾乎和CART決策樹的分類算法幾乎是一樣的,只是換了一個公式來尋找最優劃分屬性。
CART決策樹的迴歸算法:
-
根據以下公式找出最優化分屬性a∗和最優劃分點a∗v:
a∗,a∗v=a,avargmin[c1minxi∈D1(a,av)∑(yi−c1)2+c1minxi∈D1(a,av)∑(yi−c2)2](24)
其中,D1(a,av)表示屬性a上取值小於等於av的樣本集合,D2(a,av)表示屬性a上取值大於av的樣本集合,c1表示D1的樣本輸出均值,c2表示D2的樣本輸出均值(式(24)是該算法的損失函數);
-
根據a∗v將集合D劃分爲D1和D2兩個集合(節點);
-
對集合D_{1}和D2重複步驟1和步驟2,直至滿足停止條件。
剪枝
由於決策樹算法非常容易過擬合,對於生成的決策樹必須要進行剪枝。
1、預剪枝
預剪枝就是在構造決策樹的過程中,先對每個節點在劃分前進行估計,如果當前結點的劃分不能帶來決策樹模型的泛華性增加,則不對當前結點進行劃分並且將當前結點標記爲葉結點。
舉例(使用西瓜書數據集4.2):
觀察上面的數據集,是好瓜和不是好瓜各有5個,那麼根節點的信息熵爲:
Ent(D)=−k=1∑2pklog2pk=−(21log221+21log221)=1
基於根節點,計算出每個屬性的信息增益(直接給結果了):
色澤:Gain(D,a1)=1−(104×1+104×0.811+0)=0.276根蒂:Gain(D,a2)=1−(21×0.971+52×1+0)=0.115敲聲:Gain(D,a3)=1−(106×1+103×0.918+0)=0.174紋理:Gain(D,a4)=1−(106×1+103×0.918+0)=0.174臍部:Gain(D,a5)=1−(104×0.811+104×01+0)=0.276觸感:Gain(D,a6)=1−(106×1+104×1)=0
通過比較,“臍部”和“色澤”的信息增益最大,均爲0.276,所以可以從這兩個屬性中隨機挑選一個作爲劃分屬性。這裏選擇臍部作爲劃分屬性,那麼會產生3個分支:
下面就需要用預剪枝來判斷是不是應該進行這個劃分,判斷的標準就是比較劃分前後其泛華能力是否有提升。
劃分之前,所有的樣本都在根結點,把該節點記爲葉節點,其類別標記爲訓練集中樣本數量最多的類
別,因此該節點可以標記爲好瓜(正負例一樣多,所以壞瓜也行)。然後用驗證集對其性能進行評估,
可以看出上面圖中的驗證集中,樣本{4,5,8}爲好瓜,被決策樹分類正確;其他的樣本{9,11,12,13}被
誤分類爲好瓜,所以此時的正確率爲73≈43%。(記住這是沒劃分之前的正確率)
根據信息增益最大選擇劃分屬性後的決策時如上圖,那麼此時再次用驗證集來來評估這個決策樹,此
時的正確率是:75≈71%,很明顯這個準確率大於沒劃分前的準確率,因此可以用
屬性“臍部”進行劃分。
決策樹算法對結點2繼續進行劃分,再次使用信息增益挑選出值最大的那個特徵,信息增益最大的那個特徵是“色澤”(具體計算不寫了),則使用“色澤”劃分後的決策樹爲:
再使用預剪枝方法對此次劃分進行判斷,應不應該進行這個劃分:首先“臍部”爲“凹陷”的屬性集合中
有3個好瓜,1個不是好瓜,那麼在使用屬性“色澤”劃分之前的決策樹的劃分應該爲好瓜;使用“色澤”
屬性劃分後,使用驗證集進行計算,劃分後的有4個被正確分類,3個被誤分類,那麼此時的正確率
爲74≈57.1% ,明顯小於使用“色澤”劃分之前的準確率,所以禁止劃分該分支。
後面也是按照這個方法來,這裏就不一一贅述了。
那麼最後的得到如下的決策樹:
**總結:**對比剪枝決策樹和未剪枝決策樹,可以看出,預剪枝決策樹的很多分支都沒有展開,這雖然降低了過擬合的風險,但有可能帶來欠擬合的風險
2、後剪枝
後剪枝就是先把決策樹構造完畢,然後自底向上的對非葉結點進行考察,若將該節點對應的子樹換爲葉結點能夠帶來泛化性能的提升,則把該子樹替換爲葉結點。
舉例:
假設使用上面的數據集,利用信息增益最大的算法得到的決策樹如下,下面開始對該樹進行後剪枝。
後剪枝算法首先考察圖中的結點(6),若將以其爲根節點的子樹刪除,即相當於把結點(6)替換爲
子節點,替換後的葉結點的樣本(臍部=稍凹,根蒂=稍蜷,色澤=烏黑)包括編號爲{7,15}的訓練樣
本,把該葉結點標記爲“好瓜”(因爲這裏正負樣本數量相等,所以隨便寄一個類別),因此此時的決
策樹在驗證集上分類正確的樣本爲{4,8,11,12},,準確率爲74=57.1%(未剪枝的決策
樹分類正確的樣本爲{4,11,13},精度爲42.9%),所以後剪枝策略決定剪枝。接着考察結點(5),
同樣的操作,把其爲根節點的子樹替換爲葉結點,替換後的葉結點包含編號爲{6,7,15}的訓練樣本,
根據“多數原則”把該葉結點標記爲“好瓜”,測試的決策樹準確率認爲57.1%,所以不進行剪枝。結點
(2)和(3)仍然進行上述操作(不具體說了),最後得到的決策樹如下,其準確率爲71.4%:
總結:對比預剪枝和後剪枝策略,能夠發現後剪枝決策樹通常比預剪枝保留了更多的分支,一般情況
下,後剪枝決策樹的欠擬合風險小,泛化性能往往也要優於預剪枝。但後剪枝過程是在構建完全
決策樹之後進行的,並且要自底向上的對樹中的所有非葉結點進行逐一考察,因此其**訓練時間開
銷要比未剪枝決策樹和預剪枝決策樹都要大得多**。
連續值和缺失值的處理
上面也有提到,ID3算法不能處有缺實值的數據集,而C4.5和CART彌補了這個缺陷。
1、連續值的處理
對於大多數數據,因爲連續性數據的取值數目不再有限,所以不能像前面一樣處理離散屬性使用枚舉法對屬性進行劃分,因此需要將連續屬性離散化,常用的離散化方法是二分法。(C4.5採用的策略)
樣本集D中的連續屬性a,假設屬性a有n個不同的取值,對其進行大小排序,記爲{a1,a2,...,an},根據屬性可得到n-1個劃分點,劃分點的集合爲:
Ta={2ai+ai+1 ∣1≤i≤n−1}(24)
對於取值集合Ta中的每t值會將屬性a離散爲一個屬性值只有兩個值,分別是{a>t}和{a<=t}的屬性,計算新屬性的信息增益,找到信息增益最大的t值即爲該屬性的最優劃分點:
Gain(D,a)=t∈Tamax Gain(D,a,t)=∈Tamax Ent(D)−λ∈−,+∑∣D∣∣Dtλ∣Ent(Dtλ)(25)
2、缺失值的處理
現實數據集中的樣本通常因爲某種原因是缺失的,如果有缺失值的屬性的個數比較小,那麼可以粗暴地將有缺失值的屬性剔除掉;如果有缺失值的屬性較多,就不能簡單地刪除。
在決策樹中處理含有缺失值的樣本的時候,需要解決兩個問題:
- 1、如何在屬性缺失值缺失的情況下進行劃分屬性的選擇?
- 2、給定劃分屬性,若該樣本在該屬性上的值是缺失的,那麼該如何對這個樣本進行劃分?
舉例說明解決方法:
對於問題1
含有缺失值的數據集合如下:
給定訓練集D和屬性a,令表示D−中在屬性a上沒有缺失值得樣本集(比如,假設a=色澤,則D−=2,3,4,6,7,8,9,10,11,12,14,15,16,17)
那麼對於第一個問題:我們可以根據D−(即在該屬性上沒有缺失值的樣本集)來計算屬性a的信息增益或者其他指標。我們只要再給根據計算出來的值一個權重,皆可以表示該訓練集D中屬性a的優劣。
假定屬性a有V個可取值{a1,a2,...,aV},令Dv−表示D中在屬性a上取值爲av的樣本集,Dk−表示D−中屬於第k個類(k=1,2,…,|y|)的樣本子集,則顯然D−=∪k=1V1Dk−,D−∪V=1v1Dv−,假定爲每個樣本X賦予一個權重Wx(在決策樹的初始階段,根節點中樣本的權重初始化爲1),並定義:
ρ=∑x∈DWx∑x∈Dv−Wx, 表示無缺失值樣本所佔的比例(25)
pk−=∑x∈D−Wx∑x∈Dk−Wx (1≤k≤∣y∣), 表示無缺失值樣本中第k類所佔的比例(26)
rv−=∑x∈D−Wx∑x∈Dv−Wx (1≤v≤V), 表示無缺失值樣本中在屬性a上取值av的樣本所佔比例(27)
根據上面的三個公式,此時可以將信息增益推廣爲:
Gain(D,a)=ρ×Gain(D−,a)=ρ×(Ent(D−)−v=1∑Vrv−Ent(Dv−))(28)
那麼上面給出的第一個問題,用式(28)就可以估算出來。
對於問題2:
若樣本x在劃分屬性a上的取值已知,則將x劃入與其取值對應的子節點,且樣本權值在子節點中保持爲wx。若樣本x在劃分屬性a上的取值未知,則將x同時劃入所有子節點,且樣本權值在與屬性值av對應的子節點中調整爲rv−⋅wx;直觀的看,這就是讓同一個樣本以不同的概率劃入到不同的子節點中去。
用一個實例說明C4.5是怎樣利用上述思想來解決缺失值的(直接截圖了!!!!)
生成的決策樹如下: