1. 程式人生 > >從零開始-Machine Learning學習筆記(31)-規則學習

從零開始-Machine Learning學習筆記(31)-規則學習

文章目錄

1. 基本概念

   “規則學習” (rule learning)是從訓練資料中學習出一組能用於對未見示例進行判別的規則。 形式上一般為:

式子中,右邊的部分稱為規則體(Body),表示該條規則的前提,由一系列邏輯文字(Literal) f k f_k 組成的合取式,合取符號 \bigwedge

表示“並且”。左邊的部分稱為 邏輯頭(Head),表達該條規則的結果,也是邏輯文字,一般用來表示規則所判定的目標類別或概念。
  規則集合中的每條規則都可看作一個子模型,規則集合是這些子模型的一個整合。當同一個示例被判別結果不同的多條規則覆蓋時,稱發生了"衝突" (conflict),解決衝突的辦法稱為 “衝突消解” (conflict resolution)。常用的衝突消解策略有投票法、排序法、元規則法等。

  從形式語言表達能力而言,規則可以分為兩類:
命題規則(Propositional rule):是由"原子命題" (propositional atom)和邏輯連線詞"與"(

\bigwedge )、“或”(V)、“非"和"蘊含” (←)構成的簡單陳述句;
一階規則(First-order rule):基本成分是能描述事物的屬性或關係的"原子公式" (atomic formula)。

2. 序貫覆蓋

  規則學習的目標是產生一個能覆蓋儘可能多的樣例的規則集。最直接的做法是 “序貫覆蓋”(sequential covering),即逐條歸納:在訓練集上每學到一條規則,就將該規則覆蓋的訓練樣例去除,然後以剩下的訓練樣例組成訓練集重複上述過程。由於每次只處理一部分資料,因此也被稱為"分治" (separate-and-conquer) 策略。
  但是這種基於窮盡搜尋的做法在屬性和候選值較多時會由於組合爆炸而不可行。現實任務中一般有兩種策略來產生規則:
"自頂向下"(Top-down):即從比較一般的規則開始,逐漸新增新文字以縮小規則覆蓋範圍,直到滿足預定條件為止;亦稱為"生成-測試"(generate-then-test)法,是規則逐漸"特化" (specialization)的過程;
"自底向上"(Bottom-up):,即從比較特妹的規則開始,逐漸刪除文字以擴大規則覆蓋範圍,直到滿足條件為止;亦稱為"資料驅動" (data-driven)法,是規則逐漸"泛化"(generalization)的過程。
  由於序貫覆蓋法簡單有效,幾乎所有規則學習演算法都以它為基本框架。它能方便地推廣到多分類問題上,只需將每類分別處理即可:當學習關於第c類的規則時,將所有屬於類別c的樣本作為正例,其他類別的樣本作為反例。

3. 剪枝優化

  規則生成本質上是一個貪心搜尋過程,需有一定的機制來緩解過擬合的風險,最常見的做法是剪枝(pruning)。與決策樹相似,剪枝可發生在規則生長過程中,即"預剪枝"也可發生在規則產生後,即"後剪枝"通常是基於某種效能度量指標來評估增/刪邏輯文字前後的規則效能,或增/刪規則前後的規則集效能,從而判斷是否要進行剪枝。

3.1 預剪枝-CN2演算法

預剪枝可以藉助統計顯著性檢驗來進行,CN2演算法在預剪枝的時候,假設用規則集進行預測必須顯著優於直接基於訓練樣例集後驗概率分佈進行預測。 CN2演算法使用了似然率統計量(Likelihood Ratio Stl1tistics, LRS),用m+與m-表示訓練樣本中正反樣本的數量, m + m_{+}^{'} m m_{-}^{'} 表示規則所覆蓋的正反樣本數量,於是有:

上式實際上是一種資訊量指標,衡量了規則(集)覆蓋樣例的分佈與訓練集經驗分佈的差別: LRS越大,說明採用規則(集)進行預測與直接使用訓練集正、反例比率進行猜測的差別越大; LRS越小,說明規則(集)的效果越可能僅是偶然現象。

3.2 後剪枝-RIPPER演算法

  後剪枝最常用的策略是"減錯剪枝"(Reduced Error Pruning, REP),其基本做法是:將樣例集劃分為訓練集和驗證集,從訓練集上學得規則集R後進行多輪剪枝,在每一輪窮舉所有可能的剪枝操作,包括刪除規則中某個文字、刪除規則結尾文字、刪除規則尾部多個文字、刪除整條規則等,然後用驗證集對剪枝產生的所有候選規則集進行評估,保留最好的那個規則集進行下一輪剪枝,如此繼續,直到無法通過剪枝提高驗證集上的效能為止。 這種方法與在決策樹一章中的思路其實類似:都是判斷剪枝前後的效能,如果剪枝後效能提升就執行剪枝操作。
  REP剪枝比較有效,但是其複雜度在$O(m^4)$。於是有了可以將複雜度將為$O(mlog^2 m)$的IREP(Incremental REP)方法:在生成每條規則前,先將當前樣例集劃分為訓練集和驗證集,在訓練集上生成一條規則r,立即在驗證集上對其進行REP剪枝,得到規則r’;將r’覆蓋的樣例去除,在更新後的樣例集上重複上述過程。 顯然,REP是針對規則集進行剪枝,而IREP僅對單條規則進行剪枝,因此後者比前者更高效。
  若將剪枝機制與其他一些後處理手段結合起來對規則集進行優化,則往往能獲得更好的效果,RIPPER(Repeated Incremental Pruning to Produce Error Reduction, RIPPER)演算法就是其中的代表:先使用 I R E P IREP^{*} (IREP的改進版,主要用 m + + ( m m ) m + + m \frac{m_{+}^{'}+(m_- - m_{-}^{'})}{m_+ + m_-} 取代了IREP使用的準確率作為規則效能度量指標,在剪枝時刪除規則尾部的多個文字,並在最終得到規則集之後再進行一次IREP剪枝。)剪枝機制生成規則集R。其演算法描述如下:

4. 一階規則學習

  受限於命題邏輯表達能力命題規則學習難以處理物件之間的"關係" (relation),而關係資訊在很多工中非常重要。因此需用一階邏輯表示,並且要使用一階規則學習。所謂一階邏輯表示其實就是利用比較,將原來的單一的表示用比較的方式來描述,如花的顏色為淡紅色,另一隻花的顏色比第一隻更紅。 於是其表達形式變化不大,還是由邏輯頭和邏輯體構成,但是描述方式發生了變化:
( X Y ) ( X Z ) ( Z Y ) 更好(X,Y) ← 更好(X,Z) \bigwedge 更好(Z,Y)
無論是邏輯頭還是邏輯體都變成了“更好(X,Y)”的形式,表示X比Y更好。

  FOIL(First-Order Inductive Learner)演算法是著名的一階規則學習演算法,它遵循序貫覆蓋框架旦採用自頂向下的規則歸納策略。FOIL使用 “FOIL增益”(FOIL gain) 來選擇文字:
F G a i n = m + × ( l o g 2 m + m + + m l o g 2 m + m + + m ) F_Gain = m_{+}^{'} \times (log_2 \frac{m_{+}^{'}}{m_{+}^{'}+m_{-}^{'}} - log_2 \frac{m_+}{m_+ + m_-})
其中, m + m_{+}^{'} m m_{-}^{'} 分別為增加候選文字後新規則所覆蓋的正、反例數, m + m_+ m m_- 為原規則覆蓋的正、反例數。FOIL 增益與決策樹使用的資訊增益不同,它僅考慮正例的資訊量,並且用新規則覆蓋的正例數作為權重。這是由於關係資料中正例數往往遠少於反例數,因此通常對正例應賦予更多的關注。

  FOIL可大致看作命題規則學習與歸納邏輯程式設計之間的過渡,其自頂向下的規則生成過程不能支援函式和邏輯表示式巢狀,因此規則表達能力仍有不足;但它是把命題規則學習過程通過變數替換等操作直接轉化為一階規則學習,因此比一般歸納邏輯程式設計技術更高效。

5. 歸納邏輯程式設計(ILP)

  歸納邏輯程式設計(Inductive Logic Programmi, ILP) 在一階規則學習中引入了函式和邏輯表示式巢狀。

5.1 最小一般泛化

  歸納邏輯程式設計採用自底向上的規則生成策略,直接將一個或多個正例所對應的具體事實(grounded fact)作為初始規則,再對規則逐步進行泛化以增加其對樣例的覆蓋率。泛化操作可以是將規則中的常量替換為邏輯變數,也可以是刪除規則體中的某個文字。
以一下的例子用於輔助理解:
( 1 10 ) ( 1 10 ) ( 1 10 ) ( 1 10 ) ( 1 10 ) ( 1 15 ) ( 1 15 ) ( 1 15 ) ( 1 15 ) 更好(1 , 10) ← 根蒂更蜷(1 , 10) \wedge 聲音更沉(1 , 10) \wedge臍部更凹(1 , 10)\wedge觸感更硬(1 , 10) \\ 更好(1 , 15) ←根蒂更蜷(1 , 15) \wedge 臍部更凹(1 , 15) \wedge觸感更硬(1 , 15)

首先取出左邊相同的邏輯文字:根蒂更蜷,臍部更凹,觸感更硬;將相同的位置的10和15用Y代替,於是就有了更一般的表達:
( 1 Y ) ( 1 Y ) ( 1 Y ) ( 1 Y ) 更好(1 ,Y) ←根蒂更蜷(1 ,Y) \wedge 臍部更凹(1 , Y) \wedge觸感更硬(1 , Y)
這個時候再來了另外的一個規則:
( 2 10 ) ( 2 10 ) ( 2 10 ) ( 2 10 )