关联规则挖掘在电商、零售、大气物理、生物医学已经有了广泛的应用,本篇文章将介绍一些基本知识和Aprori算法。
啤酒与尿布的故事已经成为了关联规则挖掘的经典案例,还有人专门出了一本书《啤酒与尿布》,虽然说这个故事是哈弗商学院杜撰出来的,但确实能很好的解释关联规则挖掘的原理。我们这里以一个超市购物篮迷你数据集来解释关联规则挖掘的基本概念:
表中的每一行代表一次购买清单(注意你购买十盒牛奶也只计一次,即只记录某个商品的出现与否)。数据记录的所有项的集合称为总项集,上表中的总项集S={牛奶,面包,尿布,啤酒,鸡蛋,可乐}。
一、关联规则、自信度、自持度的定义
关联规则就是有关联的规则,形式是这样定义的:两个不相交的非空集合X、Y,如果有X-->Y,就说X-->Y是一条关联规则。举个例子,在上面的表中,我们发现购买啤酒就一定会购买尿布,{啤酒}-->{尿布}就是一条关联规则。关联规则的强度用支持度(support)和自信度(confidence)来描述,
支持度的定义:support(X-->Y) = |X并Y|/N=集合X与集合Y中的项在一条记录中同时出现的次数/数据记录的个数。例如:support({啤酒}-->{尿布}) = 啤酒和尿布同时出现的次数/数据记录数 = 3/5=60%。
自信度的定义:confidence(X-->Y) = |X并Y|/|X| = 集合X与集合Y中的项在一条记录中同时出现的次数/集合X出现的个数 。例如:confidence({啤酒}-->{尿布}) = 啤酒和尿布同时出现的次数/啤酒出现的次数=3/3=100%;confidence({尿布}-->{啤酒}) = 啤酒和尿布同时出现的次数/尿布出现的次数 = 3/4 = 75%。
这里定义的支持度和自信度都是相对的支持度和自信度,不是绝对支持度,绝对支持度abs_support = 数据记录数N*support。
支持度和自信度越高,说明规则越强,关联规则挖掘就是挖掘出满足一定强度的规则。
二、关联规则挖掘的定义与步骤
关联规则挖掘的定义:给定一个交易数据集T,找出其中所有支持度support >= min_support、自信度confidence >= min_confidence的关联规则。
有一个简单而粗鲁的方法可以找出所需要的规则,那就是穷举项集的所有组合,并测试每个组合是否满足条件,一个元素个数为n的项集的组合个数为2^n-1(除去空集),所需要的时间复杂度明显为O(2^N),对于普通的超市,其商品的项集数也在1万以上,用指数时间复杂度的算法不能在可接受的时间内解决问题。怎样快速挖出满足条件的关联规则是关联挖掘的需要解决的主要问题。
仔细想一下,我们会发现对于{啤酒-->尿布},{尿布-->啤酒}这两个规则的支持度实际上只需要计算{尿布,啤酒}的支持度,即它们交集的支持度。于是我们把关联规则挖掘分两步进行:
1)生成频繁项集
这一阶段找出所有满足最小支持度的项集,找出的这些项集称为频繁项集。
2)生成规则
在上一步产生的频繁项集的基础上生成满足最小自信度的规则,产生的规则称为强规则。
关联规则挖掘所花费的时间主要是在生成频繁项集上,因为找出的频繁项集往往不会很多,利用频繁项集生成规则也就不会花太多的时间,而生成频繁项集需要测试很多的备选项集,如果不加优化,所需的时间是O(2^N)。
三、Apriori定律
为了减少频繁项集的生成时间,我们应该尽早的消除一些完全不可能是频繁项集的集合,Apriori的两条定律就是干这事的。
Apriori定律1):如果一个集合是频繁项集,则它的所有子集都是频繁项集。举例:假设一个集合{A,B}是频繁项集,即A、B同时出现在一条记录的次数大于等于最小支持度min_support,则它的子集{A},{B}出现次数必定大于等于min_support,即它的子集都是频繁项集。
Apriori定律2):如果一个集合不是频繁项集,则它的所有超集都不是频繁项集。举例:假设集合{A}不是频繁项集,即A出现的次数小于min_support,则它的任何超集如{A,B}出现的次数必定小于min_support,因此其超集必定也不是频繁项集。
利用这两条定律,我们抛掉很多的候选项集,Apriori算法就是利用这两个定理来实现快速挖掘频繁项集的。
四、Apriori算法
Apriori是由a priori合并而来的,它的意思是后面的是在前面的基础上推出来的,即先验推导,怎么个先验法,其实就是二级频繁项集是在一级频繁项集的基础上产生的,三级频繁项集是在二级频繁项集的基础上产生的,以此类推。
Apriori算法属于候选消除算法,是一个生成候选集、消除不满足条件的候选集、并不断循环直到不再产生候选集的过程。
上面的图演示了Apriori算法的过程,注意看由二级频繁项集生成三级候选项集时,没有{牛奶,面包,啤酒},那是因为{面包,啤酒}不是二级频繁项集,这里利用了Apriori定理。最后生成三级频繁项集后,没有更高一级的候选项集,因此整个算法结束,{牛奶,面包,尿布}是最大频繁子集。
算法的思想知道了,这里也就不上伪代码了,我认为理解了算法的思想后,子集去构思实现才能理解更深刻,这里贴一下我的关键代码:
public static void main(String[] args) { // TODO Auto-generated method stub record = getRecord();// 获取原始数据记录 List<List<String>> cItemset = findFirstCandidate();// 获取第一次的备选集 List<List<String>> lItemset = getSupportedItemset(cItemset);// 获取备选集cItemset满足支持的集合 while (endTag != true) {// 只要能继续挖掘 List<List<String>> ckItemset = getNextCandidate(lItemset);// 获取第下一次的备选集 List<List<String>> lkItemset = getSupportedItemset(ckItemset);// 获取备选集cItemset满足支持的集合 getConfidencedItemset(lkItemset, lItemset, dkCountMap, dCountMap);// 获取备选集cItemset满足置信度的集合 if (confItemset.size() != 0)// 满足置信度的集合不为空 printConfItemset(confItemset);// 打印满足置信度的集合 confItemset.clear();// 清空置信度的集合 cItemset = ckItemset;// 保存数据,为下次循环迭代准备 lItemset = lkItemset; dCountMap.clear(); dCountMap.putAll(dkCountMap); }
如果想看完整的代码,可以查看我的github,数据集的格式跟本文所述的略有不通,但不影响对算法的理解。
http://tech.ddvip.com/2013-11/1384961923206275.html
相关推荐
这是一个关于数据挖掘中关联规则之Aprior算法的实现。这是从网上找到的一个别人写好的程序,本人只是对这个程序进行了轻微的修改;本人忘记了这个程序是由谁写的,所以如果您发现这个程序的原创作者,可以联系本人,...
Apriori算法是 association rule learning 中的一种经典算法,主要用于发现频繁项集和关联规则。该算法由 Rakesh Agrawal 等人于 1994 年提出,广泛应用于数据挖掘、机器学习和商业智能等领域。 Apriori 算法的...
西电数据挖掘作业——关联规则aprior算法python实现,我自己在python3.6已经能够成功实现,没有问题
在这个过程中,关联规则学习是数据挖掘的一个关键任务,而Apriori算法则是关联规则挖掘的经典算法之一。Apriori算法由Raghu Ramakrishnan和Graeme K. Selinger于1994年提出,其核心思想是通过频繁项集的生成和剪枝来...
经典的关联规则挖掘算法是Apriori,它基于频繁项集的概念来发现有趣的关联规则。Apriori算法通过生成一系列的候选集并进行迭代来找出频繁项集,其核心思想是“如果一个项集不频繁,那么它的任何子集也不可能频繁”。...
描述中的“关联分析aprior算法及在灵长类动物DNA序列识别中的应用”进一步强调了Apriori算法在DNA序列分析中的实际应用。关联分析是数据挖掘的一个重要分支,其目的是找出数据集中隐藏的有趣的关联或相关性。在灵长...
Aprior算法是一种经典的关联规则挖掘方法,由R. Agrawal和R. Srikant在1994年提出,主要用于从大规模交易数据库中发现频繁项集和强关联规则。在数据挖掘和知识发现领域,Aprior算法因其高效性和实用性而备受青睐。...
关联规则挖掘是数据挖掘领域中的一个重要方法,它用于发现数据集中项集之间的有趣关系,比如购物篮分析中商品之间的关联性。在这个主题中,我们主要关注两种经典的算法:Apriori 和 FP-growth。 **Apriori 算法** ...
- **理论介绍**:关于关联规则挖掘和APRIOR算法的基本概念、原理和步骤。 - **代码实现**:用不同编程语言(如Python、Java或R)实现的APRIOR算法,包括数据预处理、频繁项集挖掘和规则生成的函数。 - **实验数据**...
在数据挖掘领域,关联规则学习是一种寻找数据中项集之间有趣关系的方法,而Apriori算法是其中最为经典和广泛使用的算法之一。本项目聚焦于使用Java编程语言来实现Apriori算法,以应用于超市商品的关联规则挖掘,旨在...
Apriori关联规则挖掘是一种经典的、基于频繁项集的挖掘算法,主要用于发现数据集中隐藏的有趣关系,如购物篮分析中的商品组合。Python作为一种强大的数据分析工具,提供了多种库来实现Apriori算法,使得非专业程序员...
在数据挖掘中,关联规则是一种重要的分析工具,它用于发现数据集中项集之间的有趣关系。Apriori算法是关联规则学习中最经典的算法之一,由Raghu Ramakrishnan和Gehrke在1994年提出,主要用于找出频繁项集并生成强...
数据挖掘是信息技术领域的一个关键分支,它通过分析大量数据,揭示隐藏的模式、规律和关联,以支持决策和预测。在众多的数据挖掘方法中,Apriori算法因其高效性和广泛适用性而备受关注。本文将深入探讨Apriori算法的...
最后,文章提到了可视化挖掘模型的实现方法,尽管具体的实现细节在给定内容中未被详细描述,但是可以推测该实现方法涉及到将Apriori算法的计算过程以及挖掘出的关联规则以直观的图形方式展示,从而使得分析人员能够...
本程序是数据挖掘中的本程序是数据挖掘中的关联规则模型中著名的Aprior算法的VC实现程序,可用于知识发现、数据挖掘、人工智能、模式识别等领域(请先解压文件)模型中著名的Aprior算法的VC实现程序,可用于知识发现...
在IT领域,简单算法是构建复杂系统的基础,其中包括k近邻(K-Nearest Neighbors,简称knn)、决策树和关联规则学习中的Apriori算法。这些算法在数据分析、机器学习和数据挖掘中有着广泛的应用。下面我们将逐一探讨这...
利用APRIORI算法找出频繁集,计算置信度与支持度,支持多种格式的数据
Apriori算法是一种经典的关联规则挖掘算法,由R. Agrawal和R. Srikant于1994年提出,主要用于发现数据集中频繁项集和强关联规则。该算法的核心思想是“频繁项集的任何子集也必须是频繁的”,即如果一个项集不频繁,...