《數據挖掘導論》- 讀書筆記(5)- 分類:基本概念、決策樹與模型

第4章  分類:基本概念、決策樹與模型評估

  分類任務就是確定對象屬於哪個預定義的目標類。分類問題是一個普遍存在的問題,有許多不同的應用。例如:根據電子郵件的標題和內容檢查出垃圾郵件,根據核磁共振掃描的結果區分腫瘤是惡性的還是良性的,根據星系的形狀對它們進行分析。

  本章介紹分類的基本概念,討論諸如模型的過分擬合等關鍵問題,並提供評估和比較分類技術性能的方法。儘管本章主要關注一種稱作決策樹歸納的技術,但是本章討論的大部分內容也適用於其他的分類技術。

4.1 預備知識

  分類任務的輸入數據是記錄的集合。每條記錄也稱爲實例或樣例,用元組(x,y)表示,其中x是屬性的集合,而y是一個特殊的屬性,指出樣例的類標號(也稱爲分類屬性或目標屬性)。下表列出一個樣本數據集,用來將脊椎動物分成以下幾類:哺乳類、鳥類、魚類、爬行類和兩棲類。屬性集致命脊椎動物的性質,如提問、表皮覆蓋、反之後代的方式、飛行的能力和在水中生存的能力等。儘管下表中的屬性主要是離散的,但是屬性集也可以包含連續特徵。另一方面,類標號卻必須是離散屬性,這正是區別分類與迴歸(regression)的關鍵特徵。迴歸是一種預測建模任務,其中目標屬性y是連續的。

  

  定義4.1 分類(classification)  分類任務就是通過學習得到一個目標函數(target function),把每個屬性集x映射到一個預先定義的類標號y

  目標函數也稱爲分類模型(classification model)。分類模型可以用於以下目的。

  描述性建模  分類模型可以作爲解釋性的工具,用於區分不同類中的對象。例如對於生物學家或者其他人,一個描述性模型有助於概括上表中的數據,並說明哪些特徵決定一種脊椎動物是哺乳類、爬行類、鳥類、魚類或兩棲類。

  預測性建模  分類模型還可以用於預測未知記錄的類標號。如下圖所示,分類模型可以看做一個黑箱,當給定未知記錄的屬性集上的值時,它自動地賦予未知樣本類標號。例如,假設有一種叫做毒蜥的生物,其特徵如下:

  

 

可以根據使用4-1中的數據集建立的分類模型來確定該生物所屬的類。

  

 

  分類技術非常適合預測或描述二元或標稱類型的數據集。對於序數分類(例如把人類分成高收入、中等收入或低收入組),分類技術不太有效。因爲分類技術部考慮隱含在目標類中的序關係。其他形式的聯繫,如子類與超類的關係也被忽略。本章餘下的部分只考慮二元的或標稱類型的類標號。

4.2 解決分類問題的一般方法

  分類技術是一種根據輸入數據集簡歷分類模型的系統方法。分類法的例子包括決策樹分類法、基於規則的分類法、神經網絡、支持向量機和樸素貝葉斯分類法。這些技術都使用一種學習算法(learning algorithm)確定分類模型,該模型能夠很好地擬合輸入數據中類標號和屬性之間的聯繫。學習算法得到的模型不僅要很好地擬合輸入數據,還要能夠正確地預測未知樣本的類標號。因此,訓練算法的主要目標就是建立具有很好的泛化能力模型,即建立能夠準確地預測未知樣本類標號的模型。

  下圖展示解決分類問題的一般方法。首先,需要一個訓練集(training set),它由類標號已知的記錄組成,使用訓練集簡歷分類模型,該模型隨後將運用於檢驗集(test set),檢驗集由類標號未知的記錄組成。

  

 

  分類模型的性能根據模型正確和錯誤預測的檢驗記錄進行評估,這些計數存放在稱作混淆矩陣(confusion matrix)的表格中。表4-2描述二元分類問題的混淆矩陣。表中每個表項fij表示實際類標號爲i但被預測爲類j的記錄數。例如,f01代表原本屬於類0單被誤分類爲1的記錄數。按照混淆矩陣中的表項,被分類模型正確預測的樣本總數是(f11+f00),而被錯誤預測的樣本總數是(f10+f01)。

  

 

  雖然混淆矩陣通過衡量分類模型性能的信息,但是用一個數據彙總這些信息更便於比較不同模型的性能。爲實現這一目的,可以使用性能度量(performance metric),如準確率(accuracy),其定義如下:

  

 

  同樣,分類模型的性能可以用錯誤率(error rate)來表示,其定義如下:

  

  大多數分類算法都在尋求這樣一些模型,當把他們應用於檢驗集時具有最高的準確率,或者等價地,具有最低的錯誤率。在4.5節再次討論模型的評估問題。

4.3 決策樹歸納

  本節介紹決策樹(decision tree)分類法,這是一種簡單但卻廣泛使用的分類技術。

4.3.1 決策樹的工作原理

  爲解決決策樹分類的工作原理,考慮上一節中介紹的脊椎動物分類問題的簡化版本。這裏我們不把脊椎動物分爲五個不同的物種,而只考慮兩個類別:哺乳類動物和非哺乳類動物。

  假設科學家發現一個新的物種,怎麼判斷它是哺乳動物還是非哺乳動物呢?一種方法是針對物種的特徵提出一系列問題,第一個問題可能是,該物種是冷血動物還是恆溫動物。如果它是冷血的,則該物種肯定不是哺乳動物;否則它或者是鳥類,或者是某種哺乳動物。如果它是恆溫的,需要接着問:該物種是由雌性產崽進行繁殖的嗎?如果是,則它肯定爲哺乳動物,否則它有可能是非哺乳動物。

  通過一處一系列精心構思的關於檢驗記錄屬性的問題,可以解決分類問題。每當一個問題得到答案,後續的問題將隨之而來,知道我們得到記錄的類標號。這一些列的問題和這些問題的可能回答可以組織成決策樹的形式,決策樹是一種由節點和有向邊組成的層次結構。圖4-4顯示哺乳類動物分類問題的決策樹,樹中包含三種節點。

  根結點(root node),它沒有入變,但有零條或多條出邊。

  內部結點(internal node),恰有一條入邊和兩條或多條出邊。

  葉結點(leaf node),恰有一條入邊,但沒有出邊。

  在決策樹中,每個葉結點都賦予一個類標號。非終結點(包括根節點和內部結點)包含屬性測試條件,用以區分不同特性的記錄。例如,在下圖中,在根節點處,使用提問這個屬性把冷血脊椎動物和恆溫脊椎動物區別開來。因爲所有的冷血脊椎動物都是非哺乳動物,所以用一個類稱號爲非哺乳動物的葉節點作爲根節點的右子女。如果脊椎動物的提問是恆溫的,則接下來用胎生這個屬性來區分哺乳動物與其他恆溫動物(主要是鳥類)。

  

  一旦構造了決策樹,對檢驗記錄進行分類就相當容易了。從樹的根節點開始,將測試條件用於檢驗記錄,根據測試結果選擇適當的分支。沿着該分支或者到達另一個內部結點,使用新的測試條件,或者到達一個葉節點。到達葉節點之後,葉節點的類稱號就被賦值給該檢驗記錄。例如,下圖顯示應用決策樹預測火烈鳥的類標號所經過的路徑,路徑終止於類稱號爲非哺乳動物的葉節點。

  

4.3.2 如何建立決策樹

  原則上講,對於給定的屬性集,可以構造的決策樹的數目達指數級。儘管某些決策樹比其他決策樹更準確,但是由於搜索空間是指數規模的,找出最佳決策樹在計算上是不可行的。儘管如此,人們還是開發了一些有效的算法,能夠在合理的時間內構造出具有一定準確率的次最優決策樹。這些算法通常都採用貪心策略,在選擇劃分數據的屬性時,採取一系列局部最優決策來構造決策樹。Hunt算法是一種這樣的算法。Hunt算法是許多決策樹算法的基礎,包括ID3、C4.5和CART。本節討論Hunt算法並解釋它的一些設計問題。

  1. Hunt算法

  在Hunt算法中,通過將訓練記錄相繼劃分成較純的子集,以遞歸方式建立決策樹。設Dt是與節點t相關的訓練記錄集,而y={y1,y2,...,yc}是類標號,Hunt算法的遞歸定義如下:

  (1)如果Dt中所有記錄都屬於用一個類yt,則t是葉節點,用yt標記。

  (2)如果Dt中包含屬於多個類的記錄,則選擇一個屬性測試條件(attribute test condition),將記錄劃分成較小的子集。對於測試條件的每個輸出,創建一個子女節點,並根據測試結果將Dt中的記錄分佈到子女節點中。然後對於每個子女節點,遞歸地調用該算法。

  爲了解釋該算法如何執行,考慮如下問題:預測貸款申請者是會按時歸還貸款,還是會拖欠貸款。對於這個問題,訓練數據集可以通過考察以前貸款者的貸款記錄來構造。下圖所示的例子中,每條記錄都包含貸款者的個人信息,以及貸款者是否拖欠貸款的類標號。

  

 

  該分類問題的初始決策樹只有一個節點,類標號爲“拖欠貸款者=否”,意味着大多數貸款者都按時歸還貸款。然而,該樹需要進一步細化,因爲根節點包含兩個類的記錄。根據“有房者”測試條件,這些記錄被劃分爲較小的子集,如圖(b)所示。選取屬性測試條件的理由稍後討論,目前,我們假定此處這樣選擇是劃分數據的最優標準。接下來,對根節點的每個子女遞歸地調用Hunt算法。從上圖給出的訓練數據集可以看出,有房的貸款者都能按時償還了貸款,因此,根節點的左子女爲葉節點,標記爲“拖欠貸款者=否”。對於右子女,我們需要繼續遞歸地調用Hunt算法,知道所有的記錄都屬於同一類爲止。每次遞歸調用所形成的決策樹顯示在圖(c)圖(d)中。

 

  如果屬性值的每種組合都在訓練數據集中出現,並且每種組合都具有唯一的類標號,則Hunt算法是有效的。但是對於大多數實際情況,這些假設太苛刻了。因此,需要附加的條件來處理以下的情況。

  (1)算法的第二步鎖創建的子女節點可能爲空,即不存在與這些結點相關聯的記錄。如果沒有一個訓練記錄包含與這樣的節點相關聯的屬性值組合,這種情形就可能發生。這時,該節點稱爲葉節點,類標號爲其父節點上訓練記錄中的多數類。

  (2)在第二步,如果與Dt相關聯的所有記錄都具有相同的屬性值,則不可能進一步劃分這些記錄。在這種情況下,該結點爲葉結點,其標號與該結點相關聯的訓練記錄中的多數類。

  2. 決策樹歸納的設計問題

  決策樹歸納的學習算法必須解決下面的兩個問題:  

  (1)如何分裂訓練記錄?  樹增長過程的每個遞歸步都必須選擇一個屬性測試條件,將記錄劃分成較小的子集。爲了實現這個步驟,算法必須提供爲不同類型的的屬性指定測試條件的方法,並且提供評估每種測試條件的客觀度量。

  (2)如何停止分裂過程?  需要有結束條件,以終止決策樹的生長過程。一個可能的策略是分列二結點,直到所有的記錄都屬於同一個類,或者所有的記錄都具有相同的屬性值。儘管兩個結束條件對於結束決策樹歸納算法都是允許的,但是還可以使用其他的標準提前終止樹的生長過程。提前終止的優點將在4.4.5節討論。

4.3.3 表示屬性測試條件的方法

  決策樹歸納算法必須爲不同類型的屬性提供表示屬性測試條件和其對應輸出的方法。

  二元屬性  二元屬性的測試條件產生兩個可能的輸出,如下圖所示:

  

  標稱屬性  由於標稱屬性有多個屬性值,它的測試條件可以用兩種方法表示,對於多路劃分,其輸出數取決於該屬性值的個數。例如,如果屬性婚姻狀況有三個不同的屬性值---單身、已婚、離異,則它的測試條件就會產生一個三路劃分。另一方面,某些決策樹算法(如CART)只產生二元化分,它們考慮創建k個屬性值的二元化分的所有2^(k-1)-1種方法。圖(b)顯示了把婚姻狀況的屬性值劃分爲兩個子集的三種不同的分組方法。

  

  序數屬性  序數屬性也可以產生二元或多路劃分,只要不違背序數屬性值的有序性,就可以對屬性值進行分組。下圖顯示了按照屬性襯衣尺碼劃分訓練記錄的不同的方法。圖(a)和圖(b)中的分組保持了屬性值間的序關係,而圖(c)所示的分組則違反了這一性質,因爲它把小號和大號分爲一組,把中號和加大號放在另一組。

  

 

 

  連續屬性  對於連續屬性來說,測試條件可以是具有二元輸出的比較冊書(A<v)或(A≥v),也可以是具有形如輸出的範圍查詢。下圖顯示了這些方法的差別。對於二元劃分,決策樹算法必須考慮所有可能的劃分點v,並從中選擇產生最佳劃分的點。對於多路劃分,算法必須考慮所有可能的連續值區間。可以採用2.3.6節介紹的離散化的策略,離散化之後,每個離散化區間賦予一個新的序數值,只要保持有序性,相鄰的值還可以聚集成較寬的區間。

  

4.3.4 選擇最佳劃分的度量

  有很多度量可以用來確定劃分記錄的最佳方法,這些度量用劃分謙和劃分後記錄的類分佈定義。

  設p(i|t)表示給定結點t中屬於類i的記錄所佔的比例,有時,我們省略結點t,直接Pi表示該比例。在兩類問題中,任意結點的類分佈都可以記錄(p0,p1),其中p1=1-p0。例如,考慮下圖中的測試條件,劃分前的類分佈時(0.5,0.5),因爲來自每個類的記錄數相等。如果使用性別屬性來劃分數據,則子女結點的類分佈分別爲(0.4,0.4)和(0.4,0.6),雖然劃分後兩個類的分佈不再平衡,但是子女結點仍然包含兩個類的記錄;按照第二個屬性車型進行劃分,將得到純度更高的劃分。

  

  選擇最佳劃分的度量通常是根據劃分後子女結點不純性的程度。不純的程度越低,類分佈就越傾斜。例如,類分佈爲(0,1)的結點具有零不純性,而均衡分佈(0.5,0.5)的結點具有最高的不純性。不純性度量的例子包括:

  

  其中c是類的個數,並且在計算熵時,Olog20=0。

  下圖顯示了二分類問題不純性度量值的比較,p表示屬於其中一個類的記錄所佔的比例。從圖中可以看出,三種方法都在類分佈均衡時(即當p=0.5時)達到最大值,而當所有記錄都屬於同一個類時(p等於1或0)達到最小值。下面我們給出三種不純性度量方法的計算實例。

  

  

  從上面的例子及上圖可以看出,不同的不純性度量是一致的。根據計算,結點N1具有最低的不純性度量值,接下來依次是N2,N3,雖然結果是一致的,但是作爲測試條件的屬性選擇仍然因不純性度量的選擇而異。

  爲了確定測試條件的效果,我們需要比較父結點(劃分前)的不純程度和子女結點(劃分後)的不純程度,它們的差越大,測試條件的效果就越好,增益是一種可以用來確定劃分效果的標準:

  

  

   其中,I(.)是給定結點的不純性度量,N是父結點上的記錄總數,k是屬性值的個數N(v=vj)是與子女結點vj相關聯的記錄個數。決策樹歸納算法通常選擇最大化增益的測試條件,因爲對所有的測試條件來說,I(parent)是一個不變的值,所以最大化增益等價於最小化子女結點的不純性度量的加權平均值。最後,當選擇熵(entropy)作爲上述公式的不純性度量時,熵的差就是所謂信息增益(information gain)

  1. 二元屬性的劃分

  

  考慮4-14中的圖表,假設有兩種方法將數據劃分成較小的子集。劃分前,Gini指標等於0.5,因爲屬於兩個類的記錄的個數相等。如果選擇屬性A劃分數據,節點N1的Gini指標等於0.486,而N2的Gini指標等於0.480,派生結點的Gini指標的加權平均爲(7/12)*0.4898+(5/12)*0.480=0.486。類似的,我們可以計算屬性B的Gini指標甲醛平均值是0.371。因爲屬性B具有更小的Gini指標,它比屬性A更可取。

  2. 標稱屬性的劃分

  正如前面提到的,標稱屬性可以產生二元劃分或多路劃分。如圖4-15所示。二元劃分的Gini指標與計算與二元屬性類型。對於車型屬性第一種二元分組,{運動,豪華}的Gini指標是0.4922,而{家用}的Gini指標是0.3750。該分組的Gini指標加權平均是:

  16/20*0.4922 + 4/20*0.3750=0.468

  

  類似的,對第二種二元分組{運動}和{家用,豪華},Gini指標加權平均是0.167。第二種分組的Gini指標值相對較低,因爲其對應的子集的純度高的多。

  對於多路劃分,需要計算每個屬性值Gini指標。Gini({家用{)=0.375,Gini({運動})=0,Gini({豪華})=0.219,多路劃分的總Gini指標等於:

  4/20*0.375 + 8/20*0 + 8/20*0.219 = 0.163

  多路劃分的Gini指標比兩個二元劃分都小,這一結果並不奇怪,因爲二元劃分實際上合併了多路劃分的某些輸出,自然降低了子集的純度。

  

 

  3. 連續屬性的劃分

  考慮圖4-16所示的例子,其中測試條件“年收入≤v”用來劃分拖欠貸款分類問題的訓練數據,用窮舉法確定v的值,將N各記錄中所有的屬性值都作爲候選劃分點。對每個候選v,都要掃描一次數據集,統計年收入大於和小於v的記錄數,然後計算每個候選的Gini的指標,並從中選擇具有最小值的候選劃分點。這種方法的計算代價是昂貴的,因爲對每個候選劃分點計算Gini指標需要O(N)次操作,由於有N個候選,總的計算複雜度爲O(N^2)。爲了降低計算複雜度,按照年收入將訓練記錄排序,所需要的時間爲O(NlogN),從兩個相鄰的排過序的屬性值中選擇中間值作爲候選劃分點,得到候選劃分點55,56,72等。無論如何,與窮舉方法不同,在計算候選劃分點的Gini指標時,不需要考察所有N個記錄。

  

  對第一個候選v=55,沒有年收入小於55K的記錄,所以年收入<55k的派生結點的Gini指標是0;另一方面,年收入大於或等於55K的樣本記錄數目分別爲3(類Yes)和7(類No),這樣,該結點的Gini指標是0.420.該候選劃分的總Gini指標等於0*0+1*0.420=0.420。

  ..........

  4. 增益率

  熵和Gini指標等不純性度量去向有利於具有大量不同值的屬性。圖4-12顯示了三種可供選擇的測試條件。第一個測試條件性別與第二個測試條件車型相比,容易看出車型視乎提供了更好的劃分數據的方法,因爲它產生更純的派生結點。而然,如果將這兩個條件與顧客ID相比,後者看起來產生更純的劃分,但顧客ID卻不是一個有預測性的屬性,因爲每個樣本在該屬性上的值都是唯一的。即使在不太極端情形下,也不會希望產生大量輸出的測試條件,因爲與每個劃分相關聯的記錄太少,以致不能做出可靠的預測。

  解決該問題的策略有兩種。第一種策略是限制測試條件只能是二元劃分,CART這樣的決策樹算法採用的就是這種策略;另一種策略是修改評估劃分的標準,把屬性測試條件產生的輸出數也考慮進去。例如,決策樹算法C4.5採用稱作增益率(gain ratio)的劃分標準來評估劃分。增益率定義如下:

  

其中,劃分信息,而k是劃分的總數。例如,如果每個屬性值具有相同的記錄數,則,而信息劃分等於Log2K。這說明如果某個屬性產生了大量的劃分,它的劃分信息將會很大,從而降低了增益率。

4.3.5 決策樹歸納算法

  算法4.1給出了稱作TreeGrowth的決策樹歸納算法的框架。該算法的輸入是訓練記錄集E合屬性集F。算法遞歸地選擇最優的屬性來劃分數據(步驟7),並擴展樹的葉結點(步驟11和步驟12),知道滿足結束條件(步驟1)。算法的細節如下:

  (1)函數createdNode()爲決策樹建立新結點。決策樹的節點或者是一個測試條件,記作mode.test_cond,或者是一個類標號,記作node.label。

  (2)函數find_best_split()確定應當選擇哪個屬性作爲劃分訓練記錄的測試條件。如前所述,測試條件的選擇取決於使用哪種不純性度量來評估劃分,一些廣泛使用的度量包括熵、Gini指標和X2統計量。

  (3)函數Classify()爲葉結點確定類標號。對於每個葉結點t,令P(i|t)表示該節點上屬於類i的訓練記錄所佔的比例,在大多數情況下,都將葉結點指派到具有多數記錄的類:

  leaf.label=argmax p(i|t)

其中,操作argmax返回最大化p(i|t)的參數值i。p(i|t)除了提供確定葉結點類標號所需要的信息之外,還可以用來估計分配到葉結點t的記錄屬於類i的概率。5.7節討論如何使用這種概率估計,在不同的代價函數下,確定決策樹的性能。

  (4)函數stopping_cond()通過檢查是否所有的記錄都屬於同一個類,或者都具有相同額屬性值,決定是否終止決策樹的增長。終止遞歸函數的另一種方法是,檢查記錄數是否小於某個最小閾值。

  

  建立決策樹之後,可以進行樹剪枝(tree-pruning),以減小決策樹的規模。決策樹過大容易受所謂過分擬合(overfitting)現象的影響。通過修建初始決策樹的分支,剪枝有助於提高決策樹的泛化能力。過分擬合和樹剪枝問題將在4.4更詳細的討論。

4.3.6 例子,Web機器人檢測

  web使用挖掘就是利用數據挖掘的技術,從web訪問日誌中提取有用的模式。這些模式能夠提示站點訪問者的一些有趣特性:例如,一個人頻繁地訪問某個web站點,並打開介紹同一產品的網頁,如果商家提供一些打折或者免費運輸的優惠,這個人很可能會購買這種商品。

  在web使用挖掘中,重要的是要區分用戶訪問和web機器人(web robot)訪問。web機器人(又稱爲web爬蟲)是一個軟件程序,它可以自動跟蹤嵌入網頁中的超鏈接,定位和獲取Internet上的信息。這些程序安裝在搜索引擎的入口,收集索引網頁必須的文檔。在應用web挖掘技術分析人類的瀏覽習慣之前,必須過濾掉web機器人的訪問。

  本節介紹如何使用決策樹分類法來區分正常的用戶訪問和由web機器人產生的訪問。輸入數據取自web服務器日誌,它的一個樣本顯式在圖4-17a中,每行對應於web客戶(用戶或web機器人)的一個頁面訪問請求。web日誌記錄的字段包括客戶端的IP地址、請求的時間戳、請求訪問的文檔的網址、文檔的大小、客戶的身份(通過用戶代理字段獲得)。web會話是客戶在一次網站訪問期間發出的請求序列,每個web會話都可以用有向圖來建模,其中節點對應於網頁,而有向邊對應於連接網頁的超鏈,圖4-17b顯示web服務器日誌中第一次web繪畫的圖形表示。

  

  爲了對web會話進行分類,需要構造描述每次會話特性的特徵。圖4-17c顯示了web機器人檢測任務使用的一些特徵。顯著的特徵有遍歷的深度和寬度。深度確定請求頁面的最大距離,其中距離用自網站入口點的超鏈數量度量。例如,假設主頁http://www.cs.umn.edu/~kumar的深度爲0,則http://www.cs.umn.edu/~kumar/MINDS/MINDS_papers.htm的深度爲2。根據圖4-17b中的web圖,第一次會話的深度等於2。寬度屬性度量web圖的寬度。例如,圖4-17b中顯示的web會話的寬度等於2。

  用於分類的數據集包含2916個記錄,web機器人(類1)和正常用戶(類2)會話的個數相等,10%的數據用於訓練,而90%的數據用於檢驗。生成的決策樹模型顯示在圖4-18中,該決策樹在訓練集上的錯誤率爲3.8%,在檢驗集上的錯誤率爲5.3%。

  該模型表明可以從以下4個方面區分出web機器人和正常用戶。

  (1)web機器人的訪問傾向於寬而淺,而正常用戶訪問比較集中(窄而深)。

  (2)與正常的用戶不同,web機器人很少訪問與web文檔相關的圖片頁。

  (3)web機器人的會話的長度趨於較長,包含了大量請求頁面。

  (4)web機器人更可能對相同的文檔發出重複的請求,因爲正常用戶訪問的網頁常常會被瀏覽器保存。

  

4.3.7 決策樹歸納的特點

  下面是對決策樹歸納算法重要特點的總結。

  (1)決策樹歸納是一種構建分類模型的非參數方法。換句話說,它不要求任何先驗假設,不假定類和其他屬性服從一定的概率分佈。

  (2)找到最佳的決策樹是NP完全問題。許多決策樹算法都採取啓發式的方法指導對假設空間的搜索。例如,4.3.5節中介紹的算法就採用了一種貪心的、自頂向下的遞歸劃分策略建立決策樹。

  (3)已開發的構建決策樹技術不需要昂貴的計算代價,即使訓練集非常大,也可以快速建立模型。此外,決策樹一旦建立,位置樣本分類非常快,最壞情況下的時間複雜度是O(w),其中w是樹的最大深度。

  (4)決策樹相對容易解釋,特別是小型的決策樹,在很多簡單的數據集上,決策樹的準確率也可以與其他分類算法相媲美。

  (5)決策樹是學習離散值函數的典型代表。然而,它不能很好地推廣到某些特定的布爾問題。一個著名的例子是奇偶函數,當奇數(偶數)個布爾屬性爲真時其值爲0(1)。對這樣的函數準確建模需要一顆具有2d個結點的滿決策樹,其中d是布爾屬性的個數。

  (6)決策樹算法對於噪聲的干擾具有相當好的魯棒性,採用避免過分擬合的方法之後尤其如此。避免過分擬合的方法將在4.4節介紹。

  (7)冗餘屬性不會對決策樹的準確率造成不利的影響。一個屬性如果在數據中它與另一個屬性是強相關的,那麼它是冗餘的。在兩個冗餘的屬性中,如果已經選擇其中一個作爲用於劃分的屬性,則另一個將被忽略。然而,如果數據集中含有很多不相關的屬性(即對分類任務沒有用的屬性),則某些不相關屬性可能在樹的構造過程中偶然被選中,導致決策樹過大龐大。通過在預處理階段刪除不相關屬性,特徵選擇技術能夠版主提高決策樹的準確率。將在4.4.3節考察不相關屬性過多的問題。

  (8)由於大多數的決策樹算法都採用自頂向下的遞歸劃分方法,因此沿着樹向下,記錄會越來越少。在葉結點,記錄可能太少,對於葉結點代表的類,不能做出具有統計意義的判決,這就是所謂的數據碎片(data fragmentation)問題。解決該問題的一種可行的方法是,當樣本小於某個特定閾值時停止分裂。

  (9)子樹可能在決策樹中重複多次,如圖4-19所示,這使得決策樹過於複雜,並且可能更難解釋。當決策樹的每個內部結點都依賴單個屬性測試條件時,就會出現這種情形。由於大多數的決策樹算法都採用分治劃分策略,因此在屬性空間的不同部分可以使用相同的測試條件,從而導致子樹重複問題。

  

  (10)迄今爲止,本章介紹的測試條件每次都只涉及一個屬性。這樣,可以將決策樹的生長過程看成劃分屬性空間爲不相交的區域的過程,直到每個區域都只包含同一類的記錄(見圖4-20)。兩個不同類的相鄰區域之間的邊界稱作決策邊界(decision boundary)。由於測試條件只涉及單個屬性,因此決策邊界是直線,即平行於“座標軸”,這就限制了決策樹對連續屬性之間複雜關係建模的表達能力。圖4-21顯示了一個數據集,使用一次只涉及一個屬性的測試條件的決策樹算法很難有效地對它進行分類。

  

  

  斜決策樹(oblique decision tree)可以克服以上的侷限,因爲它允許測試條件涉及多個屬性。圖4-21中的數據集可以很容易地用斜決策樹表示,該斜決策樹只有一個結點,其測試條件爲:

  x+y<1

儘管這種技術具有更強的表達能力,並且能夠產生更緊湊的決策樹,但是爲給定的結點找出最佳測試條件的計算可能是相當複雜的。

  構造歸納(constructive induction)提供另一種將數據劃分成齊次非矩形區域的方法(見2.3.5節),該方法創建符合屬性,代表已有屬性的算術或邏輯組合。新屬性提供了更好的類區分能力,並在決策樹歸納之前就增廣到數據集中。與斜決策樹不同,構造歸納不需要昂貴的花費,因爲在構造決策樹之前,它只需要一次性地確定屬性的所有相關組合。相比之下,在擴展每個內部結點時,斜決策樹都需要動態地確定正確的屬性組合。然而,構造歸納會產生冗餘的屬性,因爲新創建的屬性是已有屬性的組合。

  (11)研究表明不純性度量方法的選擇對決策樹算法的性能的影響很小,這是因爲許多度量方法相互之間都是一致的,如圖4-13所示,實際上,樹剪枝對最終決策樹的影響比不純性度量選擇的影響更大。

4.4 模型的過分擬合

  分類模型的誤差大致分爲兩種:訓練誤差(training error)泛化誤差(generalization error)。訓練誤差也稱再代入誤差(resubstitution error)或表現誤差(apparent error),是在訓練記錄上誤分類樣本比例,而泛化誤差是模型在未知記錄上的期望誤差。

  回顧4.2節,一個好的分類模型不僅要能夠很好地擬合訓練數據,而且對未知樣本也要能準確地分類。換句話說,一個好的分類模型必須具有低訓練誤差和低泛化誤差。這一點非常重要,因爲對訓練數據擬合度過高的模型,其泛化誤差可能比具有較高訓練誤差的模型高。這種情況就是所謂的模型過分擬合。

  二維數據過分擬合的例子 關於過分擬合問題的具體例子,考慮圖4-22所示的二維數據集。數據集中的數據點屬於兩個類,分別標記爲類“0”和類“+”,類“0”的數據點由三個高斯分佈混合產生,而類“+”的數據點用一個均勻分佈產生。數據集中,總共有1200個數據點是屬於類“0”,1800個屬於類“+”,其中30%的點用於訓練,剩下的70%用於檢驗。對訓練集使用以Gini指標作爲不純性度量的決策樹分類。爲了研究過分擬合的影響,對初始的、完全生長的決策樹進行了不同程度的剪枝。圖4-23顯示了決策樹的訓練誤差和檢驗誤差。

  

 

   注意,當決策樹很小時,訓練和檢驗誤差都很大,這種情況稱作模型擬合不足(model underfitting)。出現擬合不足的原因是模型尚未學習到數據的真實結構,因此,模型在訓練集合檢驗集上的性能都很差。隨着決策樹中結點數的增加,模型的訓練誤差和檢驗誤差都會隨之降低。然而,一旦樹的規模變得太大,即使訓練誤差還在繼續降低,但是檢驗誤差開始增大,這種現象稱爲模型過分擬合(model overfitting)

  

  爲了理解過分擬合現象,注意模型的訓練誤差隨模型的複雜度增加而降低。例如,可以擴展樹的葉結點,直到它完全擬合訓練誤差爲0,但是檢驗誤差可能很大,因爲該樹可能包含這樣的結點,它們偶然地擬合訓練數據中某些噪聲。這些結點降低了決策樹的性能,因爲它們不能很好的泛化到檢驗樣本。圖4-24是兩顆具有不同結點數的決策樹,結點樹少的決策樹具有較高的訓練誤差,但是與更復雜的樹相比,它具有較低的檢驗誤差。

  

  過分擬合與擬合不足是兩種與模型複雜度有關的異常現象。本節餘下的部分將繼續討論造成模型過分擬合的一些潛在因素。

4.4.1 噪聲導致的過分擬合

  考慮表4-3和表4-4中哺乳動物的分類問題的訓練數據集合和檢驗數據集合。十個訓練記錄中有兩個被錯誤地標記:蝙蝠和鯨被錯誤地標記爲非哺乳類動物,而不是哺乳動物。

  

  完全擬合訓練數據的決策樹實現在圖4-25a中。雖然該樹的訓練誤差爲0,但它在檢驗數據上的誤差高達30%。人和海豚都被誤分類爲非哺乳類動物,因爲它們在屬性體溫、胎生、4條腿上的屬性值與訓練數據中被錯誤標記的樣本屬性值相同。另一方面,針鼴是個例外,其檢驗記錄中的類標號與訓練集中相似的記錄的類標號相反。例外導致的錯誤是不可避免的,它設定了分類器可以達到的最小錯誤率。

  

  相反,圖4-25b中決策樹M2具有較低的檢驗誤差(10%),儘管它的訓練誤差較高(20%)。很明顯,決策樹M1過分擬合了訓練數據,因爲存在一個更簡單、但在檢驗數據集上具有更低檢驗誤差的模型。模型M1中的屬性測試條件4條腳具有欺騙性,因爲它擬合了無標記的訓練記錄,導致了對檢驗集中記錄的五分類。

4.4.2 缺乏代表性樣本導致的過分擬合

  根據少量訓練記錄做出分類決策的模型也容易受過分擬合的影響。由於訓練數據缺乏具有代表性的樣本,在沒有多少訓練記錄的情況下,學習算法仍然繼續細化模型就會產生這樣的模型。下面舉例說明。

  考慮表4-5中的五個訓練記錄,表中所有的記錄都是正確標記的,對應的決策樹在圖4-26中。儘管它的訓練誤差爲0,但是它的檢驗誤差卻高達30%。

  

  人、大象和海豚都被誤分類,因爲決策樹把很溫但不冬眠的脊柱動物劃分爲非哺乳動物。決策樹做出這樣的分類決策是因爲只有一個訓練記錄具有這樣的特徵。這個例子清楚地表明,當決策樹的葉結點沒有足夠的代表性樣本時,很可能做出錯誤的預測。

4.4.3 過分擬合與多重比較過程

  模型的過分擬合可能出現在使用所謂的多重比較過程(multiple comparison procedure)的學習算法中。爲了理解多重比較過程,考慮預測未來10個交易日股市是升還是降的任務。如果股票分析家簡單地隨機猜測,則對任意交易日預測正確的概率是0.5,然而,10次猜測至少正確預測8次的概率是。

  

這看起來不大可能。

  假設我們想從50個股票分析家中選擇一個投資顧問,策略是選擇在未來的10個交易日做出最多正確預測的分析家。該策略的缺點是,即使所有的分析家都用隨機猜測做出預測,至少有一個分析家做出8次正確預測的概率是:

  

這相當高,儘管每個分析家做出8次正確預測的概率很低。但是把他們放在一起,找到一個能夠做出準確的預測。

  ......

4.4.4 泛化誤差估計

  雖然過分擬合的主要原因一直是個爭議的話題,大家還是普遍同意模型的複雜度對模型的過分擬合有影響。如圖4-23所示。問題是,如何確定正確的模型複雜度?理想的複雜度是能產生最低泛化誤差的模型的複雜度。然而,在簡歷模型的過程中,學習算法只能訪問訓練數據集(見圖4-3),對檢驗數據集,它一無所知,因此也不知道所建立的決策樹在未知記錄上的性能。我們所能做的就是估計決策樹的泛化誤差。本節提供一些估計泛化誤差的方法。

  1. 使用再代入估計

  再代入估計方法假設訓練數據集可以很好地代表整體數據,因而,可以使用訓練誤差(又稱再代入誤差)提供對泛化誤差的樂觀估計。在這樣的前提下,決策樹歸納算法簡單地選擇產生最低訓練誤差的模型作爲最終的模型。然而,訓練誤差通常是泛化誤差的一種很差的估計。

  例4.1 考慮圖4-27中的二叉決策樹,假設兩棵決策樹都由相同的訓練數據產生,並且都根據每個葉結點多數類做出分類決策。注意,左邊的樹TL複雜一些,它擴展了右邊決策樹TR的某些葉結點。左決策樹的訓練誤差是e(TL)=4/24=0.167,而右決策樹的訓練誤差是e(TR)=6/24=0.25。根據再代入估計,左決策樹要優於右決策樹。

   

  2. 結合模型複雜度

  如前所述,模型越是複雜,出現過分擬合的機率就越高。因此,我們更喜歡採用較爲簡單的模型。這種策略與應用衆所周知的奧卡姆剃刀(Occam's razor)或節儉原則(principle of parsimony)一致。

  定義4.2 奧卡姆剃刀:給定兩個具有相同泛化誤差的模型,較簡單的模型比較複雜的模型更可取。

  奧卡姆剃刀是很直觀的原則,因爲複雜模型中的附加成分很大程度上是完全對偶然的擬合。用愛因斯坦的話來說,“所有事情都應該儘可能的簡單,但不是簡化。”下面我們介紹兩種把模型複雜度與分類模型評估結合在一起的方法。

  悲觀誤差評估 第一種方法明確地把使用訓練誤差與模型複雜度罰項的和計算泛化誤差。結果泛化誤差可以看做模型的悲觀誤差估計(pessimistic error estimate)。例如,設n(t)是結點t分類的訓練數據記錄,e(t)是被誤分類的記錄數。決策樹T的悲觀誤差估計eg(T)可以用下式計算:

  

其中,k是決策樹的葉結點數,e(T)決策樹的總訓練誤差,Nt是訓練記錄數,Ω(ti)是每個結點ti對應的罰項。

  例4.2 考慮圖4-27中的二叉決策樹,如果罰項等於0.5,左邊的決策樹的悲觀誤差估計爲:

  

  右邊的決策樹的悲觀誤差估計爲:

  

  這樣,左邊的決策樹比右邊的決策樹具有更好的悲觀誤差估計。對二叉樹來說,0.5的罰項意味着只要至少能夠改善一個訓練記錄的分類,結點就應當擴展。因爲擴展一個結點等價於總誤差增加0.5,代價比犯一個訓練錯誤小。

  如果對於所有的結點t,Ω(t)=1,左邊的決策樹的北瓜誤差估計爲eg(TL)=11/24=0.458,右邊的決策樹的悲觀誤差估計爲eg(TR)=10/24=0.417。因此,右邊的決策樹比左邊的決策樹具有更好的悲觀錯誤率。這樣,除非能夠減少一個以上訓練記錄的誤分類,否則結點不應當擴展。

  最小描述長度原則 另一種結合模型複雜度的方法是基於稱作最小描述長度(minimum description lenght,MDL)原則的信息論方法。爲了解釋說明該原則,考慮圖4-28中的例子。在該例子中,A和B都是已知屬性x值的給定記錄集。另外,A知道每個記錄的確切類標號,而B卻不知道這些信息。B可以通過要求A順序傳送類標號而獲得每個記錄的分類。一條消息需要θ(n)比特的信息,其中n是記錄的總數。

  

  另一種可能是,A決定建立一個分類模型,概括x和y之間的關係。在傳送給B前,模型用壓縮形式編碼。如果模型的準確率是100%,那麼傳輸的代價就等於模型編碼的代價。否則,A還必須傳輸哪些記錄被模型錯誤分類信息。傳輸的總代價是:

  

其中,等式右邊的第一項是模型編碼的開銷,而第二項是五分類記錄編碼的開銷。根據MDL原則,我們尋找最小化開銷函數的模型。

  3. 估計統計上節

  ......

  4. 使用確認集

  在該方法中,不是用訓練集泛化誤差,而是把原始的訓練數據集分爲兩個較小的子集,一個子集用於訓練,而另一個稱作確認集,用於估計泛化誤差。典型的做法是,保留2/3的訓練數據集來建立模型,剩餘的1/3用作誤差估計。

  該方法常常用於通過參數控制獲得具有不同複雜度模型的分類技術。通過調整學習算法中的參數(如決策樹中剪枝的程度),知道學習算法產生的模型在確認集上達到最低的錯誤率。可以估計最佳模型的複雜度。雖然該方法爲評估模型在未知樣本上的性能提供了較好的辦法,但用於訓練的記錄也減少了。

4.4.5 處理決策樹歸納中的過分擬合

  在前面章節中,我們介紹了一些估計分類模型泛化誤差的方法。對於泛化誤差可靠的估計能讓學習算法搜索到準確的模型,而不會對訓練數據集過分擬合。本節介紹兩種在決策樹歸納上避免過分擬合的策略。

  先剪枝(提前終止規則) 在這種方法中,樹增長算法在產生完全擬合整個訓練數據集的完全增長的決策樹之前就停止決策樹的生長。爲了做到這一點,需要採用更具有限制性的結束條件,例如,當觀察到的不純性度量的增益(或估計的泛化誤差的改進)低於某個確定的閾值時就停止擴展葉結點。這種方法的優點在於避免產生過分擬合訓練數據的過於複雜的子樹。然而,很難爲提前終止選擇正確的閾值。閾值太高將導致擬合不足的模型,而閾值太低就不能充分地解決過分擬合的問題。此外,即便使用已有的屬性測試條件得不到顯著的增益,接下來的劃分也可能產生較好的子樹。

  後剪枝 在該方法中,初始決策樹按照最大規模生長,然後進行剪枝的步驟。按照自底向上的方式修建完全增長的決策樹。修剪有兩種做法:(1)用新的葉結點替換子樹,該葉結點的類標號由樹下記錄中的多數類確定;或者(2)用子樹中最長使用的分支代替子樹。當模型不能再改進時終止剪枝步驟。與先剪枝相比,後剪枝技術傾向於產生更好的結果,因爲不像先剪枝,後剪枝是根據完全增長的決策樹做出的剪枝決策。先剪枝則可能過早終止決策樹的生長。然後,對於後剪枝,當子樹被剪掉後,生長完全決策樹的額外的計算就被浪費了。

  圖4-29展示了4.3.6節web機器人檢測的簡化後的決策樹模型。注意跟在depth=1的子樹已經用涉及屬性ImagePages的一個分支替換,這種方法又稱子樹提升(subtree raising);depth>1且MultiAgent=0的子樹被類標號爲0的葉結點替換,這種方法稱作子樹替換(subtree replacement);depth>1且MultiAgent=1的子樹完整保留。

  

4.5 評估分類器的性能

  4.4.4節中介紹了集中在訓練過程中估計模型泛化誤差的方法。估計誤差有助於學習算法進行模型選擇(model selection),即找到一個具有合適複雜度、不易發生過擬合的模型。模型一旦建立,就可以應用到檢驗數據集上,預測未知記錄的來標號。

  測試模型在檢驗集上的性能是有用的,因爲這樣的測量給出模型泛化誤差的無偏估計。在檢驗集上計算出的準確率或錯誤率可以用來比較不同分類器在相同領域上的性能。然而,爲了做到這一點,檢驗記錄的類標號必須是已知的。本節回顧一些常用的評估分類器性能的方法。

4.5.1 保持方法

  在保持(Holdout)方法中,將被標記的原始數據劃分成兩個不相交的集合,分別稱爲訓練集合檢驗集。在訓練數據集上歸納分類模型,在檢驗集上評估模型的性能。訓練集和檢驗集的劃分比例通常根據分析家的判斷(例如,50-50,或者2/3作爲訓練集,1/3作爲檢驗集)。分類器的準確率根據模型在檢驗集上的準確率估計。

  保持方法有一些衆所周知的侷限性。第一,用於訓練的被標記樣本較少,因爲要保留一部分記錄用於檢驗。因此,建立的模型不如使用所有被標記樣本建立的模型好。第二,模型可能高度依賴於訓練集和檢驗集的構成。一方面,訓練集越小,模型的方差越大。另一方面,如果訓練集太大,根據用較小的檢驗集估計的準確率又不太可靠。這樣的估計具有很寬的置信區間。最後,訓練集合檢驗集不再是相互獨立的。因爲訓練集和檢驗集來源於同一個數據集,在一個子集中超出比例的類在另一個子集就低於比例,反之亦然。

4.5.2 隨機二次抽樣

  可以多次重複保持方法來改進對分類器性能的估計,這種方法稱作隨機二次抽樣。設acci是第i次迭代的模型的準確率,總準確率是。隨機二次抽樣也會遇到一些與保持方法同樣的問題,因爲在訓練階段也沒有利用盡可能多的數據。並且,由於它沒有控制每個記錄用於訓練和檢驗的次數,因此,有些用於訓練的記錄使用的頻率可能比其他記錄高很多。

4.5.3 交叉驗證

  替代隨機二次抽樣的一種方法時交叉驗證(cross-validation)。在該方法中,每個記錄用於訓練的次數相同嗎,並且恰好檢驗一次。爲了解釋該方法,假設把數據分爲相同大小的兩個子集,首先,我們選擇一個子集作爲訓練集,而另一個做檢驗集,然後交換兩個集合的角色,原先做訓練集的現在做檢驗集,反之亦然,這種方法較二折交叉驗證。總誤差通過對兩次運行的誤差求和得到。在這個例子中,每個樣本各做一次訓練樣本和檢驗樣本。k折交叉驗證是對該方法的推廣,把數據分爲大小相同的k分,在每次運行,選擇其中一份做檢驗集,而其餘的全部作爲訓練集,該過程重複k次,使得每份數據都用於檢驗恰好一次。同樣,總誤差是所有k次運行的誤差紙之和。k折價差驗證方法的一種特殊情況使令k=N,其中N是數據集的大小,在這種所謂留一(leave-one-out)方法中,每個檢驗集只有一個記錄。該方法的優點是使用盡可能多的訓練記錄,此外,檢驗集之間是互斥的,並且有效地覆蓋了整個數據集;該方法的缺點是整個過程重複N次,計算上開銷很大,此外,因爲每個檢驗集只有一個記錄,性能估計度量的方法偏高。

4.5.4 自助法

  迄今爲止,我們介紹的方法都是假定訓練記錄採用不放回抽樣,因此,訓練集和檢驗集都不包含重複記錄。在自助(boostrap)方法中,訓練記錄採用有放回抽樣,即已經選座訓練的記錄將放回原來的記錄集中,使得它等概率地被重新抽取。如果原始數據有N個記錄,可以證明,平均來說,大小爲N的自助樣本大約包含原始數據中63.2%的記錄。這是因爲一個記錄被自助抽樣抽取的概率是1-(1-1/N)N,當N充分大時,該概率逐漸逼近1-e-1=0.632。沒有抽中的記錄就稱爲檢驗集的一部分,將訓練集簡歷的模型應用到檢驗集上,得到自助樣本準確率的一個估計εt。抽樣過程重複b次,產生b個自助樣本。

  按照如何計算分類器的總準確率,有幾種不同的自助抽樣法。常用的方法之一是.632自助(.632 boostrap),它通過組合每個自助樣本的準確率εt和由包含所有標記樣本的訓練集計算的準確率(accs)計算總準確率(accboot):

  

 

 

 

 

 

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章