【机器学习】八、规则学习

知识图谱与基本概念

基本概念

规则学习定义 :从训练数据中学习出一组能用于对未见示例进行判别的规则

规则定义:规则一般是:语义明确、能描述数据分布所隐含的客观规律或领域概念。

逻辑规则定义⊕← ? 1 ? 2 ? 3 ...⋀ ? ?⊕←f_1⋀f_2⋀f_3...⋀f_L

右侧为规则体:由L个逻辑文字组成的合取式。

左侧为规则头:逻辑文字组成的目标类别或概念。

规则集:若干个逻辑规则组成的集合成为规则集。

两种逻辑规则:

命题规则:由"原子命题"和逻辑连接词 与、或、非和蕴含构成的简单陈述句(if-then规则)。

rule1:鱼类*←*← (胎生 = no) ∧ (在水里生活 = yes)

rule2:鸟类*←*← (胎生 = no) ∧ (会飞 = yes)

一阶规则:描述事物的属性和关系,称为关系型规则,额外包含了断言和量化。

解决问题的思路

目标:(贪心)找到一个规则集,这个规则集尽可能多的覆盖样例。

分类过程总结

通过规则集对未见示例进行分类的时候,我们每条逻辑规则都可以看做是一个子模型,规则集就是这些子模型的集合,将规则集与未见实例进行匹配,若匹配成功(满足规则体中的所有条件)则实例被预测为正例,若都不匹配则为负例。

问题

如果一个示例被多条逻辑规则覆盖时,判别发生了冲突?

冲突消解

投票法:将判别类别相同的规则数最多的结果作为判别结果。

排序法:带序规则学习/优先级规则学习:排序靠前的规则判定结果为准。

序贯覆盖

基本思想是什么?

逐条归纳(穷尽)的思想:通过贪心搜索的方法来获得规则集,直到:规则覆盖所有正例,未覆盖任何反例。

重要性:几乎所有的规则学习算法,都是以它作为基本框架。

穷尽搜索的逻辑过程

  1. 空规则开始,正例类别作为规则头,再逐个遍历训练集中的每个属性与属性取值。

  2. 尝试将其属性取值的逻辑文字增加到规则体中,如果当前规则体仅覆盖正例,学到一条规则。

  3. 去除这条规则覆盖的正例,以剩下的样例组成训练集,再重复上述规则生成的过程。

出现一个问题

如果属性和属性取值对应的维度非常大呢?组合爆炸。

生成规则的策略

自顶向下(top-down):特化过程,容易产生泛化能力较好的规则,鲁棒性较好,广泛使用。

自底向上(bottom-top):泛化过程,适合样本较少的情况。

自顶向下

思想:添加新文字以缩小规则覆盖范围,直到满足预定的条件为止。

  1. 空规则开始,逐一(属性,属性取值)作为原子命题,基于训练集准确率来评估。

  2. 选出准确率最高的原子命题及其覆盖的样例,进入下一轮评估,若全部覆盖,则生成

单条规则,对剩余的样例再做上述规则生成过程。

注:评估优先级顺序:准确率>覆盖样例数>属性次序

自底向上:直接将某样例的属性取值形成规则,作为特殊规则,再泛化。

贯覆盖的拓展与问题

多分类问题。

例如:3分类(A,B,C)问题,将A作为正例,BC作为反例,同样B作为正例,AC作为反例。

避免局部最优-提出的集束搜索。

通常仅考虑一个"最优"文字,这种过于贪心的思想容易导致陷于局部最优。

集束搜索:保留最优的b个逻辑文字。

过拟合风险-存在不必要的约束条件。

剪枝优化-(预剪枝、后剪枝)

剪枝优化

预剪枝

通过信息增益准则确定划分属性,验证集来剪枝

  1. 信息增益准则确定划分属性

  2. 通过验证集,划分前后的对比,确定是否要预剪枝。

  3. 重复1,2过程,直到禁止划分(贪心:禁止划分,存在欠拟合风险)

决策树 规则

定义:将学习到的决策树,从树的根节点到每个叶节点是一条规则,很容易转换成"if-then"形式的规则。

生成过程:其规则的建立依赖于树的生成,树的建立过程是对整个空间的递归划分、建立局部模型的过程,往往比较耗时。

规则归纳(规则学习方法)与决策树规则区别

相同点:(在构造规则过程中)

  1. 通过属性的信息增益不断地添加规则。

  2. 通过剪枝对规则进行裁剪。

不同点:

  1. 不需要建立搜索树而是采用深度优先搜索策略直接从数据集生成规则且每次生成一条(算法效率提高)。

CN2

1989年提出引入显著性校验。

似然率统计量的信息量指标:在预剪枝过程中,衡量规则集覆盖样例的分布与训练集经验分布的差别。

LRS越大:规则集预测与训练集经验分布的差别越大。

LRS越小:说明规则集的效果越可能仅是偶然现象。

通常设置LRS>0.99,作为CN2算法收敛的阈值。

REP Reduced Error Pruning

1991年提出。思想:后剪枝的策略(对规则集剪枝)

  1. 将样例分为训练集(生长集)和测试集(剪枝集),基于准确度贪心生成全部的规则集合。

  2. 穷举所有的剪枝操作(删除规则中某个文字/删除规则结尾文字/删除规则尾部多个文字/删除整体规则),进行多轮剪枝,验证集评估。

  3. 直到:无法通过剪枝提高验证集准确性。

总结:非常有效,但是复杂度

IREP Incremental REP

1994年提出。思想:后剪枝的策略(对单条规则剪枝)

  1. 将样例分为训练集(生长集)和测试集(剪枝集),在训练集上生成一条规则r。

  2. 立即对这条规则r在验证集上对其进行REP剪枝,得到规则r'。

  3. 将r'覆盖的样例去除, 在更新后的样例集上重复上述过程。

IREP*

1994年提出

IREP*:修改规则性能度量指标,替换IREP的准确率评估方法(增加了对反例的评估指标)。

RIPPER

1995年提出IREP*剪枝与后处理优化结合。泛化能力、速度还是比大多数决策树算法更佳。

  1. 对于规则集中每条规则r,RIPPER为它生成两个变体(替换规则与修订规则):

a. 基于每条规则r覆盖的样例,用IREP*重新生成一条规则,作为替换规则。

b. 对每条规则r增加文字进行特化,再用IREP*剪枝生成一条规则,成为修订规则。

  1. 原规则集、替换规则集、修订规则集,选择最优的规则集保留下来。

RIPPER 成功之处

由于最初生成的规则集,每条规则都没有对其后产生的规则加以考虑,这样的贪心算法很容易导致陷入局部最优。

解决方案:增加后处理优化部分,将所有规则放在一起,重新加以优化,通过全局的考虑来缓解贪心算法的局部性。

归纳逻辑程序设计

ILP Inductive Logic Programming ,归纳逻辑 程序

引入:函数与逻辑表达式嵌套

作用:机器学习系统具备了的很强的表达能力,在先验知识的逻辑程序归纳。其学到的规则,可被PROLOG等逻辑程序设计语言直接使用。

LGG Least General Generalization ,最小一般泛化)

主要 思想:自底向上的规则生成策略,将"特殊"规则转变为"一般"规则。

实现步骤:直接将一个或者多个正例所对应的具体事实作为初始规则,再对规则逐步进行泛化以增加其对样例的覆盖率。其中泛化操作:其实就是常量替换为逻辑变量,或者删除规则体中的逻辑文字。

逆归结

归纳思想:从个别事物出发,概括一般性规律。

主要思想:将貌似复杂的逻辑规则与背景知识联系起来化繁为简,基于背景知识来设计新的概念和关系。

比如抽象出一种新概念:以西瓜为例,西瓜更甜?日晒更多?更新鲜?需要结合背景知识来确定。

推荐阅读

RIPPER

RIPPER论文:http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.50.8204

RIPPER代码:https://www.researchgate.net/figure/The-RIPPER-Algorithm-Cohen-1995_fig2_234828100

依然是命题规则学习的最高水平

局限性

问题规模稍大就很大去应对。现阶段,更多的研究会把规则学习与统计学习相结合

统计关系模型

书籍:introduction to statistical relational learning

PRM(概率关系模型):Learning Probabilistic Relational Models(https://ieeexplore.ieee.org/document/6278195?arnumber=6278195

允许对象的属性在概率上依赖于其他属性和相关对象属性

MLN(马尔科夫逻辑网):Markov logic network(https://en.wikipedia.org/wiki/Markov_logic_network

马尔科夫网络思想应用于一阶逻辑,去实现不确定的推理。

应用:

在dblp数据上,预测怎么样的文章容易被发表和引用。

判断电影在上映后的一个星期里,会不会票房达到100万。

金融欺诈:想法就是和诈骗犯相关的人,估计也是诈骗犯。

建议

数据集分析的先验知识下,利用逆归结、自顶向下、自底向上的思想去抽象一些普遍的逻辑规则和特征,帮助我们更好的分析问题。

参考链接:https://blog.csdn.net/tonydz0523/article/details/84673793

相关推荐
吃个糖糖12 分钟前
36 Opencv SURF 关键点检测
人工智能·opencv·计算机视觉
AI慧聚堂24 分钟前
自动化 + 人工智能:投标行业的未来是什么样的?
运维·人工智能·自动化
盛世隐者25 分钟前
【pytorch】循环神经网络
人工智能·pytorch
cdut_suye38 分钟前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
开发者每周简报1 小时前
微软的AI转型故事
人工智能·microsoft
dundunmm1 小时前
机器学习之scikit-learn(简称 sklearn)
python·算法·机器学习·scikit-learn·sklearn·分类算法
古希腊掌管学习的神1 小时前
[机器学习]sklearn入门指南(1)
人工智能·python·算法·机器学习·sklearn
普密斯科技1 小时前
手机外观边框缺陷视觉检测智慧方案
人工智能·计算机视觉·智能手机·自动化·视觉检测·集成测试
四口鲸鱼爱吃盐2 小时前
Pytorch | 利用AI-FGTM针对CIFAR10上的ResNet分类器进行对抗攻击
人工智能·pytorch·python
lishanlu1362 小时前
Pytorch分布式训练
人工智能·ddp·pytorch并行训练