一、算法简介
规则是表示信息或少量知识的好方法。基于规则的分类器使用一组IF—THEN规则进行分类。
规则: (Condition) ----->y
Condition 是属性测试的合取
y 是类标号
左部: 规则的前件或前提
右部: 规则的结论
分类规则的例子:
(胎生=否) ^飞行动物=是) -->鸟类
(胎生=是) ^ (体温=恒温) --> 哺乳类
二 规则的质量评价标准
一般用覆盖率(coverage)和准确率(accuracy)度量
- 覆盖率(coverage):满足规则前件的记录所占比例
- 规则的精度(Accuracy of a rule):触发r的记录中类标号等于y的记录所占的比例
其中|A|是满足规则前件的记录数,|A∩y|是同时满足规则前件和后件的记录数,D是记录总数。
三、 规则的分类器的工作原理
基于规则的分类器所产生的规则集的两个重要性质:
互斥规则(Mutually exclusive rules)
- 每个记录最多被一个规则覆盖
- 如果规则集中不存在两条规则被同一条记录触发,称规则集中的规则是互斥的
- 如果规则集不是互斥的:一个记录可能触发多条规则
解决办法:
- 有序规则集(Ordered rule set)
规则集中的规则按照优先级降序排列,优先级的定义有多种方法(如基于准确率、覆盖率、总描述长度或规则产生的顺序等)。有序规则的规则集也称为决策表。当测试记录出现时,由覆盖记录的最高秩的规则对其进行分类,这就避免由多条分类规则来预测而产生的类冲突的问题。 - 无序规则集( Unordered rule set)
允许一条测试记录触发多条分类规则,把每条被触发规则的后件看作是对相应类的一次投票,然后计票确定测试记录的类标号。通常把记录指派到得票最多的类。
穷举规则(Exhaustive rules)
- 如果对属性值的任一组合,都存在一条规则加以覆盖,成规则集具有穷举覆盖确保了每一条记录都至少被一条规则覆盖
- 如果规则不是穷举的:一条记录可能不会触发任何规则
解决办法:
- 使用缺省类(即通常被指定为没有被现存规则覆盖的训练记录的多数类)
四、规则的排序方案
对规则的排序可以逐条规则进行或者逐个类进行。
基于规则的排序方案
这个方案依据规则质量的某种度量对规则进行排序。这种排序方案确保每一个测试记录都是由覆盖它的"最好的"规则来分类。该方案的潜在缺点是规则的秩越低越难解释,因为每个规则都假设所有排在它前面的规则不成立。
基于类的排序方案
在这种方案中,属于同一个类的规则在规则集R中一起出现。然后,这些规则根据它们所属的类信息一起排序。同一个类的规则之间的相对顺序并不重要,只要其中一个规则被激发,类标号就会赋给测试记录。这使得规则的解释稍微容易一些。然而,质量较差的规则可能碰巧预测较高秩的类,从而导致高质量的规则被忽略。
五、规则的提取算法
建立分类器的过程就是建立一套规则集,提取分类规则的方法有两类:直接法直接从数据集中提取分类规则 和 间接法从其他的分类模型(如决策树和神经网络)中提取分类规则
间接法—由决策树提取规则
为了从决策树提取规则,对每条从根到树叶节点的路径创建一个规则。
前件:沿着给定路径上的每个分裂准则的逻辑AND形成规则的前件。
后件:存放类预测的树叶结点形成规则的后件。
由于这些规则直接从树中提取,所以它们是互斥的和穷举的。
-
互斥意味着不可能存在规则冲突,因为没有两个规则被相同的元组触发。(每个树叶有一个并且任何元组都只能映射到一个树叶。)
-
穷举意味着对于每种可能的属性—值组合都存在一个规则,使得该规则集不需要默认规则。因此,规则的序不重要—它们是无序的。
由于每个树叶一个规则,所以提取的规则集并不比对应的决策树简单多少。在某些情况下,提取的规则可能比原来的树更难解释(比如,子树中存在重复和复制)。提取的规则集可能很大并且难以理解,因为某些属性测试可能是不相关的和冗余的。尽管很容易从决策树提取规则,但是可能需要做更多的工作,对结果规则集进行剪枝。
直接法—顺序覆盖算法
顺序覆盖算法经常被用来从直接数据中提取规则,规则基于某种评估度量以贪心的方式增长。该算法从包含多个类的数据集中一次提取一个类的规则。决定哪一个类的规则最先产生的标准取决于多种因素,如类的普遍性(即训练记录中属于特定类的记录的比例),或者给定类中误分类记录的代价。
基本思想:
开始决策表为空,用留一规则提取类y的覆盖当前训练记录集的最佳规则。在提取规则时,类y的所有训练记录被看作正例,而其他类的训练记录看作反例。如果一个规则覆盖大多数正例,那么该规则是可取的,这时删除它所覆盖的训练记录,把新规则追加到决策表中。重复这个过程直到满足终止条件
在该算法中,while循环内的终止条件不唯一,在不同的分类器中可能会有区别,比如可以是所有整理均被覆盖,也可以是剩余正例比例小于某个阈值等。下面说明了顺序覆盖算法提取一个类中规则r1和r2的过程,在该过程中,每次提取一个规则之后,就将改规则覆盖的记录(包括正例和反例)去掉,并且对于每个类中的每条规则,都是从完整的(属性,值)A中提取。
Learn-One-Rule函数
Learn-One-Rule函数的目标是提取一个分类规则,该规则覆盖训练集中的大量正例,没有或仅覆盖少量反例。
Learn-One-Rule函数通过以一种贪心的方式的增长规则来解决指数搜索问题。
它产生一个初始规则r,并不断对该规则求精,直到满足某种终止条件为止。然后修剪该规则,以改进它的泛化误差。
规则增长策略
常见的分类规则增长策略有两种:从一般到特殊和从特殊到一般
-
在从一般到特殊的策略中,先建立一个初始规则r:{}→y,其中左边是一个空集,右边包含目标类。该规则的质量很差,因为它覆盖训练集中的所有样例。接着加入新的合取项来提高规则的质量,直到满足终止条件为止(例如,加入的合取项已不能提高规则的质量)
-
对于从特殊到一般的策略,可以随机地选择一个正例作为规则增长的初始种子。再求精步,通过删除规则的一个合取项,使其覆盖更多的正例来范化规则。重复求精步,直到满足终止条件为止(例如,当规则开始覆盖反例时为止)。
由于规则的贪心的方式增长,上述两种方法可能会产生次优规则。为了避免这种问题,可以采用束状搜索(beam search):算法维护kk个最佳候选规则,个候选规则各自在其前件中添加或删除合取项而独立地增长;评估候选规则的质量,选出kk个最佳候选进入下一轮迭代
评估规则
1.可以使用统计检验剪除覆盖率较低的规则,如我们可以计算下面的似然比统计量
k是类的个数,fi是被规则覆盖的类ii的样本的观测频率,ei是规则做随机猜测的期望频率
较大的R值说明该规则做出的正确预测数显著地大于随机猜测的结果
2.可以使用一种考虑规则覆盖率的评估度量
n是规则覆盖的样例数,f+是规则覆盖的正例数,k是类的总数,p+是正类的先验概率
当p+=1/k时,m估计等价于Laplace度量;如果规则不覆盖任何训练样例,那么Laplace度量减小到1/k,该值等于类符合均匀分布时正类的先验概率;当n=0n=0时,m估计也降到先验概率。然而,当规则的覆盖率很高时,两个度量都渐进地趋向于规则的准确率f+/n
3.可以使用的评估度量是考虑规则的支持度计数的评估度量,如FOIL信息增益
假设规则r:A→ +覆盖p0个正例和n0个反例,增加新的合取项B,扩展后的规则r′:A∧B→ +覆盖p1个正例和n1个反例,于是
由于该度量正比于p1和p1/(p1+n1),所以它更倾向于选择那些高支持度计数和高准确率的规则
规则剪枝
可以对Learn-One-Rule函数产生的规则进行减枝,以改善它们的泛化误差。
五、文档参考链接
https://blog.csdn.net/qq_38204302/article/details/104532905
https://www.cnblogs.com/zengzhihua/p/5458373.html
https://blog.csdn.net/huguozhiengr/article/details/82856549
https://blog.csdn.net/sjpz0124/article/details/45980623
https://blog.csdn.net/weixin_42555080/article/details/91401493