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

  • 相关阅读:
    POJ 2778 DNA Sequence(AC自动机+矩阵)
    Challenge & Growth —— 从这里开始
    京东云
    [Done] Codeforces Round #562 (Div. 2) 题解
    HDU 3486 Interviewe
    Codeforces Round #529 (Div. 3) 题解
    Wannafly 挑战赛 19 参考题解
    第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 题解
    2018年长沙理工大学第十三届程序设计竞赛 题解
    POJ 3017 Cut the Sequence
  • 原文地址:https://www.cnblogs.com/leeshum/p/4876025.html
Copyright © 2011-2022 走看看