关联规则挖掘算法:Apriori

     所谓的关联规则(Association Rule)主要是指数据中的并发关系,最典型的的应用就是对购物篮的分析,发现所有的老爸买尿布的时候都会买啤酒。


    关联规则挖掘中有一些容易混淆的术语,详见http://blog.sina.com.cn/s/blog_4d8d6303010009kb.html ,这里有两个很重要的概念:支持度和置信度。通俗的说,支持度就是所有的顾客中有多少顾客买了尿布和啤酒(支持度过低,说明该规则实际中较少出现,没有应用价值);置信度就是所有买了尿布的顾客中有多少买了啤酒的(置信度过低,说明买尿布就会买啤酒这条规则不太可靠)


    Apriori算法的实质十分简单:首先找出所有只包含一个项目的规则,然后合成包含两个项目的规则(中间需要进行剪枝),以此类推。


    Aprior算法流程图:    

   

 Candidate-gen函数流程图:


    接下来我将用一个实际的例子来描述Apriori算法的过程:

    假设我们要求的最小支持度minsup=30%,最小置信度mincond=80%。再次介绍两个十分重要的术语:

    k项频繁集(包含k个项目的支持度公安与minsupde 项目集合)。

    向下闭包属性(Downward Closure Property)这个属性是算法的一个核心,即如果一个项集为频繁项目集,那么它的所有非空子集也是频繁项目集;很明显,若集合{1,2}是频繁项集,那么{1},{2}肯定也是频繁项集(因为包含1,2的交易一定包含1,但包含1的交易不一定包含1,2)。

  

  Apriori算法的第一个主要步骤是使用前一轮产生的频繁项集Fk-1(一般初始化为只含一个项目的频繁集),通过candidate-gen函数来生成候选项集Ck。这里来介绍一下candidate-gen函数。该函数主要包含合并剪枝两个步骤。

    合并:就是使用两个(k-1)频繁项集生成k频繁项集,首先注意每个项集里的项目都是按一定顺序排序的,这里要求两个频繁项集的前k-2个项要相同只有最后一个不同。具体来说就是频繁集{1,3}和{1,5}合成{1,3,5}。你一定要问了{1,3}和{3,5}能合成{1,3,5}吗?答案是不能,因为根据向下闭包原则,如果{1,3,5}是频繁集那么{1,3}{1,5}{3,5}都是频繁集,想想如果{1,5}是频繁集的话,那么就可以直接用{1,3}和{1,5}来合成{1,3,5}了,没必要使用{3,5},所以这里的合并必须要求前k-2项是相同的,只有最后一项是不同的。

    剪枝:就是检查所有候选集Ck的子集是否是频繁集,如果有一个子集不是,则删除Ck。例如前面通过{1,3}和{1,5}产生的{1,3,5},如果{3,5}不是频繁集则{1,3,5}肯定也不是频繁集。

    Apriori算法的最后一步就是检查新的候选集合中所有项集的支持度,符合要求的就进行下一轮筛选。

   

  最后讲讲如何根据生成的频繁项集来生产规则。根据Apriori算法生成了频繁项目集f,那么所有的关联规则都可以表示为(f-a) -> a,并且可以继续推断(f-b(b为a的子集)) -> b,必然成立。因为置信度=f.count/(f-a).count,其中a集合越小,f-a集合越大,(f-a).count越小,总的置信度也越大,这就是所谓的数据稀疏原理(越是大的数据集合在实际中出现的次数越小)。生成规则的过程类似于Apriori算法,首先找出频繁集f的所有后件为1的规则,然后利用candidate-gen函数类推,只不过里面是将支持度检验换为置信度检验即可。


  Apriori的一个具体实现的例子:http://blog.csdn.net/lskyne/article/details/8302478

最近几年,例如YAGO和DBpedia等大规模知识库发展有了很大的进步。知识库提供了大量的不同种类的实体信息,如人、国家、河流、城市大学等等,同时知识库包含了大量的在实体(entity)间的关系既事实(fact)。当今的知识库包含的数据量是巨大的通常有百万个实体和上亿个描述实体间关系的事实数据。 虽然目前的知识库存在大量的实体和事实数据,但是这样大规模的数据仍然不完整。目前构建知识库的方法主要有两种,一种是从大量的文本中抽取事实但这种方法必然会带来大量的噪声数据,第二是人工扩展,但这样的方法对于时间的开销是极大的。如果确保一个知识库是完整的则必须花费很大的努力来抽取大量的事实,并检查事实的正确性,因为只有正确的事实加入到知识库中才是有意义的。同时知识库的本身由于有足够的信息可以推理出更多的新的事实。例如有这样一个例子,一个知识库包含一组事实是孩子c有一个妈妈m,这样可以推理得出孩子妈妈的丈夫f很可能是孩子的父亲。该逻辑规则形式化的描述如下: motherof(m,c)∧marriedTo(m,f)⟹fatherof(f,c) 挖掘这种规则可帮助做一下四种事情:1、利用这种规则来推理出新的事实,而这些被挖掘出的新的事实可以使知识库更完整。2、这些规则可以检测出知识库潜在的错误例如一个陈述是一个与一个男孩无关的人是这个男孩的父亲,这样的陈述很可能是错误的。3、有很多推理工具依赖其他工具提供规则,所以这些被挖掘出来的规则可以用于推理。4、这些规则描述一个普遍的规律,这些规律可以帮我我们理解分析知识库中的数据,如找到一些国家通常与说同一种语言的国家交易。或结婚是一个对称关系,或使用同一个乐器的音乐家通常互相影响等等。 AMIE的目标是从RDF格式的知识库中挖掘如上所述的逻辑规则,在语义网(Semantic Web)中存在大量的RDF知识库如YAGO、Freebase和DBpedia等。这些知识库使用RDF三元组(S,P,O)提供二元关系(binary relation)的描述。由于知识库一般只包含正例而(S,P,O)没有反例(S,¬P,O),所以RDF这样的知识库中仅能通过正例来推理。进一步来说在RDF知识库上的操作是基于开放世界假设(OWA)的。在开放世界假设下,一个事实没有在知识库中存在那么我们不能说这个事实是错误的,只能说这个陈述是未知的。这与标准的数据库在封闭世界假设的设定有本质上的区别。例如在知识库中没有包含marry(a,b),在封闭世界假设中我们可以得出这个a没有和b结婚而在开放世界假设下我们只能说a可能结婚了也可能单身。 压缩包内包含AMIE可运行源代码与相应文档资料,欢迎下载参考
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值