监督学习 | ID3 C4.5 决策树原理
文章目錄
- 決策樹
- 1. 特征選擇
- 1.1 熵
- 1.2 條件熵
- 1.3 信息增益
- 1.4 信息增益率
- 2. 決策樹生成
- 算法1 信息增益及信息增益率的算法
- 2.1 ID3 算法
- 2.2 C4.5 算法
- 3. 決策樹剪枝
- 3.1 預(yù)剪枝
- 3.2 后剪枝
- 算法2 樹的剪枝算法
- 參考文獻(xiàn)
相關(guān)文章:
機(jī)器學(xué)習(xí) | 目錄
監(jiān)督學(xué)習(xí) | ID3 決策樹原理及Python實(shí)現(xiàn)
監(jiān)督學(xué)習(xí) | CART 分類回歸樹原理
監(jiān)督學(xué)習(xí) | 決策樹之Sklearn實(shí)現(xiàn)
監(jiān)督學(xué)習(xí) | 決策樹之網(wǎng)絡(luò)搜索
本文大部分內(nèi)容搬運(yùn)自李航老師的《統(tǒng)計(jì)學(xué)習(xí)方法》[1],以給出決策樹算法較為完整的定義,關(guān)于 ID3 算法的更多推到過程以及例子、Python實(shí)現(xiàn),可以參考這篇文章,關(guān)于決策樹算法的 Sklearn 實(shí)現(xiàn),可以參考這篇文章。
決策樹
決策樹是一種基本的分類與回歸方法。在分類問題中,表示基于特征對(duì)實(shí)例進(jìn)行分類的過程。它可以認(rèn)為是 if-then 規(guī)則的集合,也可以認(rèn)為是定義在特征空間與類空間上的條件概率分布。
決策樹學(xué)習(xí)通常包括 3 個(gè)步驟:特征選擇、決策樹的生成和決策樹的修剪。這些決策樹學(xué)習(xí)的思想主要來源于由 Quinlan 在 1986 年提出的 ID3 算法和 1993 年提出的 C4.5 算法,以及由 Breiman 等人在 1984 年提出的 CART 算法。這三個(gè)算法最大的不同在于特征選擇的指標(biāo)上,三者分別使用:信息增益、信息增益率以及基尼指數(shù)作為特征選擇指標(biāo)。本文將介紹 ID3 以及 C4.5 算法,并在下一篇文章中介紹 CART 算法。
1. 特征選擇
特征選擇在于選取對(duì)訓(xùn)練數(shù)據(jù)具有分類能力的特征,這樣可以提高決策樹學(xué)習(xí)的效率。如果利用一個(gè)特征進(jìn)行分類的結(jié)果與隨機(jī)分類的結(jié)果沒有很大差別,則稱這個(gè)特征是沒有分類能力的。
通常特征選擇的準(zhǔn)則是信息增益或信息增益率。
1.1 熵
熵(entropy)是表示隨機(jī)變量不確定性的度量。設(shè) XXX 是一個(gè)取有限個(gè)值的離散隨機(jī)變量,其概率分布為:
P(X=xi)=pi,i=1,2,...,nP(X=x_i)=p_i, \quad i=1,2,...,nP(X=xi?)=pi?,i=1,2,...,n
則隨機(jī)變量 XXX 的熵定義為:
H(X)=?∑i=1npilog?pi(1)H(X)=-\sum_{i=1}^np_i\log p_i \tag{1}H(X)=?i=1∑n?pi?logpi?(1)
若 pi=0p_i=0pi?=0,則定義 0?log?0=00*\log0=00?log0=0,通常式 (1) 中的對(duì)數(shù)以 2 或 e 為底,單位為比特(bit)或納特(nat)。由此可知,熵只依賴于 XXX 的分布,而與 XXX 的取值無關(guān),所以也可以將 XXX 的熵記做 H(p)H(p)H(p),即:
H(p)=?∑i=1npilog?pi(2)H(p)=-\sum_{i=1}^np_i\log p_i \tag{2}H(p)=?i=1∑n?pi?logpi?(2)
熵越大,隨機(jī)變量的不確定性就越大,由此可以驗(yàn)證:
0≤H(p)≤log?n(3)0\leq H(p)\leq \log n \tag{3}0≤H(p)≤logn(3)
1.2 條件熵
設(shè)由隨機(jī)變量 (X,Y)(X,Y)(X,Y),其聯(lián)合概率分布為:
P(X=xi,Y=yj)=pij,i=1,2,...,n;j=1,2,...,mP(X=x_i,Y=y_j)=p_{ij},\quad i=1,2,...,n;j=1,2,...,mP(X=xi?,Y=yj?)=pij?,i=1,2,...,n;j=1,2,...,m
條件熵 H(Y∣X)H(Y|X)H(Y∣X) 表示在已知隨機(jī)變量 XXX 的條件下隨機(jī)變量 YYY 的不確定性,其定義為 XXX 給定條件下 YYY 的條件概率分布的熵的 XXX 的數(shù)學(xué)期望:
H(Y∣X)=∑i=1npiH(Y∣X=xi)(4)H(Y|X)=\sum_{i=1}^n p_iH(Y|X=x_i)\tag{4}H(Y∣X)=i=1∑n?pi?H(Y∣X=xi?)(4)
其中 pi=P(X=xi),i=1,2,...,np_i=P(X=x_i), \quad i=1,2,...,npi?=P(X=xi?),i=1,2,...,n。
當(dāng)熵和條件熵中的概率由數(shù)據(jù)估計(jì)得到時(shí),所對(duì)應(yīng)的熵與條件熵分別稱為經(jīng)驗(yàn)熵(emprical entropy)和經(jīng)驗(yàn)條件熵(empirical conditional emtropy)。
1.3 信息增益
信息增益(information gain)表示得知特征 XXX 的信息而使類 YYY 的信息不確定性減少的程度。
特征 AAA 對(duì)訓(xùn)練數(shù)據(jù)集 DDD 的信息增益 g(D,A)g(D,A)g(D,A),定義為集合 DDD 的經(jīng)驗(yàn)熵 H(D)H(D)H(D) 與特征 AAA 給定條件下 DDD 的經(jīng)驗(yàn)條件熵 H(D∣A)H(D|A)H(D∣A) 之差,即:
g(D,A)=H(D)?H(D∣A)(5)g(D,A)=H(D)-H(D|A) \tag{5}g(D,A)=H(D)?H(D∣A)(5)
一般地,熵 H(Y)H(Y)H(Y) 與條件熵 H(D∣A)H(D|A)H(D∣A) 之差稱為 互信息(mutual information)。決策樹學(xué)習(xí)中的信息增益等價(jià)于訓(xùn)練數(shù)據(jù)集中類與特征的互信息。
1.4 信息增益率
信息增益率的大小時(shí)相對(duì)于訓(xùn)練數(shù)據(jù)集而言的,在分類問題困難時(shí),也就是說在訓(xùn)練數(shù)據(jù)集的經(jīng)驗(yàn)熵大的時(shí)候,信息增益值會(huì)偏大,信息增益值會(huì)偏大。反之,信息增益值會(huì)偏小。使用信息增益比(information gain ratio)可以對(duì)這一問題進(jìn)行校正,這是特征選擇的另一準(zhǔn)則。
特征 AAA 對(duì)訓(xùn)練數(shù)據(jù)集 DDD 的信息增益率 gR(D,A)g_R(D,A)gR?(D,A) 定義為其信息增益 g(D,A)g(D,A)g(D,A) 與訓(xùn)練數(shù)據(jù)集 DDD 的經(jīng)驗(yàn)熵 H(D)H(D)H(D) 之比:
gR(D,A)=g(D,A)H(D)(6)g_R(D,A)=\frac{g(D,A)}{H(D)} \tag{6}gR?(D,A)=H(D)g(D,A)?(6)
2. 決策樹生成
設(shè)訓(xùn)練集數(shù)據(jù)為 DDD,∣D∣|D|∣D∣ 表示其樣本容量,即樣本個(gè)數(shù)。
設(shè)有 KKK 個(gè)類 Ck,k=1,2,...,KC_k ,k=1,2,...,KCk?,k=1,2,...,K,∣Ck∣|C_k|∣Ck?∣ 為屬于類 CkC_kCk? 的樣本個(gè)數(shù),因此 ∑k=1K∣Ck∣=∣D∣\sum_{k=1}^K|C_k|=|D|∑k=1K?∣Ck?∣=∣D∣。
設(shè)特征 AAA 有 nnn 個(gè)不同的取值 {a1,a2,...,an}\{a_1,a_2,...,a_n\}{a1?,a2?,...,an?},根據(jù)特征 AAA 的取值將 DDD 劃分為 nnn 個(gè)子集 D1,D2,...,DnD_1,D_2,...,D_nD1?,D2?,...,Dn?,∣Di∣|D_i|∣Di?∣ 為 DiD_iDi? 的樣本個(gè)數(shù),∑i=1n∣Di∣=D\sum_{i=1}^n|D_i|=D∑i=1n?∣Di?∣=D。
記子集 DiD_iDi? 中屬于類 CkC_kCk? 的樣本的集合為 DikD_{ik}Dik?,即 Dik=D?CkD_{ik}=D \bigcap C_kDik?=D?Ck?,∣Dik∣|D_{ik}|∣Dik?∣ 為 DikD_{ik}Dik? 的樣本個(gè)數(shù)。
因此,信息增益以及信息增益率計(jì)算如下:
算法1 信息增益及信息增益率的算法
輸入:訓(xùn)練數(shù)據(jù)集 DDD 和特征 AAA;
輸出:特征 AAA 對(duì)訓(xùn)練數(shù)據(jù)集 DDD 的信息增益 g(D,A)g(D,A)g(D,A) 以及信息增益率 gR(D,A)g_R(D,A)gR?(D,A)。
(1)計(jì)算數(shù)據(jù)集 DDD 的經(jīng)驗(yàn)熵 H(D)H(D)H(D):
H(D)=?∑i=1n∣Ck∣∣D∣log2∣Dk∣∣D∣(7)H(D)=-\sum_{i=1}^n \frac{|C_k|}{|D|}log_2\frac{|D_k|}{|D|} \tag{7}H(D)=?i=1∑n?∣D∣∣Ck?∣?log2?∣D∣∣Dk?∣?(7)
(2)計(jì)算特征 AAA 對(duì)數(shù)據(jù)集 DDD 的經(jīng)驗(yàn)條件熵 H(D∣A)H(D|A)H(D∣A):
H(D∣A)=∑i=1n∣Di∣∣D∣H(Di)=?∑i=1n∣Di∣∣D∣∑i=1n∣Dik∣∣Di∣log2∣Dik∣∣Di∣(8)\begin{aligned} H(D|A)& =\sum_{i=1}^n \frac{|D_i|}{|D|}H(D_i)\\ & = - \sum_{i=1}^n \frac{|D_i|}{|D|} \sum_{i=1}^n \frac{|D_{ik}|}{|D_i|}log_2\frac{|D_{ik}|}{|D_i|}\\ \end{aligned}\tag{8} H(D∣A)?=i=1∑n?∣D∣∣Di?∣?H(Di?)=?i=1∑n?∣D∣∣Di?∣?i=1∑n?∣Di?∣∣Dik?∣?log2?∣Di?∣∣Dik?∣??(8)
(3)計(jì)算信息增益:
g(D,A)=H(D)?H(D∣A)(9)g(D,A)=H(D)-H(D|A) \tag{9}g(D,A)=H(D)?H(D∣A)(9)
(4)計(jì)算信息增益率:
gR(D,A)=g(D,A)H(D)(10)g_R(D,A)=\frac{g(D,A)}{H(D)} \tag{10}gR?(D,A)=H(D)g(D,A)?(10)
2.1 ID3 算法
輸入:訓(xùn)練數(shù)據(jù)集 DDD,特征集 AAA,閾值 ε\varepsilonε;
輸出:決策樹 TTT。
(1)若 DDD 中所有實(shí)例屬于同一類 CkC_kCk?,則 TTT 為單節(jié)點(diǎn)樹,并將類 CkC_kCk? 作為該節(jié)點(diǎn)的類標(biāo)記,返回 TTT;
(2)若 A=?A=\oslashA=?,則 TTT 為單節(jié)點(diǎn)樹,并將 DDD 中實(shí)例數(shù)最大的類 CkC_kCk? 作為該節(jié)點(diǎn)的類標(biāo)記,返回 TTT;
(3)否則,按算法1(1-3)計(jì)算 AAA 中各特征對(duì) DDD 的信息增益,選擇信息增益最大的特征 AgA_gAg?;
(4)如果 AgA_gAg? 的信息增益小于閾值 ε\varepsilonε,則置 TTT 為單節(jié)點(diǎn)樹,并將 DDD 中實(shí)例數(shù)最大的類 CKC_KCK? 作為該節(jié)點(diǎn)的類標(biāo)記,返回 TTT;
(5)否則,對(duì) AgA_gAg? 的每一可能值 aia_iai?,依 Ag=aiA_g=a_iAg?=ai? 將 DDD 分隔為若干非空子集 DiD_iDi?,將 DiD_iDi? 中實(shí)例數(shù)最大的類作為標(biāo)記,構(gòu)建子節(jié)點(diǎn),由節(jié)點(diǎn)及其自己點(diǎn)構(gòu)造數(shù) TTT,返回 TTT;
(6)對(duì)第 iii 個(gè)子節(jié)點(diǎn),以 DiD_iDi? 為訓(xùn)練集,以 A?{Ag}A-\{A_g\}A?{Ag?} 為特征集,遞歸地調(diào)用步(1)~步(5),得到子樹 TiT_iTi?,返回 TiT_iTi?。
2.2 C4.5 算法
C4.5 與 ID3 相比,只是將 ID3 算法中的信息增益換成了信息增益率,因此有:
輸入:訓(xùn)練數(shù)據(jù)集 DDD,特征集 AAA,閾值 ε\varepsilonε;
輸出:決策樹 TTT。
(1)若 DDD 中所有實(shí)例屬于同一類 CkC_kCk?,則 TTT 為單節(jié)點(diǎn)樹,并將類 CkC_kCk? 作為該節(jié)點(diǎn)的類標(biāo)記,返回 TTT;
(2)若 A=?A=\oslashA=?,則 TTT 為單節(jié)點(diǎn)樹,并將 DDD 中實(shí)例數(shù)最大的類 CkC_kCk? 作為該節(jié)點(diǎn)的類標(biāo)記,返回 TTT;
(3)否則,按算法1(1-4)計(jì)算 AAA 中各特征對(duì) DDD 的信息增益,選擇信息增益最大的特征 AgA_gAg?;
(4)如果 AgA_gAg? 的信息增益小于閾值 ε\varepsilonε,則置 TTT 為單節(jié)點(diǎn)樹,并將 DDD 中實(shí)例數(shù)最大的類 CKC_KCK? 作為該節(jié)點(diǎn)的類標(biāo)記,返回 TTT;
(5)否則,對(duì) AgA_gAg? 的每一可能值 aia_iai?,依 Ag=aiA_g=a_iAg?=ai? 將 DDD 分隔為若干非空子集 DiD_iDi?,將 DiD_iDi? 中實(shí)例數(shù)最大的類作為標(biāo)記,構(gòu)建子節(jié)點(diǎn),由節(jié)點(diǎn)及其自己點(diǎn)構(gòu)造數(shù) TTT,返回 TTT;
(6)對(duì)第 iii 個(gè)子節(jié)點(diǎn),以 DiD_iDi? 為訓(xùn)練集,以 A?{Ag}A-\{A_g\}A?{Ag?} 為特征集,遞歸地調(diào)用步(1)~步(5),得到子樹 TiT_iTi?,返回 TiT_iTi?。
3. 決策樹剪枝
3.1 預(yù)剪枝
預(yù)剪枝是在決策樹生成之前通過限制條件,來防止樹過度生長而造成過擬合,常見的有:
最大深度 max_depth
每片葉子的最小樣本數(shù) min_samples_leaf
每次分裂的最小樣本數(shù) min_samples_split
最大特征數(shù) max_features
關(guān)于這些參數(shù)的詳細(xì)介紹,可以參考這篇文章。
3.2 后剪枝
后剪枝先從訓(xùn)練集生成一顆完整決策樹,通過向損失函數(shù)中增加模型復(fù)雜度懲罰來對(duì)已生成的決策樹進(jìn)行簡(jiǎn)化。
設(shè)樹 TTT 的葉節(jié)點(diǎn)個(gè)數(shù)為 ∣T∣|T|∣T∣,ttt 是樹 TTT 的葉節(jié)點(diǎn),該葉節(jié)點(diǎn)有 NtN_tNt? 個(gè)樣本點(diǎn),其中 kkk 類的樣本點(diǎn)有 NtkN_{tk}Ntk? 個(gè),k=1,2,...,Kk=1,2,...,Kk=1,2,...,K,Ht(T)H_t(T)Ht?(T) 為葉節(jié)點(diǎn) ttt 上的經(jīng)驗(yàn)熵,$\alpha \geq 0 $ 為參數(shù),則決策樹后剪枝的損失函數(shù)(Cost-Complexity Pruning)可以定義為:
Cα(T)=∑t=1∣T∣NtHt(T)+α∣T∣(11)C_{\alpha}(T)=\sum_{t=1}^{|T|}N_tH_t(T)+\alpha |T|\tag{11}Cα?(T)=t=1∑∣T∣?Nt?Ht?(T)+α∣T∣(11)
其中經(jīng)驗(yàn)熵為:
Ht(T)=?∑kNikNtlogNikNt(12)H_t(T)=-\sum_{k} \frac{N_{ik}}{N_t}log\frac{N_{ik}}{N_t} \tag{12}Ht?(T)=?k∑?Nt?Nik??logNt?Nik??(12)
令 (11) 式右端第一項(xiàng)為 C(T)C(T)C(T):
C(T)=∑t=1∣T∣NtHt(T)=?∑t=1∣T∣Nt∑kNikNtlogNikNt(13)\begin{aligned} C(T)& =\sum_{t=1}^{|T|}N_tH_t(T) \\ & = -\sum_{t=1}^{|T|}N_t\sum_{k} \frac{N_{ik}}{N_t}log\frac{N_{ik}}{N_t} \\ \end{aligned}\tag{13} C(T)?=t=1∑∣T∣?Nt?Ht?(T)=?t=1∑∣T∣?Nt?k∑?Nt?Nik??logNt?Nik???(13)
因此式 (11) 可以寫作:
Cα(T)=C(T)+α∣T∣(14)C_{\alpha}(T)=C(T)+\alpha |T| \tag{14}Cα?(T)=C(T)+α∣T∣(14)
其中,C(T)C(T)C(T) 表示模型對(duì)訓(xùn)練數(shù)據(jù)的預(yù)測(cè)誤差,即模型與訓(xùn)練數(shù)據(jù)的擬合程度;
∣T∣|T|∣T∣ 表示模型復(fù)雜度,參數(shù) α≥0\alpha \geq 0α≥0 控制兩者之間的影響。較大的 α\alphaα 促使選擇較簡(jiǎn)單的模型,較小的 α\alphaα 促使選擇較復(fù)雜的模型, α=0\alpha=0α=0 意味者只考慮模型與訓(xùn)練數(shù)據(jù)的擬合程度,不考慮模型的復(fù)雜度。
剪枝,就是當(dāng) α\alphaα 確定時(shí),選擇損失函數(shù)最小的模型,即損失函數(shù)最小的子樹。
當(dāng) α\alphaα 確定時(shí),子樹越大,往往與訓(xùn)練數(shù)據(jù)的擬合越好,但是模型的復(fù)雜度越高;相反,子樹越小,模型復(fù)雜度就越低,但是往往與訓(xùn)練數(shù)據(jù)的擬合不好,損失函數(shù)正好表示了對(duì)兩者的平衡。
可以看到,ID3 和 C4.5 決策樹生成只考慮了通過提高信息增益或信息增益率來對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行更好的擬合。而決策樹剪枝通過優(yōu)化損失函數(shù)還考慮了減小模型復(fù)雜度。
決策樹生成學(xué)習(xí)局部的模型,而決策樹剪枝學(xué)習(xí)整體的模型。
算法2 樹的剪枝算法
輸入:生成算法產(chǎn)生的整個(gè)樹 TTT,參數(shù) α\alphaα;
輸出:修剪后的子樹 TαT_{\alpha}Tα?。
(1)計(jì)算每個(gè)節(jié)點(diǎn)的經(jīng)驗(yàn)熵;
(2)遞歸地從樹的葉節(jié)點(diǎn)向上回縮:
\quad \quad設(shè)一組葉節(jié)點(diǎn)回縮到其父節(jié)點(diǎn)之前與之后的整體樹分別為 TBT_BTB? 與 TAT_ATA?,其對(duì)應(yīng)的損失函數(shù)值分別是 Cα(TB)C_{\alpha}(T_B)Cα?(TB?) 與 Cα(TA)C_{\alpha}(T_A)Cα?(TA?),如果:
Cα(TA)≤Cα(TB)(15)C_{\alpha}(T_A)\leq C_{\alpha}(T_B) \tag{15}Cα?(TA?)≤Cα?(TB?)(15)
\quad \quad 則進(jìn)行剪枝,即將父節(jié)點(diǎn)變?yōu)樾碌娜~節(jié)點(diǎn)。
(3)返回 (2) ,直到不能繼續(xù)為止,得到損失函數(shù)最小的子樹 TαT_{\alpha}Tα?。
參考文獻(xiàn)
[1] 李航. 統(tǒng)計(jì)學(xué)習(xí)方法[M]. 北京: 清華大學(xué)出版社, 2012: 55-66.
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的监督学习 | ID3 C4.5 决策树原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你的adonis用对了吗?不同因素的顺序
- 下一篇: ROS在编译生成自定义消息时报错Modu