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

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

频繁模式与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
通过上面的代码进行调用。

  • 5
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Apriori算法是一种常见的关联规则挖掘算法,用于发现数据集中项集之间的关联关系。Apriori算法基于频繁项集的概念,即在数据集中经常出现的项集。该算法首先生成所有可能的项集,然后通过剪枝来移除不频繁的项集,最终得到频繁项集。 Apriori算法的核心思想是利用“先验知识”(即Apriori原理)来减少候选项集的数量。Apriori原理指的是,如果一个项集是频繁的,则它的所有子集也一定是频繁的。因此,在执行Apriori算法时,我们只需要考虑频繁项集,而不需要考虑非频繁项集。这样就可以减少候选项集的数量,从而提高算法的效率。 Apriori算法的步骤如下: 1. 扫描数据集,计算每个项的支持度(即在数据集中出现的次数)。 2. 根据最小支持度阈值,生成频繁1项集。 3. 基于频繁1项集,生成候选2项集。 4. 扫描数据集,计算候选2项集的支持度,并根据最小支持度阈值筛选出频繁2项集。 5. 基于频繁2项集,生成候选3项集。 6. 重复步骤4和5,直到无法生成新的频繁项集为止。 Apriori算法的优点是简单易懂,实现较为容易。但是,它的缺点也比较明显,即在处理大规模数据集时,需要枚举所有可能的项集,导致计算复杂度较高。同时,由于候选项集的数量会随着项集大小的增加而指数级增长,因此算法的效率会随着项集大小的增加而降低。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值