機器學習——分類算法之決策樹

前言

主要涉及ID3決策樹、C4.5決策樹、CART決策樹、決策樹的剪枝、連續值和缺失值的處理。

決策樹是基於樹結構來進行決策的,一般的一顆決策樹包含一個根結點、若干個內部結點和若干個葉結點。葉結點對應於決策結果,其他每個結點則對應於一個屬性測試,每個結點包含的樣本集合根據屬性測試的結果被劃分到子結點中,根結點包含樣本全集。

決策樹的工作原理和我們平時做決定時所採用的的機制是很相似的,也就是根據一堆if、else規則來進行判斷,不同的判斷條件也就構成了不同的模型。

決策樹的學習目的是爲了產生一顆泛化能力強的決策樹,爲了達到此目的,最重要的環節包括屬性的劃分、決策樹的剪枝。

屬性劃分的要求、目標:希望決策樹的分支結點點所包含的樣本儘可能屬於同一類別,即結點的純度越來越高。

那麼基於上面的學習目標,產生了三種劃分屬性的度量指標:信息增益、增益率、基尼指數。

1、信息熵

“信息熵”(information entropy)是度量樣本集合純度最常用的一種指標,代表一個系統中蘊含多少信息量,信息量越大表明一個系統的不確定性就越大,就存在越多的可能性,即信息熵大。

下面開始推導ID3算法。

假定當前樣本集合D中第k類樣本所佔的比例爲Pk(k=1,2,...,y)P_{k}(k=1,2,...,|y|),則D的信息熵爲:
Ent(D)=k=1yPklog2Pk(1)Ent(D)= -\sum_{k=1}^{|y|}P_{k}log_{2}P_{k}\tag{1}
其中,|y|表示樣本類別總數,PkP_{k}表示第k類樣本所佔的比例,且0Pk1,k=1nPk=10\leq P_{k}\leq 1,\sum_{k=1}^{n}P_{k}=1Ent(D)值越小,純度越高。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
舉例說明式(1):
假設當前數據集有5個樣本D={x1,x2,x3,x4,x5}D = \{x_{1},x_{2},x_{3},x_{4},x_{5}\},其標籤爲分別爲{0,0,1,2,2}(三類,k=1,2,3),那麼每一類所佔比爲P1=2/5,P2=1/5,P3=2/5P_{1} = 2 / 5 ,P_{2} = 1 / 5,P_{3} = 2 / 5,則此時的信息熵爲:
Ent(D)=k=13Pklog2Pk=P1log2P1P2log2P2P3log2P3=25log225+15log215+25log225Ent(D)=-\sum_{k =1}^{3}P_{k}log_{2}P_{k}=-P_{1}log_{2}P_{1}-P_{2}log_{2}P_{2}-P_{3}log_{2}P_{3}\\=-\frac{2}{5}log_{2}\frac{2}{5}+-\frac{1}{5}log_{2}\frac{1}{5}+-\frac{2}{5}log_{2}\frac{2}{5}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

上面說了“Ent(D)值越小,純度越高”,那麼這個程度該怎樣量化呢?就是說什麼樣的樣本可以說是程度高?什麼樣的樣本可以說是純度低?下面通過求解信息熵的最大值和最小值來說明這個問題。
+++++++++++++++++++++++++++++++++++++證明信息熵的取值範圍+++++++++++++++++++++++++
證明式:
0Ent(D)log2y(2)0\leq Ent(D)\leq log_{2}|y|\tag{2}

1、首先求Ent(D)的最大值:
若令y=n,Pk=xk|y|=n,P_{k}=x_{k},那麼信息熵Ent(D)就可以看做一個n元實值函數,也即:
Ent(D)=f(x1,x2,...,xn)=k=1nxklog2xk(3)Ent(D)=f(x_{1},x_{2},...,x_{n})=-\sum_{k=1}^{n}x_{k}log_{2}x_{k}\tag{3}
其中,0xk1,k=1nxk=10\leq x_{k}\leq1,\sum_{k=1}^{n} x_{k}=1

所以,此時若想求信息熵的最大值,等價於求n元實值函數f(x1,x2,...,xn)f(x_{1},x_{2},...,x_{n})的最大值,也就是將原求信息熵的最大值轉成了求多元實值函數求最值的問題,並且對於每一個xkx_{k}都要滿足約束0xk1,k=1nxk=10\leq x_{k}\leq1,\sum_{k=1}^{n} x_{k}=1,即求有約束的最大值問題。

如果不考慮約束0xk10\leq x_{k}\leq1,僅考慮k=1nxk=1\sum_{k=1}^{n} x_{k}=1的話,對f(x1,x2,...,xn)f(x_{1},x_{2},...,x_{n})求最大值等價於如下最小化問題:
min k=1nxklog2xk(4)min\ \sum_{k=1}^{n}x_{k}log_{2}x_{k}\tag{4}
s.t. k=1nxk=1(5)s.t.\ \sum_{k=1}^{n}x_{k}=1\tag{5}
很明顯上面的目標函數(4)是凸函數(結合x的取值範圍和目標函數的二階導數恆大於0),並且其約束條件(5)明顯是線性函數,所以該問題就是凸優化問題。

顯然,對於0xk10\leq x_{k}\leq1時,該問題爲凸優化問題,而對於凸優化問題來說,滿足KKT條件的點即爲最優解。由於此最小化問題僅含等式約束,那麼能另其拉格朗日函數的一階偏導數等於0的點即爲滿足KKT條件的點。

由上面紅色字體的分析,根據拉格朗日乘子法,該優化問題的拉格朗日函數爲:
L(x1,x2,...,xn,λ)=k=1nxklog2xk+λ(k=1nxk1)(6)L(x_{1},x_{2},...,x_{n},\lambda) =\sum_{k=1}^{n}x_{k}log_{2}x_{k}+\lambda (\sum_{k=1}^{n}x_{k}-1)\tag{6}
對上面拉格朗日函數分別關於x1,...,xn,λx_{1},...,x_{n},\lambda求一階偏導數,並令偏導數等於0

首先x1x_{1}求偏導,並令其等於0:
L(x1,x2,...,xn)x1=x1[k=1nxklog2xk+λ(k=1nxk1)]=log2x1+x11x1ln2+λ=log2x1+1ln2+λ=0(7)\frac{\partial L(x_{1},x_{2},...,x_{n})}{\partial x_{1}}=\frac{\partial }{\partial x_{1}}[\sum_{k=1}^{n}x_{k}log_{2}x_{k}+\lambda (\sum_{k=1}^{n}x_{k}-1)]=log_{2}x_{1}+x_{1\cdot \frac{1}{x_{1}ln2}}+\lambda \\=log_{2}x_{1}+\cdot \frac{1}{ln2}+\lambda =0\tag{7}
所以可得λ\lambda:
λ=log2x11ln2(8)\lambda = -log_{2}x_{1}-\frac{1}{ln2}\tag{8}

同理,當令剩下的x2,..xnx_{2},..x_{n}的導數爲0時,求出的lambdalambda都類似於式(8),這裏就不一一求了,即:
λ=log2x11ln2=log2x21ln2=...=log2xn1ln2(9)\lambda = -log_{2}x_{1}-\frac{1}{ln2}=-log_{2}x_{2}-\frac{1}{ln2}=...=-log_{2}x_{n}-\frac{1}{ln2}\tag{9}
然後對式(6)中的λ\lambda求偏導:
L(x1,x2,...,xn)λ=λ[k=1nxklog2xk+λ(k=1nxk1)]=0(10)\frac{\partial L(x_{1},x_{2},...,x_{n})}{\partial \lambda}=\frac{\partial }{\partial \lambda}[\sum_{k=1}^{n}x_{k}log_{2}x_{k}+\lambda (\sum_{k=1}^{n}x_{k}-1)]=0\tag{10}
由式(10)可得:
k=1nxk=1(11)\sum_{k=1}^{n}x_{k}=1\tag{11}
所以根據式(9)和(11)可得該最小化問題的最優解
x1=x2=...=xn=1n(12)x_{1}=x_{2}=...=x_{n}=\frac{1}{n}\tag{12}
又因爲xkx_{k}還需要滿足約束0xk10\leq x_{k}\leq 1,顯然01n10\leq \frac{1}{n}\leq 1,所以x1=x2=...=xnx_{1}=x_{2}=...=x_{n}是滿足所有約束的最優解,也即爲當前最小化問題的最小值點,同時也是f(x1,x2,...,xn)f(x_{1},x_{2},...,x_{n})的最大值點。
x1,x2,...,xn=1nx_{1},x_{2},...,x_{n}=\frac{1}{n}帶入f(x1,x2,...,xn)f(x_{1},x_{2},...,x_{n})中可得:
f(1n,...,1n)==k=1n1nlog21n=n1nlog21n=log2n(13)f(\frac{1}{n},...,\frac{1}{n})==\sum_{k=1}^{n}\frac{1}{n}log_{2}\frac{1}{n}=-n\cdot \frac{1}{n}log_{2}\frac{1}{n}=log_{2}n\tag{13}

證明完了信息熵的最大值,現在給出一個總結:
f(x1,x2,...,xn)f(x_{1},x_{2},...,x_{n})在滿足約束0xk1,k=1nxk=10\leq x_{k}\leq1,\sum_{k=1}^{n} x_{k}=1時的最大值爲log2nlog_{2}n
關於信息熵的取值範圍已經給出證明,當信息熵取值最大時,表明信息是最不純的,那麼最不純的時候有什麼表現呢,即當信息熵取值最大時,樣本有什麼樣的表現呢?
我們知道xkx_{k}表示的就是第k類樣本在集合中所佔比例,觀察式(12),當信息熵值最大時,xkx_{k}均相等,也即PkP_{k}均相等。也就是說,此時樣本集合中的各類樣本式均勻分佈的,那麼這時候樣本集合的純度就是最低的時候。


2、現在開始證明信息熵Ent(D)的最小值

如果不考慮約束k=1nxk=1\sum_{k=1}^{n}x_{k}=1,僅考慮0xk10\leq x_{k}\leq 1的話,由式(3),可知f(x1,x2,...,xn)f(x_{1},x_{2},...,x_{n})可以看做是n個互不相關的一元函數的加和,也即:
f(x1,x2,...,xn)=k=1ng(xk)(14)f(x_{1},x_{2},...,x_{n})=\sum_{k=1}^{n}g(x_{k})\tag{14}
其中,g(xk)=k=1nxklog2xk,0xk1g(x_{k})=-\sum_{k=1}^{n}x_{k}log_{2}x_{k},0\leq x_{k}\leq 1

那麼當g(x1),g(x2),,...,g(xn)g(x_{1}),g(x_{2}),,...,g(x_{n})分別取到其最小值時,f(x1,x2,...,xn)f(x_{1},x_{2},...,x_{n})也就取到了最小值。

由於g(x1),g(x2),,...,g(xn)g(x_{1}),g(x_{2}),,...,g(x_{n})定義域和函數表達式均相同,所以只需求出g(x1)g(x_{1})的最小值也就求出了g(x1),g(x2),,...,g(xn)g(x_{1}),g(x_{2}),,...,g(x_{n})的最小值。

下面考慮求g(x1)g(x_{1})的最小值:
首先,對g(x1)g(x_{1})關於x1x_{1}求一階和二階導數:

g,(x1)=d(x1log2x1)dx1=log2x1x11x2ln2=log2x11ln214)(()g^{,}(x_{1})=\frac{d(-x_{1}log_{2}x_{1})}{dx_{1}}=-log_{2}x_{1}-x_{1 }\cdot\frac{1}{x_{2}ln2}=-log_{2}x_{1}-\frac{1}{ln2}\tag(14)
g,,(x1)=d(g,(x1))dx1=d(log2x11ln2)dx1=1x1ln2(15)g^{,,}(x_{1})=\frac{d(g^{,}(x_{1}))}{dx_{1}}=\frac{d(-log_2x_1-\frac{1}{ln2})}{dx_{1}}=-\frac{1}{x_{1}ln2}\tag{15}

顯然,當0xk10\leq x_{k}\leq 1時,所以g(x1)g(x_{1})的二階導小於0,所以g(x1)g(x_{1})是一個在其定義域範圍內開口向下的凹函數,那麼其最小值必然在邊界取,於是分別取x1=0x1=1x_{1}=0和x_{1}=1帶入到g(x1)g(x_{1})可得:
g(0)=0log20=0g(1)=1log21=0(16)g(0)=-0log_{2}0=0 \\ g(1)=-1log_{2}1=0\tag{16}

所以g(x1)g(x_1)的最小值爲0,同理可得g(x2),g(x3),...,g(xn)g(x_{2}),g(x_{3}),...,g(x_{n})的最小值也爲0,那麼f(x1,x2,...,xn)f(x_{1},x_{2},...,x_{n})的最小值此時也爲0。

但是此時僅考慮0xk10\leq x_{k}\leq1時取到的最小值,若考慮約束k=1nxk=1\sum_{k=1}^{n} x_{k}=1的話,那麼(x1,x2,...,xn)(x_{1},x_{2},...,x_{n})的最小值一定大於等於0。(此時兩個約束都考慮) 如果令某個xk=1x_{k}=1,那麼根據約束k=1nxk=1\sum_{k=1}^{n} x_{k}=1可知x1=x2=...=xk1=xk+1=...=xn=0x_{1}=x_{2}=...=x_{k-1}=x_{k+1}=...=x_{n}=0將其帶入式(3)中可得:
f(0,0,...,0,1,0,...,0)=0log200log20...0log201log210log20,...,0log20=0(17)f(0,0,...,0,1,0,...,0)=-0log_{2}0-0log_{2}0-...-0log_{2}0-1log_{2}1-0log_{2}0-,...,-0log_{2}0=0\tag{17}

所以xk=1,x1=x2=...=xk1=xk+1=...=xn=0x_{k}=1,x_{1}=x_{2}=...=x_{k-1}=x_{k+1}=...=x_{n}=0一定是f(x1,x2,...,fn)f(x_{1},x_{2},...,f_{n})在滿足約束0xk1,k=1nxk=10\leq x_{k}\leq1,\sum_{k=1}^{n} x_{k}=1的條件下的最小值點,其最小值爲0。

證明完了信息熵的最大值,現在給出一個總結: 當樣本的信息熵等於0的時候,樣本的純度是最高的,那麼純度最高時樣本有什麼樣的特性呢? 由信息熵最小值的推導過程可知,當信息熵最小時,某個樣本$x_{k}=1$,其他的等於0,而$x_{k}$表示得到就是$P_{k}$,這就說明該樣本集合中僅僅只包含一類樣本(k類),那麼很顯然,這時候的純度就是最高的

+++++++++++++++++信息熵的最大值、最小值證明完畢,以及最取最大值和最小值時樣本的特徵也已說明+++++++++

2、條件熵

什麼是條件熵?
答:通俗地說,可以理解爲 在知道一些已知條件下,計算出來的信息熵。

條件熵的定義:在已知樣本屬性a的取值情況下,度量樣本集合純的一種指標

H(Da)=v=1VDvDEnt(Dv)(17)H(D|a)=\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}Ent(D^{v})\tag{17}

上式中關於各個變量一定要搞懂!其中,a表示樣本的某個屬性,假定屬性a由V個可能的取值{a1,a2,...,aV}\{a^{1},a^{2},...,a^{V}\},樣本集合D中在屬性a上取值爲ava^{v}的樣本記爲DvD^{v}Ent(Dv)Ent(D^{v})表示樣本集合DvD^{v}的信息熵。H(Da)H(D|a)值越小,純度越高。

ID3算法

現在知道了信息熵和條件熵了,那麼就可以定義ID3算法了。

ID3決策樹是以信息增益爲準則來劃分屬性的決策樹。

信息增益:
Gain(D,a)=Ent(D)v=1VDvDEnt(Dv)=Ent(D)H(Da)(18)Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}Ent(D^{v})=Ent(D)-H(D|a)\tag{18}
觀察上式(18),信息增益就等於信息熵減去條件熵,得出來的差值就表示樣本集合純度的提升度。爲什麼這麼說?因爲信息熵表示的是沒有任何已知條件下,計算出來的樣本的純度;而條件熵是在知道一些一直條件下算出來的集合的純度,那麼他們的差值就表示:在知道一些已知條件情況下,純度得到的提升
選擇信息增益值最大的屬性作爲劃分屬性,因爲信息增益越大,則意味着使用該屬性來進行劃分所獲得的“純度提升”越大。


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
下面舉個具體例子來實現ID3算法(來自西瓜書)。
以下面的西瓜數據集來學習一棵沒剝開的是不是好瓜的決策樹,顯然|y|=2。
在這裏插入圖片描述
觀察上面數據集,其中“是好瓜”的視爲正例,“不是好瓜”視爲負例,其中正例佔p1=817p_{1}=\frac{8}{17},反例佔p2=917p_{2}=\frac{9}{17}
於是根據式(1)可計算出根節點的信息熵:
Ent(D)=k=12pklog2pk=(817log2817+917log2917)=0.998Ent(D)=-\sum_{k=1}^{2}p_{k}log_{2}p_{k}=-(\frac{8}{17}log_{2}\frac{8}{17}+\frac{9}{17}log_{2}\frac{9}{17})=0.998
然後分別計算出當前屬性集合{色澤,根蒂,敲聲,紋理,臍部,觸感}中每個屬性的信息增益。
以"色澤"爲例,它有3個可能的取值:{青綠,烏黑,淺白},若使用該屬性對D進行劃分,則可得到3個子集,分別記爲:D1(=)D^{1}(色澤=青綠)D2(=)D^{2}(色澤= 烏黑)D3(=)D^{3}(色澤= 淺白)
那麼按照這三個子集,可將原數據集分成如下三個部分:子集D1D^{1}包含編號爲{1,4,6,10,1317}的6個樣例,其中正例佔p1=36p_{1}=\frac{3}{6},反例佔p2=36p_{2}=\frac{3}{6};D2D^{2}包含編號爲{2,3,7,8,9,15}的6個樣例,其中正、反例分別佔p1=46p2=26p_{1}=\frac{4}{6},p_{2}=\frac{2}{6};D3D^{3}包含編號爲{5,11,12,14,16}的五個樣例,其中正、反例分別佔p1=15,p2=45p_{1}=\frac{1}{5},p_{2}=\frac{4}{5}
計算用“色澤”劃分之後所獲得的3個分支節點的信息熵爲:
Ent(D1)=(36log236+36log236)=1.00Ent(D^{1})=-(\frac{3}{6}log_{2}\frac{3}{6}+\frac{3}{6}log_{2}\frac{3}{6})=1.00
Ent(D2)=(46log246+26log226)=0.918Ent(D^{2})=-(\frac{4}{6}log_{2}\frac{4}{6}+\frac{2}{6}log_{2}\frac{2}{6})=0.918
Ent(D3)=(15log215+45log245)=0.722Ent(D^{3})=-(\frac{1}{5}log_{2}\frac{1}{5}+\frac{4}{5}log_{2}\frac{4}{5})=0.722
然後,根據式(18)可計算出屬性“色澤”的信息增益爲:
Gain(D,)=Ent(D)v=13DvDEnt(Dv)=0.998(617×Ent(D1)+617×Ent(D2)+517×Ent(D3))=0.998(617×1.000+617×0.918+517×0.722)=0.109Gain(D,色澤)=Ent(D)-\sum_{v=1}^{3}\frac{|D^{v}|}{|D|}Ent(D^{v})\\=0.998-(\frac{6}{17}\times Ent(D^{1}) +\frac{6}{17} \times Ent(D^{2})+\frac{5}{17}\times Ent(D^{3}) )\\=0.998-(\frac{6}{17}\times1.000+\frac{6}{17} \times 0.918+\frac{5}{17}\times 0.722 )=0.109
類似的,可計算出其他屬性的信息增益:
Gain(D,)=0.143 Gain(D,)=0.141; Gain(D,)=0.381 Gain(D,)=0.289 Gain(D,)=0.006Gain(D,根蒂)=0.143;\ Gain(D,敲聲)=0.141;\ Gain(D,紋理)=0.381;\ Gain(D,臍部)=0.289;\ Gain(D,觸感)=0.006
對比上面求出的所有屬性的信息增益,屬性“紋理”的信息增益最大,所以它被選爲劃分屬性,下圖是基於“紋理”對根節點進行劃分的結果:
在這裏插入圖片描述
然後,決策樹學習算法將對每個分支節點做進一步劃分,以上圖中第一個分直節點(“紋理=清晰”)爲例,該節點包含的樣例集合D1D^{1}中有編號{1,2,3,4,5,6,8,10,15}的9個樣例,可用屬性集合爲{色澤,根蒂,敲聲,臍部,觸感}。基於D1D^{1}計算出各屬性的信息增益:
Gain(D1,)=0.043; Gain(D1,)=0.458 Gain(D1,)=0.331; Gain(D1,)=0.458 Gain(D1,)=0.458Gain(D^{1},色澤)=0.043;\ Gain(D^{1},根蒂)=0.458;\ Gain(D^{1},敲聲)=0.331;\ Gain(D^{1},臍部)=0.458;\ Gain(D^{1},觸感)=0.458
“根蒂”、“臍部”、“觸感”3個屬性均取得了最大的信息增益,可選其中之一作爲劃分屬性(注意:葉節點就是當前屬性的特徵全部屬於一類,即全部屬於正例或全部屬於負例,例如下圖中的屬性根蒂的兩個特徵:蜷縮和硬挺)。類似的,對每個分支節點進行上述操作,最終得到的決策樹如下:
在這裏插入圖片描述

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

C4.5決策樹

ID3算法沒有考慮連續特徵,也沒有考慮缺失值的問題。
使用信息增益來進行屬性的劃分會存在一個缺陷:以信息增益爲準則的ID3決策樹對可取值數目較多的屬性有所偏好
下面就用數學來說明上述問題:
信息熵增益:
Gain(D,a)=Ent(D)v=1VDvDEnt(Dv)=Ent(D)v=1VDvD(k1ypklog2pk)=Ent(D)v=1VDvD(k=1yDkvDvlog2DkvDv)(19)Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}Ent(D^{v})\\=Ent(D)-\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}(-\sum_{k1}^{|y|}p_{k}log_{2}p_{k})\\=Ent(D)-\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}(-\sum_{k=1}^{|y|}\frac{|D_{k}^{v}|}{|D^{v}|}log_{2}\frac{|D_{k}^{v}|}{|D^{v}|})\tag{19}

其中,DkvD^{v}_{k}表示在樣本集合D中在屬性a上取值爲ava^{v}且類別爲k的樣本。

爲了說明問題,假設一種極端的情況,即假設取ava^{v}的樣本個數只有1個,說明屬性a可取值個數和樣本個數是一樣多,即:V=D,Dkv=Dv=1V=|D|,D^{v}_{k}=D^{v}=1,顯然此時屬性a可以視爲取值數目較多的屬性。將該情況下的Dkv=Dv=1D^{v}_{k}=D^{v}=1帶入到式(19)中,發現H(D|a)=0,當被減數條件熵取0的時候信息增益取最大,所以此時以信息增益最大的那個屬性作爲劃分屬性的話,那麼肯定選屬性a作爲劃分屬性,但是這樣選擇出來的決策樹泛化能力特別差,嚴重過擬合

要修復ID3算法的這個缺陷,就提出了C4.5決策樹,下面開始說明C4.5決策樹。

C4.5決策樹是以信息增益率爲準則來選擇劃分屬性的決策樹。
定義信息增益率:
Gainratio(D,a)=Gain(D,a)IV(a)(20)Gain_ratio(D,a)=\frac{Gain(D,a)}{IV(a)}\tag{20}
其中,
IV(a)=v=1VDvDlog2DvD(21)IV(a)=-\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}log_{2}\frac{|D^{v}|}{|D|}\tag{21}
觀察信息增益率(20)可知,它在信息增益的基礎上再除以一個懲罰項IV(a)IV(a),那麼再觀察懲罰項IV(a)IV(a),發現其類似於前面說的信息熵的表達式。在說信息熵的時候已經交代過:當各類樣本分佈均勻的時候,它們的信息熵就越大。那麼將這個思想應用到信息增益率(20)上,即屬性a的可取值數目越多的話,那麼懲罰項IV(a)IV(a)就會越來越大,從而導致信息增益率越來越小這樣一來,對於那些可取值數目較多的屬性獲得更大的懲罰,使得其信息增益率小。

C4.5決策樹解決了“可取值較多數目的偏好”問題,那麼又帶來了另一個問題:相反的,信息增益率偏好於那些取值數目較少的屬性
爲了解決這個問題,C4.5決策樹提出了這個方法:算法首先找出信息增益高出平均水平的屬性,再在這些屬性裏面選擇信息增益率最高的屬性作爲最優劃分屬性

C4.5算法的不足:

a. C4.5算法生成的是多叉樹,生成決策樹對的效率比較慢
b.C4.5只能用於分類
c.C4.5由於使用了熵模型,裏面有大量的耗時的對數運算

CART決策樹

CART決策樹是以基尼指數爲準則來選擇劃分屬性的決策樹

基尼值:
Gini(D)=k=1ykkpkpk=k=1ypkkkpk=k=1ypk(1pk)=1k=1ypk2(22)Gini(D)=\sum_{k=1}^{|y|}\sum_{k^{'}\neq k}p_{k}p_{k^{'}}=\sum_{k=1}^{|y|}p_{k}\sum_{k^{'}\neq k}p_{k^{'}}=\sum_{k=1}^{|y|}p_{k}(1-p_{k})=1-\sum_{k=1}^{|y|}p^{2}_{k}\tag{22}
直觀地來看,基尼值就是表示集合D中,隨機抽出兩個樣本,不是同一類別的概率。
基尼指數:
Giniindex(D,a)=v=1VDvDGini(Dv)(23)Gini_index(D,a)=\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}Gini(D^{v})\tag{23}
基尼指數就是在基尼值得前面加上了權重,基尼值和基尼指數越小,樣本集合純度越高。
CART決策樹既能做分類任務,又能做迴歸任務。

1、CART決策樹的分類算法

算法流程:

  1. 根據基尼指數公式Giniindex(D,a)=v=1VDvDGini(Dv)Gini_index(D,a)=\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}Gini(D^{v})找出基尼指數最小的屬性aa_{*};
  2. 計算屬性aa_{*}的所有可能取值的基尼值Gain(Dv),v=1,2,...,VGain(D^{v}),v=1,2,...,V,選擇基尼值最小的取值ava^{v}_{*}作爲劃分點,將集合D劃分爲D1和D2兩個集合(節點),其中D1集合的樣本爲a=ava_{*}=a_{*}^{v}的樣本,D2集合爲aava_{*}\neq a_{*}^{v}的樣本;
  3. 對集合D1和D2重複步驟1和步驟2,直至滿足停止條件。

2、CART決策樹的迴歸算法

CART決策樹的迴歸算法幾乎和CART決策樹的分類算法幾乎是一樣的,只是換了一個公式來尋找最優劃分屬性。
CART決策樹的迴歸算法:

  1. 根據以下公式找出最優化分屬性aa_{*}和最優劃分點ava_{*}^{v}:

    a,av=argmina,av[minc1xiD1(a,av)(yic1)2+minc1xiD1(a,av)(yic2)2](24)a_{*},a^{v}_{*}=\underset {a,a^{v}}{argmin}[\underset{c1}{min}\sum_{x_{i}\in D_{1}(a,a^{v})}(y_{i}-c1)^{2}+\underset{c1}{min}\sum_{x_{i}\in D_{1}(a,a^{v})}(y_{i}-c2)^{2}]\tag{24}
    其中,D1(a,av)D_{1}(a,a^{v})表示屬性a上取值小於等於ava^{v}的樣本集合,D2(a,av)D_{2}(a,a^{v})表示屬性a上取值大於ava^{v}的樣本集合,c1表示D1D_{1}的樣本輸出均值,c2表示D2D_{2}的樣本輸出均值(式(24)是該算法的損失函數);

  2. 根據ava_{*}^{v}將集合D劃分爲D1D_{1}D2D_{2}兩個集合(節點);

  3. 對集合D_{1}和D2D_{2}重複步驟1和步驟2,直至滿足停止條件。

剪枝

由於決策樹算法非常容易過擬合,對於生成的決策樹必須要進行剪枝。

1、預剪枝

預剪枝就是在構造決策樹的過程中,先對每個節點在劃分前進行估計,如果當前結點的劃分不能帶來決策樹模型的泛華性增加,則不對當前結點進行劃分並且將當前結點標記爲葉結點。
舉例(使用西瓜書數據集4.2):
在這裏插入圖片描述
觀察上面的數據集,是好瓜和不是好瓜各有5個,那麼根節點的信息熵爲:
Ent(D)=k=12pklog2pk=(12log212+12log212)=1Ent(D)= -\sum_{k=1}^{2}p_{k}log{2}p_{k}=-(\frac{1}{2}log_{2}\frac{1}{2}+\frac{1}{2}log_{2}\frac{1}{2})=1
基於根節點,計算出每個屬性的信息增益(直接給結果了):
Gain(D,a1)=1(410×1+410×0.811+0)=0.276Gain(D,a2)=1(12×0.971+25×1+0)=0.115Gain(D,a3)=1(610×1+310×0.918+0)=0.174Gain(D,a4)=1(610×1+310×0.918+0)=0.174Gain(D,a5)=1(410×0.811+410×01+0)=0.276Gain(D,a6)=1(610×1+410×1)=0色澤:Gain(D,a_{1})=1-(\frac{4}{10}\times 1 + \frac{4}{10} \times 0.811 + 0)=0.276\\ 根蒂:Gain(D,a_{2})=1-(\frac{1}{2}\times 0.971 + \frac{2}{5} \times 1 + 0)=0.115\\ 敲聲:Gain(D,a_{3})=1-(\frac{6}{10}\times 1 + \frac{3}{10} \times 0.918 + 0)=0.174\\ 紋理:Gain(D,a_{4})=1-(\frac{6}{10}\times 1 + \frac{3}{10} \times 0.918 + 0)=0.174\\ 臍部:Gain(D,a_{5})=1-(\frac{4}{10}\times 0.811 + \frac{4}{10} \times 01 + 0)=0.276\\ 觸感:Gain(D,a_{6})=1-(\frac{6}{10}\times 1 + \frac{4}{10} \times 1 )=0
通過比較,“臍部”和“色澤”的信息增益最大,均爲0.276,所以可以從這兩個屬性中隨機挑選一個作爲劃分屬性。這裏選擇臍部作爲劃分屬性,那麼會產生3個分支:
在這裏插入圖片描述
下面就需要用預剪枝來判斷是不是應該進行這個劃分,判斷的標準就是比較劃分前後其泛華能力是否有提升
劃分之前,所有的樣本都在根結點,把該節點記爲葉節點,其類別標記爲訓練集中樣本數量最多的類

別,因此該節點可以標記爲好瓜(正負例一樣多,所以壞瓜也行)。然後用驗證集對其性能進行評估,

可以看出上面圖中的驗證集中,樣本{4,5,8}爲好瓜,被決策樹分類正確;其他的樣本{9,11,12,13}被

誤分類爲好瓜,所以此時的正確率爲3743%\frac{3}{7}\approx 43\%。(記住這是沒劃分之前的正確率)

根據信息增益最大選擇劃分屬性後的決策時如上圖,那麼此時再次用驗證集來來評估這個決策樹,此

時的正確率是:5771%\frac{5}{7}\approx71\%,很明顯這個準確率大於沒劃分前的準確率,因此可以用

屬性“臍部”進行劃分。

決策樹算法對結點2繼續進行劃分,再次使用信息增益挑選出值最大的那個特徵,信息增益最大的那個特徵是“色澤”(具體計算不寫了),則使用“色澤”劃分後的決策樹爲:

在這裏插入圖片描述
再使用預剪枝方法對此次劃分進行判斷,應不應該進行這個劃分:首先“臍部”爲“凹陷”的屬性集合中

有3個好瓜,1個不是好瓜,那麼在使用屬性“色澤”劃分之前的決策樹的劃分應該爲好瓜;使用“色澤”

屬性劃分後,使用驗證集進行計算,劃分後的有4個被正確分類,3個被誤分類,那麼此時的正確率

4757.1%\frac{4}{7}\approx 57.1\% ,明顯小於使用“色澤”劃分之前的準確率,所以禁止劃分該分支。

後面也是按照這個方法來,這裏就不一一贅述了。
那麼最後的得到如下的決策樹:
在這裏插入圖片描述

**總結:**對比剪枝決策樹和未剪枝決策樹,可以看出,預剪枝決策樹的很多分支都沒有展開,這雖然降低了過擬合的風險,但有可能帶來欠擬合的風險

2、後剪枝

後剪枝就是先把決策樹構造完畢,然後自底向上的對非葉結點進行考察,若將該節點對應的子樹換爲葉結點能夠帶來泛化性能的提升,則把該子樹替換爲葉結點。
舉例:
假設使用上面的數據集,利用信息增益最大的算法得到的決策樹如下,下面開始對該樹進行後剪枝。
在這裏插入圖片描述後剪枝算法首先考察圖中的結點(6),若將以其爲根節點的子樹刪除,即相當於把結點(6)替換爲

子節點,替換後的葉結點的樣本(臍部=稍凹,根蒂=稍蜷,色澤=烏黑)包括編號爲{7,15}的訓練樣

本,把該葉結點標記爲“好瓜”(因爲這裏正負樣本數量相等,所以隨便寄一個類別),因此此時的決

策樹在驗證集上分類正確的樣本爲{4,8,11,12},,準確率爲47=57.1%\frac{4}{7}=57.1\%(未剪枝的決策

樹分類正確的樣本爲{4,11,13},精度爲42.9%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}\{a^{1},a^{2},...,a^{n}\},根據屬性可得到n-1個劃分點,劃分點的集合爲:
Ta={ai+ai+12 1in1}(24)T_{a}=\{\frac{a^{i}+a^{i+1}}{2}\ |1\leq i \leq n-1\}\tag{24}

對於取值集合TaT_{a}中的每t值會將屬性a離散爲一個屬性值只有兩個值,分別是{a>t}和{a<=t}的屬性,計算新屬性的信息增益,找到信息增益最大的t值即爲該屬性的最優劃分點:
Gain(D,a)=maxtTa Gain(D,a,t)=maxTa Ent(D)λ,+DtλDEnt(Dtλ)(25)Gain(D,a)=\underset{t\in T_{a}}{max}\ Gain(D,a,t)=\underset{\in T_{a}}{max}\ Ent(D)-\sum_{\lambda \in{-,+}}\frac{|D_{t}^{\lambda }|}{|D|}Ent(D_{t}^{\lambda})\tag{25}

2、缺失值的處理

現實數據集中的樣本通常因爲某種原因是缺失的,如果有缺失值的屬性的個數比較小,那麼可以粗暴地將有缺失值的屬性剔除掉;如果有缺失值的屬性較多,就不能簡單地刪除。

在決策樹中處理含有缺失值的樣本的時候,需要解決兩個問題:

  • 1、如何在屬性缺失值缺失的情況下進行劃分屬性的選擇?
  • 2、給定劃分屬性,若該樣本在該屬性上的值是缺失的,那麼該如何對這個樣本進行劃分?
    舉例說明解決方法:
    對於問題1
    含有缺失值的數據集合如下:

在這裏插入圖片描述
給定訓練集D和屬性a,令表示D\overset{-}{D}中在屬性a上沒有缺失值得樣本集(比如,假設a=色澤,則D=2,3,4,6,7,8,9,10,11,12,14,15,16,17\overset{-}{D}={2,3,4,6,7,8,9,10,11,12,14,15,16,17}

那麼對於第一個問題:我們可以根據D\overset{-}{D}(即在該屬性上沒有缺失值的樣本集)來計算屬性a的信息增益或者其他指標。我們只要再給根據計算出來的值一個權重,皆可以表示該訓練集D中屬性a的優劣。

假定屬性a有V個可取值{a1,a2,...,aV}\{a^{1},a^{2},...,a^{V}\},令Dv\overset {-}{D^{v}}表示D中在屬性a上取值爲ava^{v}的樣本集,Dk\overset{-}{D_{k}}表示D\overset {-}{D}中屬於第k個類(k=1,2,…,|y|)的樣本子集,則顯然D=k=1V1Dk,DV=1v1Dv\overset {-}{D}=\cup ^{V_{1}}_{k=1}\overset{-}{D_{k}},\overset {-}{D}\cup ^{v_{1}}_{V=1}\overset{-}{D^{v}},假定爲每個樣本X賦予一個權重WxW_{x}(在決策樹的初始階段,根節點中樣本的權重初始化爲1),並定義:
ρ=xDvWxxDWx, (25)\rho = \frac {\sum_{x\in \overset {-}{D^{v}}}W_{x}}{{\sum_{x\in D}}W_{x}}\tag{25},\ 表示無缺失值樣本所佔的比例
pk=xDkWxxDWx (1ky), k(26)\overset{-}{p_{k}}=\frac{\sum_{x\in \overset{-}{D_{k}}}W_{x}}{\sum_{x\in \overset{-}{D}}W_{x}}\ (1\leq k\leq |y|)\tag{26},\ 表示無缺失值樣本中第k類所佔的比例
rv=xDvWxxDWx (1vV), aav(27)\overset{-}{r_{v}}=\frac{\sum_{x\in \overset{-}{D_{v}}}W_{x}}{\sum_{x\in \overset{-}{D}}W_{x}}\ (1\leq v\leq V)\tag{27},\ 表示無缺失值樣本中在屬性a上取值a^{v}的樣本所佔比例
根據上面的三個公式,此時可以將信息增益推廣爲:
Gain(D,a)=ρ×Gain(D,a)=ρ×(Ent(D)v=1VrvEnt(Dv))(28)Gain(D,a)=\rho \times Gain(\overset{-}{D},a)=\rho \times (Ent(\overset{-}{D})-\sum_{v=1}^{V}\overset{-}{r_{v}}Ent(\overset {-}{D^{v}}))\tag{28}

那麼上面給出的第一個問題,用式(28)就可以估算出來。

對於問題2:
若樣本x在劃分屬性a上的取值已知,則將x劃入與其取值對應的子節點,且樣本權值在子節點中保持爲wxw_{x}。若樣本x在劃分屬性a上的取值未知,則將x同時劃入所有子節點,且樣本權值在與屬性值ava^{v}對應的子節點中調整爲rvwx\overset{-}{r_{v}}\cdot w_{x};直觀的看,這就是讓同一個樣本以不同的概率劃入到不同的子節點中去。

用一個實例說明C4.5是怎樣利用上述思想來解決缺失值的(直接截圖了!!!!)
在這裏插入圖片描述
在這裏插入圖片描述
生成的決策樹如下:
在這裏插入圖片描述

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