[數據挖掘課程筆記]基於規則的分類-順序覆蓋算法(sequential covering algorithm)


Rule_set = {}; //學習的規則集初試為空

for 每個類c do
     repeat
         Rule = Learn_One_Rule(D,Att-vals,c)
         從D中刪除被Rule覆蓋的元組;
      until終止條件被滿足
      Rule_set = Rule_set +Rule
end for
返回Rule_set

  以上是順序覆蓋算法的基本過程

       Learn_One_Rule采用一種貪心的深度優先策略。每當面臨添加一個新的屬性測試到當前規則時,它根據訓練樣本選擇最能提高規則質量屬性的測試。

      而什么樣的度量能被選擇為規則質量,將是我們以下將解決的問題。

 

 

       有幾個概念:

       准確率:當前規則覆蓋的正確的元組/當前規則覆蓋的全部元組

       覆蓋率:當前規則覆蓋的全部元組/當前全部元組

       正元組(pos):在順序覆蓋算法中,當前所關心的類

       負元組(neg):在順序覆蓋算法中,所有類-當前所關心的類  的集合

 

      直覺上,我們選擇准確率作為規則質量標准,但是這有一個問題,如下圖所示:

    

 

           雖然R2只覆蓋兩個元組,但是R2的准確率為100%,大於R1,在順序覆蓋算法中,將會選擇R2而不是R1,這顯然是不合理的。

 

           為了解決這個問題,采用Foil_Gain作為規則質量標准:

           FOIL_Gain = pos' x (log2((pos'/pos' +neg'))-log2((pos/pos +neg)))

          其中 pos' ,neg'為新增規則R'所覆蓋的正元組和負元組,pos,neg是R'覆蓋之前的R所覆蓋的正元組和負元組

           FOIL_Gain越大越好。

 

          規則剪枝:

          FOIL_Prune(R) = (pos - neg)/(pos+neg)

          如果R剪枝后的FOIL_Prune值較高,則對R剪枝。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM