-
算法簡介
基於規則的分類器是使用一組"if...then..."規則來對記錄進行分類的技術。
模型的規則用析取范式 R =(r1 ∨ r2 ∨ ••• ∨ rk)表示,其中R稱作規則集,ri 是分類規則或析取項。
每一個分類規則可以表示為如下形式:
ri:(條件i)→yi
規則左邊成為規則前件或前提。它是屬性測試的合取:
條件i=(A1 op v1)∧(A1 op v1)∧•••∧(A1 op v1)
其中(Aj,vj)是屬性-值對,op是比較運算符,取自集合{=,≠,﹤,﹥,≦,≧}。每一個屬性測試(Aj op vj)稱為一個合取項。規則右邊稱為規則后件,包含預測類yi。
如果規則r的前件和記錄x的屬性匹配,則稱r覆蓋x。當r覆蓋給定的記錄時,稱r被激發或觸發。
分類規則的質量可以用覆蓋率(coverage)和准確率(accuracy)來度量。給定數據集D和分類規則 r:A→y,規則的覆蓋率定義為D中觸發規則r的記錄所占的比例。准確率或置信因子定義為觸發r的記錄中類標號等於y的記錄所占的比例。
Coverage(r)= |A| / |D|
Accuracy(r)= |A∩y| / |A|
其中|A|是滿足規則前件的記錄數,|A∩y|是同時滿足規則前件和后件的記錄數,D是記錄總數。
-
工作原理
基於規則的分類器所產生的規則集的兩個重要性質:
互斥規則 如果規則集R中不存在兩條規則被同一條記錄觸發,則稱規則集R中的規則是互斥的。這個性質確保每條記錄至多被R中的一條規則覆蓋。
窮舉規則 如果對屬性值的任意組合,R中都存在一條規則加以覆蓋,則稱規則集R具有窮舉覆蓋。這個性質確保每一條記錄都至少被R中的一條規則覆蓋。
這兩個性質共同作用,保證每一條記錄被且僅被一條規則覆蓋。如果規則集不是窮舉的,那么必須添加一個默認規則 rd:() → yd來覆蓋那些未被覆蓋的記錄。默認規則的前件為空,當所有其他規則失效時觸發。yd是默認類,通常被指定為沒有被現存規則覆蓋的訓練記錄的多數類。
如果規則集不是互斥的,那么一條記錄可能被多條規則覆蓋,這些規則的預測可能會相互沖突,解決這個問題有如下兩種方法:
有序規則 規則集中的規則按照優先級降序排列,優先級的定義有多種方法(如基於准確率、覆蓋率、總描述長度或規則產生的順序等)。有序規則的規則集也稱為決策表。當測試記錄出現時,由覆蓋記錄的最高秩的規則對其進行分類,這就避免由多條分類規則來預測而產生的類沖突的問題。
無序規則 允許一條測試記錄觸發多條分類規則,把每條被觸發規則的后件看作是對相應類的一次投票,然后計票確定測試記錄的類標號。通常把記錄指派到得票最多的類。
本文重點討論使用有序規則的基於規則的分類器。
-
規則的排序方案
對規則的排序可以逐條規則進行或者逐個類進行。
基於規則的排序方案 這個方案依據規則質量的某種度量對規則進行排序。這種排序方案確保每一個測試記錄都是由覆蓋它的"最好的"規則來分類。該方案的潛在缺點是規則的秩越低越難解釋,因為每個規則都假設所有排在它前面的規則不成立。
基於類的排序方案 在這種方案中,屬於同一個類的規則在規則集R中一起出現。然后,這些規則根據它們所屬的類信息一起排序。同一個類的規則之間的相對順序並不重要,只要其中一個規則被激發,類標號就會賦給測試記錄。這使得規則的解釋稍微容易一些。然而,質量較差的規則可能碰巧預測較高秩的類,從而導致高質量的規則被忽略。
大部分基於規則的分類器(如CS4.5規則和RIPPER)都采用基於類的排序方案。
-
如何建立基於規則的分類器
為了建立基於規則的分類器,需要提取一組規則來識別數據集的屬性和類標號之間的關鍵聯系。提取分類規則的方法有兩大類:
(1)直接方法,直接從數據中提取分類規則;
(2)間接方法,從其他分類模型(如決策樹和神經網絡)中提取分類規則。
直接方法把屬性空間分為較小的子空間,以便於屬於一個子空間的所有記錄可以使用一個分類規則進行分類。間接方法使用分類規則為較復雜的分類模型提供簡潔的描述。
-
規則提取的直接方法
順序覆蓋 算法經常被用來從直接數據中提取規則,規則基於某種評估度量以貪心的方式增長。該算法從包含多個類的數據集中一次提取一個類的規則。決定哪一個類的規則最先產生的標准取決於多種因素,如類的普遍性(即訓練記錄中屬於特定類的記錄的比例),或者給定類中誤分類記錄的代價。
5.1 Learn-One-Rule函數
Learn-One-Rule函數的目標是提取一個分類規則,該規則覆蓋訓練集中的大量正例,沒有或僅覆蓋少量反例。然而,由於搜索空間呈指數大小,要找到一個最佳的規則的計算開銷很大。Learn-One-Rule函數通過以一種貪心的方式的增長規則來解決指數搜索問題。它產生一個初始規則r,並不斷對該規則求精,直到滿足某種終止條件為止。然后修剪該規則,以改進它的泛化誤差。
規則增長策略 常見的分類規則增長策略有兩種:從一般到特殊和從特殊到一般。在從一般到特殊的策略中,先建立一個初始規則r:{}→y,其中左邊是一個空集,右邊包含目標類。該規則的質量很差,因為它覆蓋訓練集中的所有樣例。接着加入新的合取項來提高規則的質量,直到滿足終止條件為止(例如,加入的合取項已不能提高規則的質量)。
對於從特殊到一般的策略,可以隨機地選擇一個正例作為規則增長的初始種子。再求精步,通過刪除規則的一個合取項,使其覆蓋更多的正例來范化規則。重復求精步,直到滿足終止條件為止(例如,當規則開始覆蓋反例時為止)。
由於規則的貪心的方式增長,以上方法可能會產生次優規則。為了避免這種問題,可以采用束狀搜索(beam search)。算法維護k個最佳候選規則,各候選規則各自在其前件中添加或刪除合取項而獨立地增長。評估候選規則的質量,選出k個最佳候選進入下一輪迭代。
規則評估 在規則的增長過程中,需要一種評估度量來確定應該添加(或刪除)哪個合取項。准確率就是一個很明顯的選擇,因為它明確地給出了被規則正確分類的訓練樣例的比例。然而把准確率作為標准的一個潛在的局限性是它沒有考慮規則的覆蓋率。
下面的方法可以用來處理該問題。
(1)可以使用統計檢驗剪除覆蓋率較低的規則。例如,我們可以計算下面的似然比(likelihood ratio)統計量:
其中,k是類的個數,fi 是被規則覆蓋的類i的樣本的觀測頻率,ei 是規則作隨機猜想的期望頻率。注意R是滿足自由度為k-1的χ2分布。較大的R值說明該規則做出的正確預測數顯著地大於隨機猜測的結果。
(2)可以使用一種考慮規則覆蓋率的評估度量。考慮如下評估度量:
其中n是規則覆蓋的樣例數,f+是規則覆蓋的正例數,k是類的總數,p+是正類的先驗概率。注意當p+=1/k時,m估計等價於Laplace度量。
(3)另一種可以使用的評估度量是考慮規則的支持度計數的評估度量。FOIL信息增益就是一種這樣的度量。規則的支持度計數對應於它所覆蓋的正例數。假設規則r : A→+覆蓋p0個正例和n0個反例。增加新的合取項B,擴展后的規則r' : A∧B→+覆蓋p1個正例和n1個反例。根據以上信息,擴展后規則的FOIL信息增益定義為:
由於該度量與p1和p1/p1+n1成正比,因此它更傾向於選擇那些高支持度計數和高准確率的規則。
規則減枝 可以對Learn-One-Rule函數產生的規則進行減枝,以改善它們的泛化誤差。
5.2 順序覆蓋基本原理
規則提取出來后,順序覆蓋算法必須刪除該規則該規則所覆蓋的所有正例和反例。
5.3 RIPPER算法
為了闡明規則提取的直接方法,考慮一種廣泛使用的規則歸納算法,叫作RIPPER算法。該算法的復雜度幾乎線性地隨訓練樣例的數目增長,並且特別適合為類分布不平衡的數據集建立模型。RIPPER也能很好地處理噪聲數據集,因為它使用一個確認數據集來防止模型過分擬合。
對兩類問題,RIPPER算法選擇以多數類作為默認類,並為預測少數類學習規則。對於多類問題,先按類的頻率對類進行排序,設(y1,y2,…,yc)是排序后的類,其中y1是最不頻繁的類,yc是最頻繁的類。第一次迭代中,把屬於y1的樣例標記為正例,而把其他類的樣例標記為反例,使用順序覆蓋算法產生區分正例和反例的規則。接下來,RIPPER提取區分y2和其他類的規則。重復該過程,直到剩下類yc,此時yc作為默認類。
規則增長 RIPPER算法使用從一般到特殊的策略進行規則增長,使用FOIL信息增益來選擇最佳合取項添加到規則前件中。當規則開始覆蓋反例時,停止添加合取項。新規則根據其在確認集上的性能進行減枝。計算下面的度量來確定規則是否需要減枝:(p-n)/(p+n),其中p和n分別是被規則覆蓋的確認集中的正例和反例數目,關於規則在確認集上的准確率,該度量是單調的。如果減枝后該度量增加,那么就去掉該合取項。減枝是從最后添加的合取項開始的。例如給定規則ABCD→y,RIPPER算法先檢查D是否應該減枝,然后是CD、BCD等。盡管原來的規則僅覆蓋正例,但是減枝后的規則可能會覆蓋訓練集中的一些反例。
建立規則集 規則生成后,它所覆蓋的所有正例和反例都要被刪除。只要該規則不違反基於最小描述長度的終止條件,就把它添加到規則集中。如果新規則把規則集的總描述長度增加了至少d個比特位,那么RIPPER就停止把該規則加入到規則集(默認的d是64位)。RIPPER使用的另一個終止條件是規則在確認集上的錯誤率不超過50%。
RIPPER算法也采用其他的優化步驟來決定規則集中現存的某些規則能否被更好的規則替代。
-
規則提取的間接方法
原則上,決策樹從根節點到葉節點的每一條路徑都可以表示為一個分類規則。路徑中的測試條件構成規則前件的合取項,葉節點的類標號賦給規則后件。注意,規則集是完全的,包含的規則是互斥的。
下面,介紹C4.5規則算法所采用的從決策樹生成規則集的方法。
規則產生 決策樹中從根節點到葉節點的每一條路徑都產生一條分類規則。給定一個分類規則r : A→y,考慮簡化后的規則 r': A' →y,其中A'是從A去掉一個合取項后得到的。只要簡化后的規則的誤差率低於原規則的誤差率,就保留其中悲觀誤差率最低的規則。重復規則減枝步驟,直到規則的悲觀誤差不能再改進為止。由於某些規則在減枝后會變得相同,因此必須丟棄重復規則。
規則排序 產生規則集后,C4.5規則算法使用基於類的排序方案對提取的規則定序。預測同一個類的規則分到同一個子集中。計算每個子集的總描述長度,然后各類按照總描述長度由小到大排序。具有最小描述長度的類優先級最高,因為期望它包含最好的規則集。類的總描述長度等於Lexception+g×Lmodel,其中Lexception是對誤分類樣例編碼所需的比特位數,Lmodel是對模型編碼所需要的比特位數,而g是調節參數,默認值為0.5,。調節參數的值取決於模型中冗余屬性的數量,如果模型含有很多冗余屬性,那么調節參數的值會很小。
-
基於規則的分類器的特征
基於規則的分類器有如下特點:
-
- 規則集的表達能力幾乎等價於決策樹,因為決策樹可以用互斥和窮舉的規則集表示。基於規則分類器和決策樹分類器都對屬性空間進行直線划分,並將類指派到每個划分。然而,如果基於規則的分類器允許一條記錄觸發多條規則的話,就可以構造一個更加復雜的決策邊界。
- 基於規則的分類器通常被用來產生更易於解釋的描述性模型,而模型的性能卻可與決策樹分類器相媲美。
- 被很多基於規則的分類器(如RIPPER)所采用的基於類的規則定序方法非常適於處理類分布不平衡的數據集。