決策樹是一種常見的機器學習模型。形象地說,決策樹對應着咱們直觀上作決策的過程:經由一系列判斷,獲得最終決策。由此,咱們引出決策樹模型。算法
決策樹的跟節點包含所有樣例,葉節點則對應決策結果。其它每一個節點則對應一個屬性測試,每一個節點包含的樣本集合根據屬性測試結果被劃分到不一樣子節點中。決策樹學習的目的是,產生一棵泛化能力強,i.e.處理未見示例能力強的決策樹。機器學習
決策樹的基本流程遵循分治策略。基本算法的僞碼書中已經給出:post
從中看出,決策樹是一個遞歸過程,有三種情形會致使遞歸返回:性能
情形2和3的處理之不一樣在於:2利用當前節點的後驗分佈,而3則是把父節點的樣本分佈做爲當前節點的先驗分佈。學習
從書中給出的僞碼能夠看出,決策樹的關鍵在第8行,即如何選擇最優的劃分屬性。通常而言,隨着劃分的不斷進行,咱們但願決策樹的分支節點的「純度」(purity)愈來愈高,即包含的樣例儘量多得屬於同一類別。爲度量純度,咱們首先須要引入信息熵和信息增益的概念。測試
「信息熵」(information entropy)是度量信息純度的一個經常使用指標,計算的是爲了解這某條信息所付出的平均信息量。其定義以下:ui
假定當前樣本集合D中第k類樣本所佔的比例爲pk(k = 1,2,...,|Y|),則D的信息熵定義爲3d
對於底數之因此取2,通常的理解是,由於信息按照計算機表示採用的是二進制形式。由定義可推知,Ent(D)的值越小,則D的純度越高。orm
在此基礎上,給出「信息增益」(information gain)的定義:blog
假定離散屬性a有V種不一樣的取值{a1, a2, ..., aV},使用a對D進行劃分,則會產生V個分支節點,其中第v個分支節點包含D中屬性值爲av的樣本,記爲Dv,則用屬性a對樣本集D進行劃分所得到的信息增益定義爲
通常而言,信息增益越大,則意味着使用屬性a來進行劃分所得到的純度提高越大。因而,咱們即可以按信息增益來選擇決策樹的劃分屬性。相關的算法有著名的ID3算法[Quinlan, 1986]。
然而事實上,信息增益對可取值數目較多的屬性有所偏好。這種偏好可能會下降模型的泛化能力。爲減小這種偏好帶來的不利影響,著名的C4.5決策樹算法[Quinlan, 1993]不直接使用信息增益,而使用「增益率」(gain ratio)來劃分最優屬性。下面引入增益率的概念。
採用與信息增益相同的表達式,增益率定義爲
其中,
稱爲屬性a的「固有值」(intrinsic value)[Quinlan, 1993]。屬性a的可能取值數目越多(即V越大),則IV(a)的值一般會越大。
不過,增益率準則對於可取值數目少的屬性又有所偏好,所以,C4.5算法並非直接選擇增益率最大的候選劃分屬性,而使用一個啓發式算法:先從候選劃分屬性中找出信息增益高出平均水平的屬性,再從中選擇增益率最高的。
CART(Classification and Regression Tree)決策樹[Breiman et al., 1984]則使用「基尼係數」(Gini index)來選擇劃分屬性。數據集D的純度可用基尼係數度量以下:
直觀地講,Gini(D)反映了從數據集D中隨機抽取兩個樣本,其類別標記不一致的機率。所以,Gini(D)越小,D的純度越高。
在此基礎上,給出屬性a的基尼指數
因而,咱們能夠選擇基尼指數最小的屬性做爲最優劃分屬性。
決策樹的分支過多時,可能致使「過擬合」。剪枝(pruning)是決策樹學習算法中解決「過擬合」的主要手段。
決策樹的剪枝的基本策略主要有:
爲考察泛化能力,能夠預留一部分「驗證集」以進行模型評估。
值得注意的是,預剪枝雖然顯著減小了訓練時間和測試時間的開銷,但卻帶來了欠擬合的風險。由於有些分支可能在當前劃分沒法提高泛化性能,卻在後續劃分中能夠作到。然後剪枝決策樹在通常情形下欠擬合風險更小,且泛化性能每每優於預剪枝決策樹,不過代價是要付出大得多的訓練時間開銷。
順便一提,通過剪枝後,僅有一層劃分的決策樹,也被稱爲「決策樹樁」(decision stump)。
前面討論的是基於離散屬性生成的決策樹。然而在現實任務中,時常會遇到連續屬性,此時便不能直接根據連續屬性的值來劃分節點。須要對連續屬性離散化。
最簡單的策略是二分法(bi-partition)。給定樣本集D和連續屬性a,假定a在D上出現n個不一樣的取值,從小到大排序記爲{a1, a2, ..., an}。因而,對於連續屬性a,能夠考慮n-1個元素的候選劃分點集合Ta = {(ai+ai+1)/2 | 1 ≤ i ≤ n-1}。因而,在此基礎上,能夠對信息增益加以改造
現實任務中,也會遇到大量樣本出現缺失值的狀況。若是簡單放棄不完整樣本,顯然是對數據的極大浪費。爲充分利用數據,須要解決兩個問題:
給定訓練集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.每一個非葉節點都是一個形如的線性分類器。下面兩張圖給出了決策樹和多變量決策樹分類結果的對比。