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

知识图谱与基本概念在这里插入图片描述

基本概念

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

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

逻辑规则定义⊕←?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算法收敛的阈值。

REPReduced Error Pruning

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

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

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

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

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

IREPIncremental 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*剪枝生成一条规则,成为修订规则。

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

RIPPER成功之处

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

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

归纳逻辑程序设计

ILP Inductive Logic Programming,归纳逻辑程序

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

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

LGGLeast 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/169915.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

登顶request模块

华子目录 Requests介绍安装requests模块常用方法常用属性实例引入各种请求方式基于get请求带参数的get请求推荐写法 基于post请求添加headers信息content获取二进制数据bytes类型获取json数据第一种方式第二种方式 response响应状态码判断 高级操作会话维持通过cookie维持会话通…

如何帮助 3D CAD 设计师实现远程办公

当 3D CAD 设计师需要远程办公时,他们可能需要更强的远程软件,以满足他们的专业需求。比如高清画质,以及支持设备重定向、多显示器支持等功能。3D CAD 设计师如何实现远程办公?接下来我们跟随 Platinum Tank Group 的故事来了解一…

快速查看Linux系统占用多的文件夹

背景 租用了一台云服务器,存储很快就满了,想看下哪部分占用多,然后进行清理 工具 使用ncdu工具 sudo apt install ncdu效果

html菜单的基本制作

前面写过一点网页菜单的博文&#xff1b;下面再复习一些技术要点&#xff1b; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.…

【fast2021论文导读】 Learning Cache Replacement with Cacheus

文章:Learning Cache Replacement with Cacheus 导读摘要: 机器学习的最新进展为解决计算系统中的经典问题开辟了新的、有吸引力的方法。对于存储系统,缓存替换是一个这样的问题,因为它对性能有巨大的影响。 本文第一个贡献,确定了与缓存相关的特征,特别是,四种工作负载…

【狂神说Java】Nginx详解

✅作者简介&#xff1a;CSDN内容合伙人、信息安全专业在校大学生&#x1f3c6; &#x1f525;系列专栏 &#xff1a;狂神说Java &#x1f4c3;新人博主 &#xff1a;欢迎点赞收藏关注&#xff0c;会回访&#xff01; &#x1f4ac;舞台再大&#xff0c;你不上台&#xff0c;永远…

【带头学C++】----- 三、指针章 ---- 3.10 函数指针(补充基础知识)

1.函数指针 1.1 函数的返回值类型为指针类型 将函数内部的合法地址通过返回值 返回给函数外部使用 注意:函数不要返回普通局部变量的地址 分析&#xff1a; 在这段代码中&#xff0c;函数getAddr()返回一个指向局部变量data地址&#xff08;作用域是函数内部&#xff09;的指…

【服务配置文件详解】补充rsyslog服务的配置文件翻译解读

学习rsyslog日志管理服务的配置文件 # rsyslog configuration file 关于rsyslog软件的配置文件# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html 想看到更多相关信息&#xff0c;可以去查看这个文件&#xff0c;rsyslog-*的*表示软件版本&#xff0c;我…

Golang 字符串处理汇总

1. 统计字符串长度&#xff1a;len(str) len(str) 函数用于统计字符串的长度&#xff0c;按字节进行统计&#xff0c;且该函数属于内置函数也不用导包&#xff0c;直接用就行&#xff0c;示例如下&#xff1a; //统计字符串的长度,按字节进行统计: str : "golang你好&qu…

一文读懂微前端

1 语雀文档 https://www.yuque.com/chanwj/vlkwxk/qvpv3kqws5hno3qt?singleDoc# 《微前端》本文使用的参考文档均以链接方式粘贴于文章内&#xff0c;十分感谢~ 2 项目github链接 如果你觉得本文档对你有用&#xff0c;恳请github仓库给个star~https://github.com/OmegaCh…

Unity 使用INI文件存储数据或配置参数预设

法1&#xff1a;调用外部Capi库 具体使用&#xff1a; public class Ini{//读取INI文件需要调用C的APP[System.Runtime.InteropServices.DllImport("kernel32")]private static extern long WritePrivateProfileString(string section, string key, string val, st…

ELK之Logstash解析时间相差8h的问题

一、问题描述 服务器当前时间为&#xff1a;2022年 06月 28日 星期二 11:24:22 CST 而logstash解析的时间为2022-06-28T03:15:25.545Z与实际时间相差8h 一、解决办法&#xff1a; 需改logstash的配置文件&#xff1a; 原理就是&#xff1a;定义一个中间变量timestamp&…