決策樹相關知識小結

zjuPeco發表於2017-08-08

前言

本文是一篇關於決策樹方面知識的小結,不包含具體的例子(想看例子推薦文獻[1]的第4章),主要總結了ID3、C4.5和CART樹三者的區別,剪枝處理,連續值和缺失值的處理。

決策樹的基本演算法

決策樹的學習目的是為了產生一顆泛化能力強,即處理未見示例能力強的決策樹,其基本流程遵循“分治”的策略,基本演算法如下所示:

***********************輸入********************
訓練集 D={(x1,y1),(x2,y2),...,(xm,ym)}

x中有 (col1,col2,...,colk) 共k組特徵
每個col下有相應的屬性值(a1,a2,...,ap)

y中有 (l1,l2,...,ln) 共n種類標籤
***********************過程********************
if 資料集中的每個子項屬於同一分類 then
    return 類標籤
else
    尋找劃分資料集的最好特徵*
    劃分資料集
    建立分支結點
    for 每個劃分的子集
        遞迴呼叫該函式並增加返回結果到分支結點中
    end for
    return 分支結點
end if 
***********************輸出********************
一顆決策樹

其中,最為重要的是“尋找劃分資料集的最好特徵”這一步(我特意打上了*號),這也是不同演算法的區別所在。

ID3、C4.5和CART的區別

ID3演算法

在劃分資料集的過程當中,我們希望決策樹的分支結點所包含的樣本儘可能地屬於同一類別,即結點的純度越來越高。
在ID3演算法中,利用了資訊增益這一準則來劃分資料集,要了解資訊增益,首先要知道資訊熵的概念。資訊熵是度量樣本集合純度最常用的一項指標。假設當前樣本D

D
的第k
k
類樣本所佔的比例為pk(k=1,2,...,n)
p_k(k=1,2,...,n)
,則,D
D
的資訊熵定義為

Ent(D)=nk=1pklog2pk
Ent(D)=-\sum_{k=1}^{n}p_k \cdot log_2p_k

En(D)
En(D)
的值越小,D
D
的純度就越高。
假定特徵col
col
V
V
個可能的取值{a1,a2,...,aV}
\{a^1,a^2,...,a^V\}
,若使用col
col
來對樣本集D
D
劃分,則會劃分成V
V
個子集,其中以av
a^v
劃分出來的子集,記為Dv
D^v
,那麼資訊增益可以表示為
Gain(D,col)=Ent(D)Vv=1|Dv||D|Ent(Dv)
Gain(D,col)=Ent(D)-\sum_{v=1}^{V}\dfrac{|D^v|}{|D|}Ent(D^v)

其中,|D|
|D|
表示資料集中的樣本個數。
ID3就是使用資訊增益最大為準則來劃分資料集的,計算出每個col
col
下的Gain(D,col)
Gain(D,col)
,然後選擇值最大的那一個。
但這樣的做法為偏袒於屬性數量較多的特徵,即V
V
較大的col
col
,為解決這個問題,就有了C4.5演算法。

C4.5演算法

與ID3演算法不同,C4.5是利用增益率來進行劃分的,其定義如下:

Gain_ratio(D,col)=Gain(D,col)IV(col)
Gain\_ratio(D,col)=\dfrac{Gain(D,col)}{IV(col)}

其中
IV(col)=Vv=1|Dv||D|log2DvD
IV(col)=-\sum_{v=1}^{V}\dfrac{|D^v|}{|D|}log_2\dfrac{D^v}{D}

IV(col)
IV(col)
稱為特徵col
col
的固有值,特徵col
col
的屬性越多,IV(col)
IV(col)
的值就越大。
這樣一來就可以解決ID3的弊端,然而,值得注意的是,增益率準則對屬性值數目較少的特徵有所偏好,故C4.5並不是直接取增益率最大的特徵來劃分資料集的,而是採用了一種啟發式的方法:先從資料集中找出資訊增益高於平均水平的特徵,然後從中選擇增益率最高的。

CART演算法

CART則採用了基尼指數來劃分屬性,資料集D

D
的純度可以用基尼值來度量:

Gini(D)=nk1=1nk1!=k2pk1pk2=1nk=1p2k
Gini(D)=\sum_{k1=1}^{n}\sum_{k1!=k2}^{n}p_{k1}p_{k2}=1-\sum_{k=1}^{n}p_k^2

基尼值反應了從資料集中隨機抽取兩個樣本,其類標籤不一致的概率,因此基尼值越小,資料集的純度越高。
特徵col
col
的基尼指數定義為
Gini_index(D,col)=Vv=1|Dv|DGini(Dv)
Gini\_index(D,col)=\sum_{v=1}^{V}\dfrac{|D^v|}{D}Gini(D^v)

CART就是選擇劃分後基尼指數最小的特徵為最優劃分特徵的。

剪枝

剪枝是解決過擬合問題的重要手段,主要分為“預剪枝”和“後剪枝”兩種。在剪枝的時候我們要引入驗證集用來幫助我們判斷是否需要剪枝。

預剪枝

預剪枝是邊生成決策樹邊剪枝的一種做法。基於資訊增益準則或者增益率準則或者基尼指數,我們會選出最優的特徵來進行資料集的劃分,這個時候預剪枝做的就是判斷劃分前後,驗證集的精度是否會提高,如果提高的話就進行劃分,否則不進行劃分,也就是剪枝了。
預剪枝可以降低過擬合的風險,而且還顯著減少了決策樹的訓練時間開銷和測試時間開銷。
不過,預剪枝是一種貪心的做法,有些劃分可能在當前不能提高效能,但在之後的劃分中可以顯著提高決策樹的效能,所以預剪枝有著欠擬合的風險。

後剪枝

後剪枝是先生成一顆完整的決策樹,然後自底向上地進行剪枝,判斷某個分支結點替換為葉子結點後是否會提高驗證集的精度,可以提高則將分支結點替換為葉子結點,否則不替換。
後剪枝比預剪枝保留了更多的分支,欠擬合的風險很小,泛化效能也往往優於預剪枝。但後剪枝的訓練時間開銷要比預剪枝大得多。

連續值的處理

以上討論的都是針對離散特徵進行處理的,如果遇到了屬性為連續值的特徵,往往採用二分法進行處理。
給定樣本集D

D
和連續特徵col
col
,假定在col
col
上出現了m
m
個不同的取值,將這些值從小到大進行排序,即為{a1,a2,...,am}
\{a^1,a^2,...,a^m\}
。基於劃分點t
t
可將D
D
劃分為子集Dt
D_t^-
D+t
D_t^+
,其中Dt
D_t^-
中包含了在特徵col
col
上取值小於t
t
的樣本,而D+t
D_t^+
中包含了在特徵col
col
上取值不小於t
t
的樣本,t
t
的取值屬於集合

Ta={ai+ai+12|1im1}
T_a=\{\dfrac{a^i+a^{i+1}}{2}|1\leq i \leq m-1\}

之後可以基於不同的t
t
值進行資料集劃分,選擇使得資訊增益準則或者增益率準則最大,或者基尼指數最小的t
t
作為劃分點。

缺失值的處理

現實資料中往往會遇到不完成的樣本,即樣本的某些值有缺失,這時候如果放棄該樣本不用則太過浪費,所以一般做如下處理。
給定訓練集D

D
和特徵col
col
,令D^
\hat{D}
表示在特徵col
col
上沒有缺失值的樣本子集。我們給每個樣本x
x
賦予一個權重wx
w_x
,並定義

ρ=xD^wxxDwx
\rho=\dfrac{\sum_{x \in \hat{D}}w_x}{\sum_{x \in D}w_x}

不難看出,對於特徵col,ρ
\rho
表示無缺失值樣本所佔的比例。這樣一來,比如資訊增益就可以推廣為
Gain(D,col)=ρGain(D^,col)
Gain(D,col)=\rho \cdot Gain(\hat{D},col)

其它的準則也可以用類似的方法進行轉換。

結束語

以上是對決策樹部分知識的小結。如有不足,還請指正~

參考文獻

[1] 周志華. 機器學習 : = Machine learning[M]. 清華大學出版社, 2016.
[2] Peter Harrington. 機器學習實戰[M]. 人民郵電出版社, 2013.

相關文章