一、介绍
Apriori算法是经典的挖掘频繁项集和关联规则的数据挖掘算法。
关联规则的经典故事:美国的妇女们经常会嘱咐她们的丈夫下班后为孩子买尿布,而丈夫在买完尿布后又要顺手买回自己爱喝的啤酒,因此啤酒和尿布在一起被购买的机会很多。这个举措使尿布和啤酒的销量双双增加,并一直为众商家所津津乐道。
二、基本概念
项与项集:设itemset={item1, item_2, …, item_m}是所有项的集合,其中,item_k(k=1,2,…,m)称为项。项的集合称为项集(itemset),包含k个项的项集称为k项集(k-itemset)。
事务与事务集:一个事务T是一个项集,它是itemset的一个子集,每个事务均与一个唯一标识符Tid相联系。不同的事务一起组成了事务集D,它构成了关联规则发现的事务数据库。
关联规则:关联规则是形如A=>B的蕴涵式,其中A、B均为itemset的子集且均不为空集,而A交B为空。
支持度:一个项集或者规则在所有事物中出现的频率,确定规则可以用于给定数据集的频繁程度。σ(A):表示项集A的支持度计数
项集A的支持度:s(A)=σ(A) / n;
例:{11}的支持度为6/9=0.67;{11,12}的支持度为4/9=0.44
规则A => B的支持度:s(A => B) = σ(A∪B) / n
例:{11,12} =>{13}的支持度为2/9=0.22;
简单地说,A=>B的支持度就是指物品集A和物品集B同时出现的概率。
置信度:确定B在包含A的事务中出现的频繁程度。c(A => B) = σ(A∪B)/σ(A)。
物品集A对物品集B的置信度confidence(A=>B)=P(A|B)
例:{11} =>{12}的置信度为4/6=0.67;
简单地说,可信度就是指在出现了物品集A 的事务T 中,物品集B 也同时出现 的概率有多大。
支持度:就是概率(一项就是其出现的概率,多项就是其同时出现的概率)
置信度:条件概率(A出现后,B也出现的概率)
频繁项集:如果项集A的相对支持度满足事先定义好的最小支持度阈值(即A的出现频度大于相应的最小出现频度(支持度计数)阈值),则A是频繁项集。
强关联规则:满足最小支持度和最小置信度的关联规则,即待挖掘的关联规则。
支持度是一种重要的度量,因为支持度很低的规则可能只是偶然出现,低支持度的规则多半也是无意义的。因此,支持度通常用来删去那些无意义的规则;
置信度是度量通过规则进行推理的可靠性。对于给定的规则A → B,置信度越高,B在包含A的事物中出现的可能性就越大。即B在给定A下的条件概率P(B|A)越大。
总之,可信度是对关联规则的准确度的衡量,支持度是对关联规则重要性的衡量。
支持度说明了这条规则在所有事务中有多大的代表性,显然支持度越大,关联规则越重要。有些关联规则可信度虽然很高,但支持度却很低,说明该关联规则实用的机会很小,因此也不重要。
三、算法
1.先验原理
在上一小节的末尾,我们已经看到Brute-force在实际中并不可取。我们必须设法降低产生频繁项集的计算复杂度。此时我们可以利用支持度对候选项集进行剪枝,这也是Apriori所利用的第一条先验原理:
Apriori定律1:如果一个集合是频繁项集,则它的所有子集都是频繁项集。
例如:假设一个集合{A,B}是频繁项集,即A、B同时出现在一条记录的次数大于等于最小支持度min_support,则它的子集{A},{B}出现次数必定大于等于min_support,即它的子集都是频繁项集。
Apriori定律2:如果一个集合不是频繁项集,则它的所有超集都不是频繁项集。
举例:假设集合{A}不是频繁项集,即A出现的次数小于 min_support,则它的任何超集如{A,B}出现的次数必定小于min_support,因此其超集必定也不是频繁项集。
2.算法步骤
四、优缺点
优点
缺点
https://blog.csdn.net/guoziqing506/article/details/60882713