4-決策樹

4.1 決策樹基本概念

顧名思義,決策樹是基於樹結構來進行決策的,在網上看到一個例子十分有趣,放在這裏正好合適。現想象一位捉急的母親想要給本身的女娃介紹一個男友,因而有了下面的對話:算法


女兒:多大年紀了?
  母親:26。
  女兒:長的帥不帥?
  母親:挺帥的。
  女兒:收入高不?
  母親:不算很高,中等狀況。
  女兒:是公務員不?
  母親:是,在稅務局上班呢。
  女兒:那好,我去見見。

這個女孩的挑剔過程就是一個典型的決策樹,即至關於經過年齡、長相、收入和是否公務員將男童鞋分爲兩個類別:見和不見。假設這個女孩對男人的要求是:30歲如下、長相中等以上而且是高收入者或中等以上收入的公務員,那麼使用下圖就能很好地表示女孩的決策邏輯(即一顆決策樹)。ide

這裏寫圖片描述

在上圖的決策樹中,決策過程的每一次斷定都是對某一屬性的「測試」,決策最終結論則對應最終的斷定結果。通常一顆決策樹包含:一個根節點、若干個內部節點和若干個葉子節點,易知:post

* 每一個非葉節點表示一個特徵屬性測試。
* 每一個分支表明這個特徵屬性在某個值域上的輸出。
* 每一個葉子節點存放一個類別。
* 每一個節點包含的樣本集合經過屬性測試被劃分到子節點中,根節點包含樣本全集。

葉結點對應於決策樹結果,其餘每一個結點則對應於一個屬性測試;每一個結點包含的樣本集合根據屬性測試的結果被劃分到子結點中;根結點包含樣本全集。從根結點到每一個葉結點的路徑對應了一個斷定測試序列。性能

決策樹的學習目的是爲了產生一棵泛化能力強,即處理未見示例能力強的決策樹,其基本流程遵循簡單且直觀的「分而治之」(divide-and-conquer)策略。決策樹的生成是一個遞歸過程。 學習

4.2 決策樹的構造

決策樹的構造是一個遞歸的過程,有三種情形會致使遞歸返回:(1) 當前結點包含的樣本全屬於同一類別,這時直接將該節點標記爲葉節點,並設爲相應的類別;(2) 當前屬性集爲空,或是全部樣本在全部屬性上取值相同,沒法劃分,這時將該節點標記爲葉節點,並將其類別設爲該節點所含樣本最多的類別;(3) 當前結點包含的樣本集合爲空,不能劃分,這時也將該節點標記爲葉節點,並將其類別設爲父節點中所含樣本最多的類別。算法的基本流程以下圖所示:測試

這裏寫圖片描述

能夠看出:決策樹學習的關鍵在於如何選擇劃分屬性,不一樣的劃分屬性得出不一樣的分支結構,從而影響整顆決策樹的性能。屬性劃分的目標是讓各個劃分出來的子節點儘量地「純」,即屬於同一類別。所以下面即是介紹量化純度的具體方法,決策樹最經常使用的算法有三種:ID3,C4.5和CART。3d

4.2.1 ID3算法

ID3算法使用信息增益爲準則來選擇劃分屬性,「信息熵」(information entropy)是度量樣本結合純度的經常使用指標,假定當前樣本集合D中第k類樣本所佔比例爲pk,則樣本集合D的信息熵定義爲:code

這裏寫圖片描述

假定經過屬性劃分樣本集D,產生了V個分支節點,v表示其中第v個分支節點,易知:分支節點包含的樣本數越多,表示該分支節點的影響力越大。故能夠計算出劃分後相比原始數據集D得到的「信息增益」(information gain)。orm

這裏寫圖片描述

信息增益越大,表示使用該屬性劃分樣本集D的效果越好,所以ID3算法在遞歸過程當中,每次選擇最大信息增益的屬性做爲當前的劃分屬性。blog

4.2.2 C4.5算法

ID3算法存在一個問題,就是偏向於取值數目較多的屬性,例如:若是存在一個惟一標識,這樣樣本集D將會被劃分爲|D|個分支,每一個分支只有一個樣本,這樣劃分後的信息熵爲零,十分純淨,可是對分類毫無用處。所以C4.5算法使用了「增益率」(gain ratio)來選擇劃分屬性,來避免這個問題帶來的困擾。首先使用ID3算法計算出信息增益高於平均水平的候選屬性,接着C4.5計算這些候選屬性的增益率,增益率定義爲:

這裏寫圖片描述

4.2.3 CART算法

CART決策樹使用「基尼指數」(Gini index)來選擇劃分屬性,基尼指數反映的是從樣本集D中隨機抽取兩個樣本,其類別標記不一致的機率,所以Gini(D)越小越好,基尼指數定義以下:

這裏寫圖片描述

進而,使用屬性α劃分後的基尼指數爲:

這裏寫圖片描述

4.3 剪枝處理

從決策樹的構造流程中咱們能夠直觀地看出:無論怎麼樣的訓練集,決策樹老是能很好地將各個類別分離開來,這時就會遇到以前提到過的問題:過擬合(overfitting),即太依賴於訓練樣本。剪枝(pruning)則是決策樹算法對付過擬合的主要手段,剪枝的策略有兩種以下:

* 預剪枝(prepruning):在構造的過程當中先評估,再考慮是否分支。
* 後剪枝(post-pruning):在構造好一顆完整的決策樹後,自底向上,評估分支的必要性。

 

評估指的是性能度量,即決策樹的泛化性能。以前提到:可使用測試集做爲學習器泛化性能的近似,所以能夠將數據集劃分爲訓練集和測試集。預剪枝表示在構造數的過程當中,對一個節點考慮是否分支時,首先計算決策樹不分支時在測試集上的性能,再計算分支以後的性能,若分支對性能沒有提高,則選擇不分支(即剪枝)。後剪枝則表示在構造好一顆完整的決策樹後,從最下面的節點開始,考慮該節點分支對模型的性能是否有提高,若無則剪枝,即將該節點標記爲葉子節點,類別標記爲其包含樣本最多的類別。

不剪枝處理的決策樹
預剪枝處理決策樹
後剪枝處理決策樹

上圖分別表示不剪枝處理的決策樹、預剪枝決策樹和後剪枝決策樹。預剪枝處理使得決策樹的不少分支被剪掉,所以大大下降了訓練時間開銷,同時下降了過擬合的風險,但另外一方面因爲剪枝同時剪掉了當前節點後續子節點的分支,所以預剪枝「貪心」的本質阻止了分支的展開,在必定程度上帶來了欠擬合的風險。然後剪枝則一般保留了更多的分支,所以採用後剪枝策略的決策樹性能每每優於預剪枝,但其自底向上遍歷了全部節點,並計算性能,訓練時間開銷相比預剪枝大大提高。

4.4 連續值與缺失值處理

對於連續值的屬性,若每一個取值做爲一個分支則顯得不可行,所以須要進行離散化處理,經常使用的方法爲二分法,基本思想爲:給定樣本集D與連續屬性α,二分法試圖找到一個劃分點t將樣本集D在屬性α上分爲≤t與>t。

* 首先將α的全部取值按升序排列,全部相鄰屬性的均值做爲候選劃分點(n-1個,n爲α全部的取值數目)。
* 計算每個劃分點劃分集合D(即劃分爲兩個分支)後的信息增益。
* 選擇最大信息增益的劃分點做爲最優劃分點。

這裏寫圖片描述

現實中常會遇到不完整的樣本,即某些屬性值缺失。有時若簡單採起剔除,則會形成大量的信息浪費,所以在屬性值缺失的狀況下須要解決兩個問題:(1)如何選擇劃分屬性。(2)給定劃分屬性,若某樣本在該屬性上缺失值,如何劃分到具體的分支上。假定爲樣本集中的每個樣本都賦予一個權重,根節點中的權重初始化爲1,則定義:

這裏寫圖片描述

對於(1):經過在樣本集D中選取在屬性α上沒有缺失值的樣本子集,計算在該樣本子集上的信息增益,最終的信息增益等於該樣本子集劃分後信息增益乘以樣本子集佔樣本集的比重。即:

這裏寫圖片描述

對於(2):若該樣本子集在屬性α上的值缺失,則將該樣本以不一樣的權重(即每一個分支所含樣本比例)劃入到全部分支節點中。該樣本在分支節點中的權重變爲:

這裏寫圖片描述

相關文章
相關標籤/搜索