规则
1. 基本概念
- ⊕ ⊕ : 规则头
- f1∧f2⋯fL f 1 ∧ f 2 ⋯ f L : 规则体 (合取式)
- 一条规则是一个子模型,规则及是这些子模型的集合
1.1规则冲突
冲突消解的手段
- 投票法
- 排序法
- 元规则法
1.2无法覆盖
- 增加默认规则
1.3 两种规则
- 命题规则(propositional rule):原命题+逻辑连接词 → → 简单陈述句
- 一阶规则(first-order rule):描述事务的属性或关系的原子公式
命题规则是一阶规则的特例
2.序贯覆盖
规则学习的目标是产生一个能覆盖尽可能多的样例的规则集。最直接的做法是序贯覆盖(sequential covering),即逐条归纳:在训练集上每学到一条规则,就将该规则覆盖的训练样例去除,然后以剩下的训练样例组成训练集重复上述过程。由于每次只处理一部分数据,因此也称为分治(separate-and-conquer)策略。
2.1.生成规则的两种策略
- 自顶向下 —‘生成-测试’法— 规则逐渐特化
- 自底向上 —‘数据驱动’法 — 规则逐渐泛化
2.2.有点
- 简单有效
- 方便推广到多分类
3.剪枝优化
规则生成本质上是一个贪心搜索过程,需要一定的机制来缓解过拟合的风险,最常见的做法是剪枝(pruning)。与决策树相似,剪枝可发生在规则生长过程中,即预剪枝;也可发生在规则产生后,即后剪枝。通常是基于某种性能度量指标来评估增/删逻辑文字前后的规则性能,或增/删规则前后的规则集性能,从而判断是否要进行剪枝。
3.1.相关算法
- 预剪枝:CN2算法
- 后剪枝:REP算法(Reduced Error Pruning)、IREP算法(Incremental REP)
- 预剪枝+后剪枝:RIPPER算法
4.一阶规则学习
和命题规则相比
- 表达能力更强
- 容易引入领域知识
4.1.相关算法
- FOIL(First-Order Inductive Learning)一阶规则学习算法
5. 归纳逻辑成程序设计
归纳逻辑程序设计(Inductive Logic Programming,ILP)在一阶规则学习中引入了函数和逻辑表达式嵌套。一方面机器学习系统具备了更为强大的表达能力;另一方面ILP可看作用机器学习技术来解决基于背景知识的逻辑程序(logic program)归纳,其学得的规则可被PROLOG等逻辑程序设计语言直接使用。
然而,函数和逻辑表达式嵌套的引入也带来了计算上的巨大挑战。例如,给给定一元谓词P和一元函数f,能组成的文字有P(X),P(f(X)),P(f(f(X)))等无穷多个,这就使得规则学习过程中可能的候选原子公式有无穷多个。若仍采用命题逻辑规则或FOIL学习那样自顶向下的规则生成过程,则在增加规则长度时将因无法列举所有候选文字而失败。实际困难还包括,在计算FOIL增益时需对规则覆盖的全部正反例计数,而在引入函数和逻辑表达式嵌套之后也变得不可行。
5.1. 最小一般泛化
5.1. 逆归结
6.应用
- 问答系统:对于问题的逻辑推理能力
- 知识发现:逆归结
- 语义理解
- 自然语言处理