相關文章:
機器學習 | 目錄
監督學習 | ID3 決策樹原理及Python實現
監督學習 | CART 分類迴歸樹原理
監督學習 | 決策樹之Sklearn實現
監督學習 | 決策樹之網絡搜索
本文大部分內容搬運自李航老師的《統計學習方法》[1],以給出決策樹算法較爲完整的定義,關於 ID3 算法的更多推到過程以及例子、Python實現,可以參考這篇文章,關於決策樹算法的 Sklearn 實現,可以參考這篇文章。
決策樹
決策樹是一種基本的分類與迴歸方法。在分類問題中,表示基於特徵對實例進行分類的過程。它可以認爲是 if-then 規則的集合,也可以認爲是定義在特徵空間與類空間上的條件概率分佈。
決策樹學習通常包括 3 個步驟:特徵選擇
、決策樹的生成
和決策樹的修剪
。這些決策樹學習的思想主要來源於由 Quinlan 在 1986 年提出的 ID3 算法和 1993 年提出的 C4.5 算法,以及由 Breiman 等人在 1984 年提出的 CART 算法。這三個算法最大的不同在於特徵選擇的指標上,三者分別使用:信息增益、信息增益率以及基尼指數作爲特徵選擇指標。本文將介紹 ID3 以及 C4.5 算法,並在下一篇文章中介紹 CART 算法。
1. 特徵選擇
特徵選擇在於選取對訓練數據具有分類能力的特徵,這樣可以提高決策樹學習的效率。如果利用一個特徵進行分類的結果與隨機分類的結果沒有很大差別,則稱這個特徵是沒有分類能力的。
通常特徵選擇的準則是信息增益或信息增益率。
1.1 熵
熵
(entropy)是表示隨機變量不確定性的度量。設 X 是一個取有限個值的離散隨機變量,其概率分佈爲:
P(X=xi)=pi,i=1,2,...,n
則隨機變量 X 的熵定義爲:
H(X)=−i=1∑npilogpi(1)
若 pi=0,則定義 0∗log0=0,通常式 (1) 中的對數以 2 或 e 爲底,單位爲比特(bit)或納特(nat)。由此可知,熵只依賴於 X 的分佈,而與 X 的取值無關,所以也可以將 X 的熵記做 H(p),即:
H(p)=−i=1∑npilogpi(2)
熵越大,隨機變量的不確定性就越大,由此可以驗證:
0≤H(p)≤logn(3)
1.2 條件熵
設由隨機變量 (X,Y),其聯合概率分佈爲:
P(X=xi,Y=yj)=pij,i=1,2,...,n;j=1,2,...,m
條件熵
H(Y∣X) 表示在已知隨機變量 X 的條件下隨機變量 Y 的不確定性,其定義爲 X 給定條件下 Y 的條件概率分佈的熵的 X 的數學期望:
H(Y∣X)=i=1∑npiH(Y∣X=xi)(4)
其中 pi=P(X=xi),i=1,2,...,n。
當熵和條件熵中的概率由數據估計得到時,所對應的熵與條件熵分別稱爲經驗熵
(emprical entropy)和經驗條件熵
(empirical conditional emtropy)。
1.3 信息增益
信息增益
(information gain)表示得知特徵 X 的信息而使類 Y 的信息不確定性減少的程度。
特徵 A 對訓練數據集 D 的信息增益 g(D,A),定義爲集合 D 的經驗熵 H(D) 與特徵 A 給定條件下 D 的經驗條件熵 H(D∣A) 之差,即:
g(D,A)=H(D)−H(D∣A)(5)
一般地,熵 H(Y) 與條件熵 H(D∣A) 之差稱爲 互信息
(mutual information)。決策樹學習中的信息增益等價於訓練數據集中類與特徵的互信息。
1.4 信息增益率
信息增益率的大小時相對於訓練數據集而言的,在分類問題困難時,也就是說在訓練數據集的經驗熵大的時候,信息增益值會偏大,信息增益值會偏大。反之,信息增益值會偏小。使用信息增益比
(information gain ratio)可以對這一問題進行校正,這是特徵選擇的另一準則。
特徵 A 對訓練數據集 D 的信息增益率
gR(D,A) 定義爲其信息增益 g(D,A) 與訓練數據集 D 的經驗熵 H(D) 之比:
gR(D,A)=H(D)g(D,A)(6)
2. 決策樹生成
設訓練集數據爲 D,∣D∣ 表示其樣本容量,即樣本個數。
設有 K 個類 Ck,k=1,2,...,K,∣Ck∣ 爲屬於類 Ck 的樣本個數,因此 ∑k=1K∣Ck∣=∣D∣。
設特徵 A 有 n 個不同的取值 {a1,a2,...,an},根據特徵 A 的取值將 D 劃分爲 n 個子集 D1,D2,...,Dn,∣Di∣ 爲 Di 的樣本個數,∑i=1n∣Di∣=D。
記子集 Di 中屬於類 Ck 的樣本的集合爲 Dik,即 Dik=D⋂Ck,∣Dik∣ 爲 Dik 的樣本個數。
因此,信息增益以及信息增益率計算如下:
算法1 信息增益及信息增益率的算法
輸入:訓練數據集 D 和特徵 A;
輸出:特徵 A 對訓練數據集 D 的信息增益 g(D,A) 以及信息增益率 gR(D,A)。
(1)計算數據集 D 的經驗熵 H(D):
H(D)=−i=1∑n∣D∣∣Ck∣log2∣D∣∣Dk∣(7)
(2)計算特徵 A 對數據集 D 的經驗條件熵 H(D∣A):
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)計算信息增益:
g(D,A)=H(D)−H(D∣A)(9)
(4)計算信息增益率:
gR(D,A)=H(D)g(D,A)(10)
2.1 ID3 算法
輸入:訓練數據集 D,特徵集 A,閾值 ε;
輸出:決策樹 T。
(1)若 D 中所有實例屬於同一類 Ck,則 T 爲單節點樹,並將類 Ck 作爲該節點的類標記,返回 T;
(2)若 A=⊘,則 T 爲單節點樹,並將 D 中實例數最大的類 Ck 作爲該節點的類標記,返回 T;
(3)否則,按算法1(1-3)計算 A 中各特徵對 D 的信息增益,選擇信息增益最大的特徵 Ag;
(4)如果 Ag 的信息增益小於閾值 ε,則置 T 爲單節點樹,並將 D 中實例數最大的類 CK 作爲該節點的類標記,返回 T;
(5)否則,對 Ag 的每一可能值 ai,依 Ag=ai 將 D 分隔爲若干非空子集 Di,將 Di 中實例數最大的類作爲標記,構建子節點,由節點及其自己點構造數 T,返回 T;
(6)對第 i 個子節點,以 Di 爲訓練集,以 A−{Ag} 爲特徵集,遞歸地調用步(1)~步(5),得到子樹 Ti,返回 Ti。
2.2 C4.5 算法
C4.5 與 ID3 相比,只是將 ID3 算法中的信息增益換成了信息增益率,因此有:
輸入:訓練數據集 D,特徵集 A,閾值 ε;
輸出:決策樹 T。
(1)若 D 中所有實例屬於同一類 Ck,則 T 爲單節點樹,並將類 Ck 作爲該節點的類標記,返回 T;
(2)若 A=⊘,則 T 爲單節點樹,並將 D 中實例數最大的類 Ck 作爲該節點的類標記,返回 T;
(3)否則,按算法1(1-4)計算 A 中各特徵對 D 的信息增益,選擇信息增益最大的特徵 Ag;
(4)如果 Ag 的信息增益小於閾值 ε,則置 T 爲單節點樹,並將 D 中實例數最大的類 CK 作爲該節點的類標記,返回 T;
(5)否則,對 Ag 的每一可能值 ai,依 Ag=ai 將 D 分隔爲若干非空子集 Di,將 Di 中實例數最大的類作爲標記,構建子節點,由節點及其自己點構造數 T,返回 T;
(6)對第 i 個子節點,以 Di 爲訓練集,以 A−{Ag} 爲特徵集,遞歸地調用步(1)~步(5),得到子樹 Ti,返回 Ti。
3. 決策樹剪枝
3.1 預剪枝
預剪枝是在決策樹生成之前通過限制條件,來防止樹過度生長而造成過擬合,常見的有:
-
最大深度 max_depth
-
每片葉子的最小樣本數 min_samples_leaf
-
每次分裂的最小樣本數 min_samples_split
-
最大特徵數 max_features
關於這些參數的詳細介紹,可以參考這篇文章。
3.2 後剪枝
後剪枝先從訓練集生成一顆完整決策樹,通過向損失函數中增加模型複雜度懲罰來對已生成的決策樹進行簡化。
設樹 T 的葉節點個數爲 ∣T∣,t 是樹 T 的葉節點,該葉節點有 Nt 個樣本點,其中 k 類的樣本點有 Ntk 個,k=1,2,...,K,Ht(T) 爲葉節點 t 上的經驗熵,$\alpha \geq 0 $ 爲參數,則決策樹後剪枝的損失函數(Cost-Complexity Pruning)可以定義爲:
Cα(T)=t=1∑∣T∣NtHt(T)+α∣T∣(11)
其中經驗熵爲:
Ht(T)=−k∑NtNiklogNtNik(12)
令 (11) 式右端第一項爲 C(T):
C(T)=t=1∑∣T∣NtHt(T)=−t=1∑∣T∣Ntk∑NtNiklogNtNik(13)
因此式 (11) 可以寫作:
Cα(T)=C(T)+α∣T∣(14)
其中,C(T) 表示模型對訓練數據的預測誤差,即模型與訓練數據的擬合程度;
∣T∣ 表示模型複雜度,參數 α≥0 控制兩者之間的影響。較大的 α 促使選擇較簡單的模型,較小的 α 促使選擇較複雜的模型, α=0 意味者只考慮模型與訓練數據的擬合程度,不考慮模型的複雜度。
剪枝,就是當 α 確定時,選擇損失函數最小的模型,即損失函數最小的子樹。
當 α 確定時,子樹越大,往往與訓練數據的擬合越好,但是模型的複雜度越高;相反,子樹越小,模型複雜度就越低,但是往往與訓練數據的擬合不好,損失函數正好表示了對兩者的平衡。
可以看到,ID3 和 C4.5 決策樹生成只考慮了通過提高信息增益或信息增益率來對訓練數據進行更好的擬合。而決策樹剪枝通過優化損失函數還考慮了減小模型複雜度。
決策樹生成學習局部的模型,而決策樹剪枝學習整體的模型。
算法2 樹的剪枝算法
輸入:生成算法產生的整個樹 T,參數 α;
輸出:修剪後的子樹 Tα。
(1)計算每個節點的經驗熵;
(2)遞歸地從樹的葉節點向上回縮:
設一組葉節點回縮到其父節點之前與之後的整體樹分別爲 TB 與 TA,其對應的損失函數值分別是 Cα(TB) 與 Cα(TA),如果:
Cα(TA)≤Cα(TB)(15)
則進行剪枝,即將父節點變爲新的葉節點。
(3)返回 (2) ,直到不能繼續爲止,得到損失函數最小的子樹 Tα。
參考文獻
[1] 李航. 統計學習方法[M]. 北京: 清華大學出版社, 2012: 55-66.