決策樹是一種常見的機器學習模型。形象地說,決策樹對應着我們直觀上做決策的過程:經由一系列判斷,得到最終決策。由此,我們引出決策樹模型。
一、決策樹的基本流程
決策樹的跟節點包含全部樣例,葉節點則對應決策結果。其它每個節點則對應一個屬性測試,每個節點包含的樣本集合根據屬性測試結果被划分到不同子節點中。決策樹學習的目的是,產生一棵泛化能力強,i.e.處理未見示例能力強的決策樹。
決策樹的基本流程遵循分治策略。基本算法的偽碼書中已經給出:

從中看出,決策樹是一個遞歸過程,有三種情形會導致遞歸返回:
- 當前節點包含的樣本全屬於同一類別,無需划分;
- 當前屬性集為空,或所有樣本在所有屬性上取值相同,無法划分。此情形下,將當前節點標記為葉節點,並將其類別設為包含樣本最多的類別。
- 當前節點包含的樣本集合為空,不能划分。此情形下,標記當前節點為葉節點,並將其類別設為父節點所含樣例最多的類別。
情形2和3的處理之不同在於:2利用當前節點的后驗分布,而3則是把父節點的樣本分布作為當前節點的先驗分布。
二、划分選擇
從書中給出的偽碼可以看出,決策樹的關鍵在第8行,即如何選擇最優的划分屬性。一般而言,隨着划分的不斷進行,我們希望決策樹的分支節點的“純度”(purity)越來越高,即包含的樣例盡可能多得屬於同一類別。為度量純度,我們首先需要引入信息熵和信息增益的概念。
2.1 信息增益
“信息熵”(information entropy)是度量信息純度的一個常用指標,計算的是為了解這某條信息所付出的平均信息量。其定義如下:
假定當前樣本集合D中第k類樣本所占的比例為pk(k = 1,2,...,|Y|),則D的信息熵定義為

對於底數之所以取2,一般的理解是,因為信息按照計算機表示采用的是二進制形式。由定義可推知,Ent(D)的值越小,則D的純度越高。
在此基礎上,給出“信息增益”(information gain)的定義:
假定離散屬性a有V種不同的取值{a1, a2, ..., aV},使用a對D進行划分,則會產生V個分支節點,其中第v個分支節點包含D中屬性值為av的樣本,記為Dv,則用屬性a對樣本集D進行划分所獲得的信息增益定義為

一般而言,信息增益越大,則意味着使用屬性a來進行划分所獲得的純度提升越大。於是,我們便可以按信息增益來選擇決策樹的划分屬性。相關的算法有著名的ID3算法[Quinlan, 1986]。
然而事實上,信息增益對可取值數目較多的屬性有所偏好。這種偏好可能會降低模型的泛化能力。為減少這種偏好帶來的不利影響,著名的C4.5決策樹算法[Quinlan, 1993]不直接使用信息增益,而使用“增益率”(gain ratio)來划分最優屬性。下面引入增益率的概念。
2.2 增益率
采用與信息增益相同的表達式,增益率定義為

其中,

稱為屬性a的“固有值”(intrinsic value)[Quinlan, 1993]。屬性a的可能取值數目越多(即V越大),則IV(a)的值通常會越大。
不過,增益率准則對於可取值數目少的屬性又有所偏好,因此,C4.5算法並不是直接選擇增益率最大的候選划分屬性,而使用一個啟發式算法:先從候選划分屬性中找出信息增益高出平均水平的屬性,再從中選擇增益率最高的。
2.3 基尼系數
CART(Classification and Regression Tree)決策樹[Breiman et al., 1984]則使用“基尼系數”(Gini index)來選擇划分屬性。數據集D的純度可用基尼系數度量如下:

直觀地講,Gini(D)反映了從數據集D中隨機抽取兩個樣本,其類別標記不一致的概率。因此,Gini(D)越小,D的純度越高。
在此基礎上,給出屬性a的基尼指數

於是,我們可以選擇基尼指數最小的屬性作為最優划分屬性。
三、決策樹的剪枝處理
決策樹的分支過多時,可能導致“過擬合”。剪枝(pruning)是決策樹學習算法中解決“過擬合”的主要手段。
決策樹的剪枝的基本策略主要有:
- 預剪枝(prepruning):在決策樹生成過程中,對每個節點在划分前先進行估計,若當前節點不能提升決策樹的泛化性能,則停止划分並將當前節點標記為葉節點;
- 后剪枝(postpruning):先從訓練集生成一棵決策樹,然后自底向上考察非葉節點,若將該節點替換為葉節點能提升決策樹的泛化性能,則將該節點替換為葉子節點。
為考察泛化能力,可以預留一部分“驗證集”以進行模型評估。
值得注意的是,預剪枝雖然顯著減少了訓練時間和測試時間的開銷,但卻帶來了欠擬合的風險。因為有些分支可能在當前划分無法提升泛化性能,卻在后續划分中可以做到。而后剪枝決策樹在一般情形下欠擬合風險更小,且泛化性能往往優於預剪枝決策樹,不過代價是要付出大得多的訓練時間開銷。
順便一提,經過剪枝后,僅有一層划分的決策樹,也被稱為“決策樹樁”(decision stump)。
四、連續與缺失值
4.1 連續值處理
前面討論的是基於離散屬性生成的決策樹。然而在現實任務中,時常會遇到連續屬性,此時便不能直接根據連續屬性的值來划分節點。需要對連續屬性離散化。
最簡單的策略是二分法(bi-partition)。給定樣本集D和連續屬性a,假定a在D上出現n個不同的取值,從小到大排序記為{a1, a2, ..., an}。於是,對於連續屬性a,可以考慮n-1個元素的候選划分點集合Ta = {(ai+ai+1)/2 | 1 ≤ i ≤ n-1}。於是,在此基礎上,可以對信息增益加以改造

4.2 缺失值處理
現實任務中,也會遇到大量樣本出現缺失值的情況。如果簡單放棄不完整樣本,顯然是對數據的極大浪費。為充分利用數據,需要解決兩個問題:
- 如何在屬性值缺失的情況下進行划分屬性選擇?
- 給定划分屬性,若樣本在該屬性上缺失,如何對樣本進行划分?
給定訓練集D和屬性a,令
表示D中在屬性a上沒有缺失的樣本子集。對於問題1,顯然僅可以根據
來判斷屬性a的優劣。假定屬性a有V個可取的值{a1, a2, ..., aV},令
表示
中在屬性a上取值為av的樣本子集,
表示
中屬於第k類(k=1,2,...,|Y|)的樣本子集。則顯然有


假定為每個樣本x賦以權重ωx,並定義



顯然,
,
。
基於上述定義,可以將信息增益公式推廣為

對於問題2,若樣本x在屬性a上的取值已知,則划入對應子節點,並保持樣本權值即可;若取值未知,則同時划入所有子節點,且樣本權值在屬性值av對應的子節點中調整為
。
五、多變量決策樹
將每個屬性視為坐標空間的一個坐標軸,則由d個屬性描述的樣本,對應於d維空間中的一個數據點。對樣本分類,意味着在此坐標空間中尋找不容類樣本間的分類邊界。而決策樹所形成的分類邊界 有一個明顯的特點:軸平行(axis-parallel),即其分類邊界由若干個與軸平行的分段組成。這一特點的好處在於有較好的可解釋性,但為了近似比較復雜的分類邊界,會導致決策樹過於復雜。為解決此問題,引入多變量決策樹。
多變量決策樹(multivariate decision tree)就能實現用斜線划分、甚至更復雜的划分。在此類決策樹中,非葉節點不再僅是某個屬性,而是對屬性的線性組合進行測試,i.e.每個非葉節點都是一個形如
的線性分類器。下面兩張圖給出了決策樹和多變量決策樹分類結果的對比。


