1. 程式人生 > >決策樹系列之一決策樹的入門教程

決策樹系列之一決策樹的入門教程

決策樹

(Decisiontree)

一、決策樹的概念

決策樹(decision tree)又稱為分類樹(classification tree),決策樹是最為廣泛的歸納推理演算法之一,處理類別型或連續型變數的分類預測問題,可以用圖形和if-then的規則表示模型,可讀性較高。決策樹模型透過不斷地劃分資料,使依賴變數的差別最大,最終目的是將資料分類到不同的組織或不同的分枝,在依賴變數的值上建立最強的歸類。

分類樹的目標是針對類別應變數加以預測或解釋反應結果,就具體本身而論,此模組分析技術與判別分析、區集分析、無母數統計,與非線性估計所提供的功能是一樣的,分類樹的彈性,使得資料本身更加具吸引人的分析選項,但並不意謂許多傳統方法就會被排除在外。實際應用上,當資料本身符合傳統方法的理論條件與分配假說,這些方法或許是較佳的,但是站在探索資料技術的角度或者當傳統方法的設定條件不足,分類樹對於研究者來說,是較佳的建議技巧。

決策樹是一種監督式的學習方法,產生一種類似流程圖的樹結構。決策樹對資料進行處理是利用歸納演算法產生分類規則和決策樹,再對新資料進行預測分析。樹的終端節點”葉子節點(leaf nodes)”,表示分類結果的類別(class),每個內部節點表示一個變數的測試,分枝(branch)為測試輸出,代表變數的一個可能數值。為達到分類目的,變數值在資料上測試,每一條路徑代表一個分類規則。

決策樹是用來處理分類問題,適用目標變數屬於類別型的變數,目前也已擴充套件到可以處理連續型變數,如CART模型;惟不同的決策樹演算法,對於資料型別有不同的需求和限制。

決策樹在Data Mining領域應用非常廣泛,尤其在分類問題上是很有效的方法。除具備圖形化分析結果易於瞭解的優點外,決策樹具有以下優點:

1.         決策樹模型可以用圖形或規則表示,而且這些規則容易解釋和理解。容易使用,而且很有效。

2.         可以處理連續型或類別型的變數。以最大資訊增益選擇分割變數,模型顯示變數的相對重要性。

3.         面對大的資料集也可以處理得很好,此外因為樹的大小和資料庫大小無關,計算量較小。當有很多變數入模型時,決策樹仍然可以建構。

二、決策樹的學習

決策樹的建構的主要步驟有三:第一是選擇適當的演算法訓練樣本建構決策樹,第二是適當的修剪決策樹,第三則是從決策樹中萃取知識規則。

(一)決策樹的分割

決策樹是通過遞迴分割(recursive partitioning)建立而成,遞迴分割是一種把資料分割成不同小的部分的迭代過程。建構決策樹的歸納演算法:

1.         將訓練樣本的原始資料放入決策樹的樹根。

2.         將原始資料分成兩組,一部分為訓練組資料,另依部分為測試組資料。

3.         使用訓練樣本來建立決策樹,在每一個內部節點依據資訊理論(information theory)來評估選擇哪一個屬性繼續做分割的依據,又稱為節點分割(splittingnode)。

4.         使用測試資料來進行決策樹修剪,修減到決策樹的每個分類都只有一個節點,以提升預測能力與速度。也就是經過節點分割後,判斷這些內部節點是否為樹葉節點,如果不是,則以新內部節點為分枝的樹根來建立新的次分枝。

5.         將第1至第4步驟不斷遞迴,一直到所有內部節點都是樹葉節點為止。當決策樹完分類後,可將每個分枝的樹葉節點萃取出知識規則。

如果有以下情況發生,決策樹將停止分割:

1.         該群資料的每一筆資料都已經歸類到同一類別。

2.         該群資料已經沒有辦法再找到新的屬性來進行節點分割。

3.         該群資料已經沒有任何尚未處理的資料。

一般來說,決策樹分類的正確性有賴於資料來源的多寡,若是透過龐大資料建構的決策樹其預測和分類結果往往是符合期望。

決策樹學習主要利用資訊理論中的資訊增益(information gain),尋找資料集中有最大資訊量的變數,建立資料的一個節點,再根據變數的不同值建立樹的分枝,每個分枝子集中重複建樹的下層結果和分枝的過程,一直到完成建立整株決策樹。決策樹的每一條路徑代表一個分類規則,與其它分類模型相比,決策樹的最大優勢在於模型圖形化,讓使用者容易瞭解,模型解釋也非常簡單而容易。

在樹的每個節點上,使用資訊增益選擇測試的變數,資訊增益是用來衡量給定變數區分訓練樣本的能力,選擇最高資訊增益或最大熵(entropy)簡化的變數,將之視為當前節點的分割變數,該變數促使需要分類的樣本資訊量最小,而且反映了最小隨機性或不純性(impurity)(Han and Kamber,2001)。

若某一事件發生的概率是p,令此事件發生後所得的資訊量為Ip),若p=1,則Ip)=0,因為某一事件一定會發生,因此該事件發生不能提供任何資訊。反之,如果某一事件發生的概率很小,不確定性愈大,則該事件發生帶來的資訊很多,因此Ip)為遞減函式,並定義。

給定資料集S,假設類別變數A有m個不同的類別。利用變數A將資料集分為m個子集,其中表示在S中包含數值中的樣本。對應的m種可能發生概率為,因此第i種結果的資訊量為,則稱該給定樣本分類所得的平均資訊為熵,熵是測量一個隨機變數不確定性的測量標準,可以用來測量訓練資料集內純度(purity)的標準。熵的函式表示如下式:

其中是任意樣本屬於的概率,對數函式以2為底,因為資訊用二進位制編碼。

變數分類訓練資料集的能力,可以利用資訊增益來測量。演算法計算每個變數的資訊增益,具有最高資訊增益的變數選為給定集合S的分割變數,產生一個節點,同時以該變數為標記,對每個變數值產生分枝,以此劃分樣本。

(二)決策樹的剪枝

決策樹學習可能遭遇模型過度配適(overfitting)的問題,過度配適是指模型過度訓練,導致模型記住的不是訓練集的一般性,反而是訓練集的區域性特性。模型過度配適,將導致模型預測能力不準確,一旦將訓練後的模型運用到新資料,將導致錯誤預測。因此,完整的決策樹構造過程,除了決策樹的建構外,尚且應該包含樹剪枝(treepruning),解決和避免模型過度配適問題。

當決策樹產生時,因為資料中的噪音或離群值,許多分枝反映的是訓練資料中的異常情形,樹剪枝就是在處理這些過度配適的問題。樹剪枝通常使用統計測量值剪去最不可靠的分枝,可用的統計測量有卡方值或資訊增益等,如此可以加速分類結果的產生,同時也提高測試資料能夠正確分類的能力。

樹剪枝有兩種方法:先剪枝(prepruning)和後剪枝(postpruning)。先剪枝是通過提前停止樹的構造來對樹剪枝,一旦停止分類,節點就成為樹葉,該樹葉可能持有子集樣本中次數最高的類別。在構造決策樹時,卡方值和資訊增益等測量值可以用來評估分類的質量,如果在一個節點劃分樣本,將導致低於預先定義閾值的分裂,則給定子集的進一步劃分將停止。選取適當的閾值是很困難的,較高的閾值可能導致過分簡化的樹,但是較低的閾值可能使得樹的簡化太少。後剪枝是由已經完全生長的樹剪去分枝,通過刪減節點的分枝剪掉樹節點,最底下沒有剪掉的節點成為樹葉,並使用先前劃分次數最多的類別作標記。對於樹中每個非樹葉節點,演算法計算剪去該節點上的子樹可能出現的期望錯誤率。再使用每個分枝的錯誤率,結合每個分枝觀察的權重評估,計算不對該節點剪枝的期望錯誤率。如果剪去該節點導致較高的期望錯誤率,則保留該子樹,否則剪去該子樹。產生一組逐漸剪枝後的樹,使用一個獨立的測試集評估每棵樹的準確率,就能得到具有最小期望錯誤率的決策樹。也可以交叉使用先剪枝和後剪枝形成組合式,後剪枝所需的計算比先剪枝多,但通常產生較可靠的樹(Hanand Kamber,2001)。

三、決策樹演算法

完成資料處理階段後,需要選擇一個合適的決策樹模型演算法。最常用的決策樹模型演算法是CART(classification and regression trees),代表分類樹和迴歸樹,是一種廣泛應用於樹結構產生分類和迴歸模型的過程。其它演算法有CHAID(Chi-squareautomatic interaction detector ),還有Quinlan提出的ID3(iterative dichotomizer 3),以及後續的版本C4.5和C5.0,其中C4.5和C5.0在計算機領域中廣泛應用。大多數的決策樹模型演算法是由核心演算法改變而來,利用由上向下的貪心演算法(greedyalgorithm)搜尋所有可能的決策樹空間,這種演算法是ID3演算法和C4.5演算法的基礎。

決策樹在處理分類問題時,資料型態可以是類別資料和連續性資料,除了CART演算法可以處理離散型資料和連續性資料之外,ID3、C4.5、C5.0和CHAID都只能處理離散型資料。不同演算法其分割規則和修剪樹規則也有差異,比較如下:

演算法

分割規則

修剪規則

ID3

熵、Gain ratio

錯誤預估率

C4.5/ C5.0

Gain ratio

錯誤預估率

CART

Gain ratio

錯誤預估率

CHAID

卡方檢定

不用修剪

(一)ID3和C4.5/C5.0

決策樹的演算法基本上是一種貪心演算法,是由上至下的逐次搜尋方式,漸次產生決策樹模型結構。Quinlan於1979年提出ID3演算法,ID3演算法是著名的決策樹歸納演算法;演算法C4.5和C5.0是ID3演算法的修訂版本。ID3演算法是以資訊理論為基礎,企圖最小化變數間比較的次數,其基本策略是選擇具有最高資訊增益的變數為分割變數(splittingvariable),ID3演算法必須將所有變數轉換為類別型變數。使用熵來量化資訊,測量不確定性,如果所有資料屬於同一類別,將不存在不確定性,此時的熵為0。ID3演算法的基本步驟包含以下幾點(Hanand Kamber,2001):

1.         模型由代表訓練樣本開始,樣本屬於同一類別,則節點成為樹葉,並使用該類別的標籤。

2.         如果樣本不屬於同一類別,演算法使用資訊增益選擇將樣本最佳分類的變數,該變數成為該節點的分割變數。對分割變數的每個已知值,產生一個分枝,並以此分割樣本。

3.         演算法使用的過程,逐次形成每個分割的樣本決策樹。如果一個變量出現在一個節點上,就不必在後續分割時考慮該變數。

4.         當給定節點的所有樣本屬於同一類別,或者沒有剩餘變數可用來進一步分割樣本,此時分割的動作就可以停止,完成決策樹的建構。

C4.5演算法是ID3演算法的修訂版,使用訓練樣本估計每個規則的準確率,如此可能導致對規則準確率的樂觀估計,C4.5使用一種悲觀估計來補償偏差,作為選擇也可以使用一組獨立於訓練樣本的測試樣本來評估準確性。

C4.5演算法是先建構一棵完整的決策樹,再針對每一個內部節點依使用者定義的錯誤預估率(Predictederror rate)來修剪決策樹。資訊增益愈大,表示經過變數分割後的不純度愈小,降低不確定性。ID3演算法就是依序尋找能得到最大資訊增益的變數,並以此作為分隔變數。利用資訊增益來選取分割變數,容易產生過度配適的問題,C4.5演算法採用GainRatio來加以改進方法,選取有最大GainRatio的分割變數作為準則,避免ID3演算法過度配適的問題。

C5.0演算法則是C4.5演算法的修訂版,適用在處理大資料集,在軟體上的計算速度比較快,佔用的記憶體資源較少。C5.0演算法的一個主要改進是採用Boosting方式提高模型準確率,又稱為BoostingTrees。除此之外,C5.0演算法允許設定錯誤分類的成本,依據不同的分類錯誤設定不同成本,所以C5.0演算法可以不選擇錯誤率最小的模型,而改選錯誤成本最小的模型。

(二)CART 演算法

CART演算法由Friedman等人提出,1980年代以來就開始發展,是基於樹結構產生分類和迴歸模型的過程,是一種產生二元樹的技術。CART與C4.5/C5.0演算法的最大相異之處是其在每一個節點上都是採用二分法,也就是一次只能夠有兩個子節點,C4.5/5.0則在每一個節點上可以產生不同數量的分枝。

CART模型適用於目標變數為連續型和類別型的變數,如果目標變數是類別型變數,則可以使用分類樹(classificationtrees),目標變數是連續型的,則可以採用迴歸樹(regressiontrees)。CART演算法也是一種貪心演算法,由上而下擴充套件樹結構,再逐漸地修剪樹結構。CART樹結構是由資料得來,並不是預先確定的,每一個節點都採用二擇一的方式測試。和ID3演算法一樣,CART模型使用熵作為選擇最好分割變數的測量準則。如果樹太大會導致過度配適,此時可以利用剪枝來解決此問題,然而樹太小卻能得到好的預測能力。CART每次只使用一個變數建立樹,因此它可以處理大量的變數。

(三)CHAID演算法

Perreault和Barksdale兩人於1980年提出CHAID(Chi-square automatic interaction detector)分析方法,CHAID是由AID演變而來的。

CHAID是利用卡方檢定預測兩個變數是否需要合併,如果可以產生最大類別差異的預測變數,將成為節點的分割變數。CHAID會防止資料被過度套用並讓決策樹停止繼續分割,依據的衡量標準是計算節點中類別的P值大小,以此決定決策樹是否繼續分割,所以不需要作樹剪枝。

CHAID利用Bonferroni的調整卡方值作為分割樣本的依據,用卡方檢定使同質的樣本單位歸為同一群,逐次搜尋而完成分割的過程。CHAID是利用一種半層次(semihierarchical)逐次搜尋方法來進行分割的過程。對每一個解釋變數的類別的反應水平進行成對的合併,然後分割,以求得各解釋變數水平的最少分群數目。一旦每一個解釋變數的分群數目確定之後,就可以利用顯著性最大的解釋變數將原始樣本予以分割成若干小群體。同時每一小群體又可視為一個”母群體(parent group)”,依同樣的程式進行必要的分割,此一分割過程一直進行到分群結果無顯著差異,或是分群后的小群體所含的樣本單位已過少,以致於無法做有意義的概率估計時為止。CHAID的分析流程在每一分割步驟,可以將資料分割成三個或三個以上的部分。

四、分析例項

醫護人員壓力分類樹:資料511筆。

應變數:壓力來源水平(高、中、低)。

自變數:

婚姻狀況1.未婚,2.已婚,3.其它)

教育程度1.職校、2.五專、3.二專、4.三專、5.大學、6.研究所以上)

目前職稱1.約僱實習護士、2.約僱護士、3.護士、4.護理師)

目前工作單位性質1.內外科病房、2.加護病房、3.急診、4.門診、5.精神科病房、6.婦產科病房、7.兒科病房、8.手術室、9.恢復室、10.洗腎室)

決策樹最後分割結果:

在上圖的標示中,可以清楚地檢視分類總結資訊,五個分層與六個最終節點。最終節點,或者所謂的最終葉片(Leaf),代表著案例經分類後的最終結果,沒有其餘的決策分支可往下分層。圖的本身,將最終節點的外圍以紅線標示,尚未完成決策分枝的節點或分層則以黑色實線標示。樹形圖的延伸是以最上方的根源節點或決策節點(Root Node or Decision Node)開始,以預測變數為分割依據,逐步將案例進行分類。圖中其中資訊,節點的編號標示於左上方;起始時,所有的案例會被指派到此一根源節點中,並且「試驗性」地分類為「低」壓力來源水平,標示於右上方,在這個步驟中,所有案例分類為「低」壓力來源水平,乃是取決於「「低」壓力來源水平的比例較「中」、「高」壓力反應水平多。在節點中,以柱形圖表示該分類的案例數;在整張圖中,分別就分類圖型以文字與線條格式表示。

在圖的下半段中,根源節點第一次分割為兩個新的節點,在兩層節點之間,程式會將造成此次分割以文字表示(預測變數或分類函式)。這個例子的分類說明如下,

1.         目前工作單位性質為「恢復室、婦產科病房、精神科病房、門診」時,案例會被指派到節點2(低壓力來源水平)中,反之會被指派到以節點3中,產生第一個最終節點;

2.         節點2與節點3的上方,98與413分別代表案例的指派數目;

3.         第二次分割自節點3開始,分類依據為目前職稱為「約僱實習護士」時,案例將被指派到節點4(中壓力來源水平,33個案例),反之則落入節點5中(380個案例)。

4.         第三次分割自節點5開始,分類依據為目前工作單位性質為「手術室、兒科病房」時,案例將被指派到節點6(低壓力來源水平、65個案例),反之則落入節點7中(315個案例)。

5.         第四次分割自節點7開始,分類依據為教育程度為「職校、二專」時,案例將被指派到節點8(139個案例),反之則落入節點9中(低壓力來源水平、176個案例)。

6.         第五次分割自節點8開始,分類依據為目前職稱為「護士」時,案例將被指派到節點10(中壓力來源水平、114個案例),反之則落入節點11中(低壓力來源水平、25個案例)。

樹形圖以簡單易懂的方式,呈現所有分類過程中的資訊,也可以協助使用者在最短的時間之內瞭解分析的結果。