1、基本流程
決策樹通常從一個最基本的問題出發,通過這個判定問題來對某個“屬性”進行“測試”,根據測試的結果來決定導出結論還是導出進一步的判定問題,當然,這個判定範圍是在上次決策結果的限定範圍之內的。
出發點一般稱爲根節點,其他的判定位置稱爲節點,得到的結果一般稱爲葉,不同的判定導致的不同走向稱爲枝,這樣,一顆完整的決策樹就呈現了出來。
決策樹學習的目的是爲了產生一顆泛化能力強,即處理未見示例能力強的決策樹,相關僞代碼如下圖:
很明顯,決策樹的生成是一個遞歸過程,有三種情況會導致遞歸返回。
2、劃分選擇
決策樹的決策關鍵在於枝點的最優屬性劃分,選擇的合理劃分的結果也相對更準確。
2.1 信息增益
信息熵是度量樣本集合純度(混亂度)最常用的一種指標。假定當前樣本集合D中第k類樣本所佔比例爲,則D的信息熵定義爲:
注意:此處約定p=0時,
Ent(D)的值越小,則D的純度越高。
假定離散屬性a有V個可能的取值,當使用其中某一個對樣本集D進行劃分時將產生V個分支節點,其中,第v個分支節點包含了D中所有在屬性a上取值的樣本,記爲,給分支節點賦予權重,這樣就可以計算出用屬性a對樣本集D進行劃分所得的信息增益:
.
因此,可以看出信息增益越大,則意味着使用屬性a來劃分所得的“純度提升”越大,故而選擇該屬性來劃分數據集是最佳選擇,著名的ID3算法就是這樣做的。
公式比較抽象,結合例子就能明白:
2.2 增益率
信息增益準則有一個明顯的缺點就是對可取值數目較多的屬性有所偏好,比如上面的西瓜數據集序號那一列,如果計算它的信息增益的話肯定是最大的,根據他來劃分顯然沒有什麼意義;著名的C4.5算法使用“增益率”來選擇最優劃分屬性,從而解決信息增益的缺陷。
其中 稱爲屬性a的“固有值”。
需要注意的是,增益率準則對可取值數目較少的屬性有所偏好,基於此,C4.5算法並不是直接選取增益率最大的屬性進行劃分,而是先從候選劃分屬性中找出信息增益高於平均水平的屬性,再從中選取增益率最高的。
2.3 基尼指數
CART決策樹(Classification and Regression Tree)是一種著名的決策樹學習算法,分類和迴歸任務都可以用,它使用“基尼指數”來選擇劃分屬性。
直觀來說,Gini(D)反映了從數據集D中隨機抽取兩個樣本,其類別標記不一致的概率。因此,Gini(D)越小,表明數據集D純度越高。
屬性a的基尼指數定義爲:
於是在候選屬性集合A中,選擇那個使得劃分後基尼指數最小的屬性作爲最優劃分屬性。
3、剪枝處理
剪枝是決策樹學習過程中對付“過擬合”的主要手段,決策樹剪枝的基本策略有“預剪枝”和“後剪枝”。預剪枝是在決策樹生產過程中,對每個節點在劃分前先進行估計,若當前節點的劃分不能帶來決策樹泛化性能的提升,則停止劃分並將當前節點標記爲葉節點;後剪枝則是先從訓練集生成一顆完整的決策樹,然後自底向上對非葉節點進行考察,若將該節點對應的子樹替換爲葉節點能帶來決策樹泛化性能的提升,則將該子樹替換爲葉節點。
如何判斷決策樹泛化性能是否提升?可以使用第二章介紹的性能評估方法,在這裏我們採用留出法來進行討論。將原始數據進行劃分如下:
採用信息增益準則對屬性進行劃分。
3.1 預剪枝
當採用某個屬性來對訓練集進行劃分時,這一步是否必要?即是否應該進行這個劃分?這時候,預剪枝要對劃分前後的泛化性能進行估計。相關圖示如下:
如該決策過程,節點1劃分後結果變好,應該進行劃分;節點2、節點3劃分後結果變差,應該禁止劃分。
從這個例子可以看到,預剪枝降低了過擬合的風險,減少了訓練時間開銷和測試時間開銷。但另一方面,有一些分支當前不能提升泛化性能,但在其基礎上進行的後續劃分卻有可能導致性能提升;因此,預剪枝會帶來一些欠擬合風險。
3.2 後剪枝
後剪枝則先生成一顆決策樹,自下而上如圖4.5的節點6開始進行是否有必要剪枝的判斷,如果將該分支節點及其子樹改爲葉節點後能提升驗證精度(泛化性能),那麼就進行剪枝。
從圖可以看出,後剪枝比預剪枝留下更多的分支。一般情況下,後剪枝決策樹的欠擬合風險很小,泛化性能往往優於預剪枝;但是由於是後剪枝,生成決策樹過後還要自下而上進行剪枝判斷,因此相比之下訓練時間開銷更大。
4、連續與缺失值
4.1 連續值處理
前面討論的數值都是離散屬性的,現實中常常遇到連續屬性,因此決策樹中如何使用連續屬性很有必要。由於連續值不像離散值可以單個取值,因此需要使用連續屬性離散化技術(如二分法)來將連續值進行分段。(這正是C4.5算法採用的機制)
給定樣本集D和連續屬性a,根據a將D從小到大排序,基於劃分點t可以將D劃分爲兩段,但如何選定劃分點t呢?首先我們選取一個劃分點集合T,集合點裏面的數據是相鄰屬性值a的中位點:
然後,我們就可以像離散屬性值一樣來考察這些劃分點,再選取最優的劃分點來進行樣本集合的劃分:
Gain(D,a,t)就是樣本D基於劃分點t二分後得到的劃分點集合的信息增益,因此可以選擇使Gain(D,a,t)最大化的劃分點t,這樣就可以將連續值轉化爲離散值進行劃分。
注意:與離散屬性不同的是,若當前節點劃分屬性爲連續屬性,該屬性還可作爲其後代節點的劃分屬性。
4.2 缺失值處理
有時候出於成本,隱私保護、錄入差錯等原因,總造成樣本的某些屬性值缺失,但如若去除有缺失的數據,往往有可能導致樣本數量大幅減少,而且造成了信息浪費,因此有必要使用含有缺失屬性值的樣本進行訓練學習。
使用含有缺失值的樣本需要解決兩個問題:1. 如何在屬性值缺失的情況下進行劃分屬性選擇?2. 給定劃分屬性,若樣本在該屬性上的值缺失,如何對樣本進行劃分?
先介紹概念及公式,後面用例子來進行理解;
給定訓練集D及屬性a,令表示D在屬性a上沒有缺失值的樣本子集,那麼對於問題1我們就可以使用來判定屬性a的優劣。
其中:
表示該屬性下有值的數據佔總數據的比例,相當於是給子集加一個權重;則是在當前屬性下去除缺失值後各個不同取值所佔的比例。
對於問題2我們可以這樣處理,當這個值缺失我們不知道劃分到哪個子節點中去的時候,可以將它以不同的概率劃入到各個子節點中,概率值爲當前屬性下各屬性值的比例。
C4.5算法就是使用的上面這種方案。
看下面的例子加以理解:
5、多變量決策樹
先討論一下前面介紹的單變量決策樹,每次只對某一個屬性進行劃分,如果將數據放在座標軸中,那麼對樣本分類即尋找不同樣本之間的邊界,單變量決策樹就是尋找與座標軸平行的能對樣本進行分類的邊界;對於簡單問題,這種方式還可行,但當問題很複雜時,需要很多段的劃分才能獲得較好的分類,這時決策樹較複雜,訓練開銷較大。
多變量決策樹則是通過將每次只用一個屬性劃分的方式改爲多個從而將平行於座標軸的劃分邊界變得傾斜,從而使得劃分次數降低,決策樹模型大大簡化。