[数据挖掘课程笔记]基于规则的分类-顺序覆盖算法(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剪枝。

原文地址:https://www.cnblogs.com/leeshum/p/4876025.html