拖延症是进步最大的敌人,这是一篇二月就该写的文,硬是拖过了三月,来到了四月。

频繁模式与Apriori算法

关于原理这里不多做解释,感兴趣的可以去学习。这里引用机械工业出版社的《数据挖掘概念与技术》(中文第三版)中的两段。

频繁模式(frequent patterm)是频繁地出现在数据集中的模式(如项集、子序列或子结构)。例如,频繁地同时出现在交易数据集中的商品(如牛奶和面包)的集合是频繁项集。一个子序列(如首先购买PC,然后是数码相机,再后是内存卡),如果它频繁地出现在购物历史数据库中,则称它为一个(频繁的)序列模式。一个子结构可能涉及不同的结构形式,如子图、子树或子格,它可能与项集或子序列结合在一起。如果一个子结构频繁地出现,则称它为(频繁的)结构模式。对于挖掘数据之间的关联、相关性和许多其他有趣的联系,发现这种频繁模式起着至关重要的作用。此外,它对数据分类、聚类和其他数据挖掘任务也有帮助。因此,频繁模式的挖掘就成了一项重要的数据挖掘任务和数据挖掘研究关注的主题之一。

Apriori算法是Agrawal和R.Srikant于1994年提出的,是利用布尔关联规则进行频繁项集挖掘的原创性算法。正如我们将看到的,算法的名字基于这样的事实:算法使用频繁项集性质的先验知识。Apriori 算法使用一种称为逐层搜索的迭代方法,其中k项集用于探索 (k+1)项集。首先,通过扫描数据库,累计每个项的计数,并收集满足最小支持度的项,找出频繁1项集的集合。该集合记为L1。然后,使用L1找出频繁2项集的集合L2,使用L2找出L3,如此下去,直到不能再找到频繁k项集。找出每个Lk需要一次数据库的完整扫描。

规则的支持度(support)和置信度(confidence)是关联规则的两种度量。它们分别反映所发现规则的有用性和确定性。
频繁规则A=>B在事务集D中成立,具有支持度s,其中s是D中包含A∪B (即集合A和B的并集)的百分比。它是概率P(AUB)。规则A=>B在事务集D中具有置信度c,其中c是D中包含A的事务同时也包含B的事务的百分比。这是条件概率P(B|A)。即
support(A=>B) = P(AUB)
confidence(A=>B) = P(B|A)
同时满足最小支持度阈值(min_sup) 和最小置信度阈值(min_ conf) 的规则称为强规则。
前面的支持度是相对支持度,而某个项集的出现频率被称为绝对支持度。

算法应用实例

这里同样从书中引用一个例题,来看算法的具体应用,原理简单,感觉初中水平就能明白。
《数据挖掘概念与技术》(中文第三版)p161例6.3
该例基于下表的事务数据库D。该数据库有9个事务,即|D| =9。使用图6.2解释Apriori 算法发现D中的频繁项集。

(1) 在算法的第一次迭代时,每个项都是候选1项集的集合C1的成员。算法简单地扫描所有的事务,对每个项的出现次数计数。
(2) 假设最小支持度计数为2,即min_sup=2(这里谈论的是绝对支持度,因为使用的是支持度计数。对应的相对支持度为2/9 = 22%)。可以确定频繁1项集的集合L1。它由满足最小支持度的候选1项集组成。在我们的例子中,C1中的所有候选都满足最小支持度。
(3) 为了发现频繁2项集的集合L2,算法使用连接L1×L1产生候选2项集的集合 C2,C2由2项集组成。注意,在剪枝步,没有候选从C2中删除,因为这些候选的每个子集也是频繁的。
(4) 扫描D中事务,累计C2中每个候选项集的支持计数,如下图的第二行中间的表所示。
(5)然后,确定频繁2项集的集合L2,它由C2中满足最小支持度的候选2项集组成。
(6)候选3项集的集合C3的产生详细地列在图中。在连接步,首先令C3=L2×L2= {{I1, I2,I3}, {I1, I2,I5},{I1, B3, I5},{I2, I3, I4},{I2, I3, I5},{I2,14, I5}}。根据先验性质,频繁项集的所有子集必须是频繁的,可以确定后4个候选不可能是频繁的。因此,把它们从C3中删除,这样,在此后扫描D确定L3时就不必再求它们的计数值。注意,由于Apriori算法使用逐层搜索技术,给定一个候选k项集,只需要检查它们的(k-1)项子集是否频繁。C3 剪枝后的版本在下图底部的第一个表中给出。
(7)扫描D中事务以确定L3,它由C3中满足最小支持度的候选3项集组成。具体过程见下图。

(8)算法使用L3*L3产生候选4项集的集合C4。尽管连接产生结果{{I1, I2, I3,I5}},但是这个项集被剪去,因为它的子集{I2, I3,I5}不是频繁的。这样,C4=空集,因此算法终止,找出了所有的频繁项集。
候选项集和频繁项集的产生,最小支持度为2的过程图。

实现代码

傻瓜式实现,即不需要较高的编程水平和太深入的研究就能使用,但是结果也是很简单的。
首先将前面例题中的数据转换为下面的格式,保存在TXT文件中
1 2 5
2 4
2 3
1 2 4
1 3
2 3
1 3
1 2 3 5
1 2 3

然后,通过将下面的三行代码复制并保存为main.m文件,调用一系列函数,实现上述的算法,其他代码见文末链接,记得放在一起。
需要设置的包括两个数字和一个文件名。

minSup = 2 %最小支持度
minConf = 1 %最小置信度
apriori('data.txt', minSup*0.1, minConf);

最后,输出结果
这里最小支持度设置为2,最小置信度设置为1,结果如下

表中给出了支持度大于2,置信度大于1的所有规则。对应到A=>B中,第一列是A,第二列是B。第三列是置信度,第四列是啥还不知道,第五列是支持度。
例题的代码链接如下:
https://github.com/xyanglzu/aprioriMatlab
通过上面的代码进行调用。

傻瓜攻略(二)——MATLAB数据挖掘之Apriori算法实现相关推荐

  1. 傻瓜攻略(十二)——MATLAB实现偏最小二乘回归PLS

    这一定是一篇真正的傻瓜攻略,原理为根,算法为骨,应用为肉,傻瓜为皮. 本文主要介绍偏最小二乘回归的基本实现,主要内容基于司守奎<数学建模算法与应用>第11章,在其基础上进行优化. 偏最小二 ...

  2. 傻瓜攻略(六)——MATLAB实现RBF神经网络

    径向基函数(Radial Basis Function,RBF)神经网络是一种传统的神经网络,于1988年首次被提出.1989年,Jackson论证了RBF神经网络对非线性连续函数的一致逼近性能. R ...

  3. 傻瓜攻略(八)——MATLAB实现模糊综合评判(两种运算方法)

    模糊综合评判法 模糊综合评价法是一种基于模糊数学(fuzzy mathematics)的综合评价方法.该综合评价法根据模糊数学的隶属度理论把定性评价转化为定量评价,即用模糊数学对受到多种因素制约的事物 ...

  4. 傻瓜攻略(十五)——MATLAB中简单的聚类分析方法

    本文是对聚类分析较为简单的介绍,笔者自从大二开始接触数学建模,就使用过Q型聚类和R型聚类,但是一直到研一结束,都没有一个具体的认识,浅尝辄止,不敢言通.最近参加研究生数学建模比赛,又用到了R型聚类方法 ...

  5. 傻瓜攻略(十六)——MATLAB实现txt文件复杂内容的读取

    理想情况下,txt文件中的内容是很规则的,如下图,这样的文件导入是很简单的,参见傻瓜攻略(十一)--MATLAB实现指定文件夹中txt文件的批量读取 然而现实却是,我们想要导入的txt文件中往往含有比 ...

  6. SPM12 核磁数据预处理 傻瓜攻略

    写在最前:鉴于我自己脑子傻,请不要迷信这篇文章的方法的正确性,数据分析的方法真的很多,基于数据的差异可能在一些地方的设置或数据处理步骤都会有差异!也希望发现这篇文章哪里有错误或可以改进的大神可以评论指 ...

  7. 海淘iherb购物最新傻瓜攻略

    海淘iherb购物最新傻瓜攻略 这篇文档将介绍一个新人如何从美国iherb网站海淘母婴类奶粉,米粉等,保健品类蜂蜜,蜂胶等,及化妆品类,食品杂货类等等, 通过这篇文章的介绍, 我们可以不用出门就像从淘 ...

  8. Linux下架设邮件服务器全攻略(二)

    Linux下架设邮件服务器全攻略(二) (三)sendmail.cf难以配置,Sendmail的开发人员为sendmail的管理者提供了更加容易理解和配置的sendmail.mc文件. 一般情况下,要 ...

  9. 有趣的Python Challenge编程解谜游戏攻略二(5-9关)

    **有趣的Python Challenge编程解谜游戏攻略二(5-9关)** 介绍 游戏介绍 0-4关攻略 写在前面 关卡 第5关 第6关 第7关 第8关 第9关 链接总结 第10关预告 介绍 游戏介 ...

  10. 半自动化批量下载专利全文pdf傻瓜攻略

    半自动化批量下载专利全文pdf傻瓜攻略 写在前面 适合人群 使用前提 基本思路 键鼠记录器脚本 前期准备 脚本原理 注意事项 检查下载效果 写在前面 整理专利的时候,在专利引擎上只能一条条的下载,很是 ...

最新文章

  1. Ubuntu 11.04 Unity最常用的31个快捷键
  2. 织梦调用css的标签,织梦dede常用的调用标签(个人总结)
  3. POE交换机供电原理及工作过程
  4. comsol 多物理场仿真流程-以开关柜为例
  5. 1106: 回文数(函数专题)
  6. 为什么数据可视化很重要
  7. 3732 Ahui Writes Word
  8. java编写关机恶搞程序,恶搞关机脚本代码 | 学步园
  9. win10主题更换_小白如何做到不更换硬件提升电脑性能做到不卡顿?
  10. 我们到底在恐惧什么?
  11. 华为交换机升级包及补丁验证完整性
  12. 天津大学计算机专硕_天津大学计算机技术专硕考研参考书
  13. MATLAB导入EXCEL表格数据画散点图
  14. python的字符串切片操作
  15. MySQL 安装详细步骤
  16. 成功解决:XXX不在 sudoers 文件中,此事将被报告
  17. 在linux下安装xp系统
  18. PyTorch学习笔记:nn.Sigmoid——Sigmoid激活函数
  19. AMD公司2020财年第三季度收益电话会议
  20. web前端入门到实战:HTML5实现首页动态视频背景

热门文章

  1. 《老罗Android开发视频教程》老罗来交国庆的答卷了
  2. VSD Viewer for Mac(Visio绘图文件阅读器)
  3. 各国货币代码表(Currency Code)
  4. 单片机:DS1302时钟
  5. 零售销售数据分析案例实战
  6. NC5.X系列单点登录
  7. 信号系统与数字信号处理一点点心得
  8. 微信小程序商城源码,带前后端,基于node
  9. 《JAVA程序设计基础(第3版)实验指导》pdf 附下载链接
  10. MNIST数据集的下载