周志華 第15章 看到有人總結很詳細:http://blog.csdn.net/fjssharpsword/article/details/72674841
詳細介紹就不寫了,寫一下自己看的時候覺得重要的東西,便於自己回顧。。。。
規則學習概念:機器學習中的規則(rule)通常是指語義明確、能描述數據分布所隱含的客觀規律或領域概念、可寫成"若…則…"形式的邏輯規則。規則學習(rulelearning)是從訓練數據中學習出一組能用於對未見示例進行判別的規則。 規則學習在某些方面優於神經網絡,支持向量機。它有更好的可解釋性。數理邏輯局以極強的表達能力。描述能力在處理一些高度復雜的AI任務時具有顯著的優勢。例如在問答系統中有時可能遇到非常多、甚至無窮種可能的答案,此時若能基於邏輯規則進行抽象表達或者推理則將帶來很大便利。
在一個規則集合中,有很多規則。一個示例被判別結果不同的多條規則覆蓋時,稱發生了“沖突”。解決方法(沖突消解conflict resolution): 1、投票法:將判別相同的規則數最多的結果作為最終結果 2、排序法:在規則集合上定義一個順序,在發生沖突時使用排序最前的規則;相應的規則學習過程稱為“帶序規則”(ordered rule)學習或“優先級規則”學習。 3、元規則法:根據領域知識事先設定一些“元規則”(mete-rule),即關於規則的規則,例如“發生沖突時使用長度最小的規則”,然后根據元規則的指導來使用規則集。
默認規則:
從訓練集學得的規則集合也許不能覆蓋所有可能未見示例(屬性數目過多時時常出現)。因此,規則學習算法通常會設置一條“默認規則-default rule”(或稱缺省規則),由它來處理集合未覆蓋的樣本;例如加一條默認規則:“未被規則1、2 覆蓋的都不是好瓜”。也就是為了判斷規則集合原有規則無法判斷的示例。
規則分類: 1、“命題規則”:由“原子命題”和邏輯連接詞“與”、“或”、“非”、“蘊含”構成的簡單陳述句。 2、“一階規則”:基本成分是能描述事物的屬性或關系的原子公式(atomic formula)。如表達父子關系的謂詞(predicate)父親(X,Y)就是原子公式;再比如加一操作add(x)=x+1。 一階規則能表達復雜的關系,因此也被稱為關系型規則(relational rule)。如果進一步用“謂詞”——“自然數(X)”表示X是自然數,任意X。加入全稱量詞,用於限定變量的取值范圍,稱為“量詞”(quantifier)。
以西瓜集為例,簡單地把屬性當作謂詞來定義示例與屬性值之間的關系,則命題規則集R可改寫為一階規則集R*:

顯然,從形式語言系統的角度來看,命題規則是一階規則的特例。因此一階規則的學習比命題規則要復雜得多。
序列覆蓋: 規則學習的目標是產生一個能覆蓋盡可能多的樣例的規則集,最直接的做法是“序貫覆蓋”。 即逐條歸納:在訓練集上每學到一條規則,就將該規則覆蓋的訓練樣例去除,然后以剩下的訓練樣例組成訓練集重復上述過程。由於每次只處理一部分數據,因此也稱為分治(separate-and-conquer)策略。

這種基於窮盡搜索的做法在屬性和候選值較多時會由於組合爆炸而不可行。一般有兩種策略來產生規則: 1)自頂向下(top-down),即從比較一般的規則開始,逐漸增加新文字以縮小規則覆蓋范圍,直到滿足預定條件為止,也稱為生成-測試(generate-then-test)法,是規則逐漸特化(specialization)的過程,是從一般到特殊的過程; (一般的規則是:例如不含任何屬性的空規則,它覆蓋所有的樣例,就是一條比較一般的規則) 2)自底向上(bottom-up),即從比較特殊的規則開始,逐漸刪除文字以擴大覆蓋范圍,直到滿足條件為止;也稱為數據驅動(data-driven)法,是規則逐漸泛化(generalization)的過程,是從特殊到一般的過程。 (特殊的規則是:例如直接以某樣例的屬性取值形成規則,該規則僅覆蓋此樣例,就是一條比較特殊的規則) 自頂向下是覆蓋范圍從大到小搜索規則,自底向上則正好相反;前者更容易產生泛化性能較好的規則,而后者更適合於訓練樣本較少的情形;另外,前者對噪聲的魯棒性比后者要強;因此,在命題規則學習中通常使用前者,而后者則在一階規則學習這類假設空間非常復雜的任務使用較多。
文中給出了西瓜集例子,展示自頂向下的規則生成方法。例子中規則生成過程設計一個評估規則優劣的標准,例子中給出的標准是:
1、先考慮規則准確率(准確率=n/m。n:規則覆蓋的正例數,m:覆蓋的樣例總數) 2、准確率相同時,考慮覆蓋樣例數, 3、准確率、覆蓋樣例數都相同時考慮屬性次序。
現實應用中可根據具體任務情況設計適當的標准。例子中每次僅考慮一個最優文字,過於貪心,容易陷入局部最優,為緩解這個問題,采用集束搜索(beam search),即每輪保留最優的b個邏輯文字,在下一輪均用於構建候選集,再把候選集中最優的b個留待下一輪使用。
序貫覆蓋法簡單有效,幾乎所有規則學習算法都以其為基本框架,也能方便地推廣到多分類問題上,只需將每類分別處理即可:當學習關於第c類的規則時,將所有屬於類別c的樣本作為正例,其他類別的樣本作為反例。
剪枝優化: 規則生成本質上是一個貪心搜索過程,需要一定的機制來緩解過擬合的風險,最常見的做法是剪枝(pruning)。與決策樹相似,剪枝可發生在規則生長過程中,即預剪枝;也可發生在規則產生后,即后剪枝。通常是基於某種性能度量指標來評估增/刪邏輯文字前后的規則性能,或增/刪規則前后的規則集性能,從而判斷是否要進行剪枝。
預剪枝:CN2算法(用到了LRS) 后剪枝:“減錯剪枝”REP


RIPPER中的后處理機制是為了在剪枝的基礎上進一步提升性能,對R中的每條規則ri,RIPPER為它產生兩個變體:
第一:r*i:基於ri覆蓋的樣例,用IREP*重新生成一條規則r*i,該規則稱為替換規則(replacement rule);
第二:r**i:基於ri增加文字進行特化,然后再用IREP*剪枝生成一條規則r**i,該規則稱為修訂規則(revised rule)。
接下來,把r*i和r**i分別於R中除ri之外的規則放在一起,組成規則集R*和R**,將它們與R一起進行比較,選擇最優的規則集保留下來。
RIPREP更有效的原因是:最初生成R時,規則是按序生成的,每條規則都沒有對其后產生的規則加以考慮,這樣的貪心算法本質常導致算法陷入局部最優;而RIPPER的后處理優化過程將R中的所有規則放在一起重新加以優化,恰是通過全局的考慮來緩解貪心算法的局部性,從而往往能獲得更好的效果。
