Apriori算法:布尔关联规则挖掘频繁项集的方法
该算法使用频繁项集性质的先验知识,Apriori算法使用一种逐层搜索的迭代方法,其中k项集用于探索(k+1)项集。首先,通过扫描数据库,累计每个项的技术,并收集满足最小支持度的项,找出频繁1项集的集合,该集合记为L1,然后使用L1找出频繁2项集的几个L2,使用L2找出L3......如此下去,知道不能再找出频繁k项集,找出每个Lk需要一次完整的数据库扫描。为了提高频繁项集逐层产生的效率,一种称为 先验性质(Apriori property)的重要性质用于压缩搜索空间。
先验性质:频繁项集的所有非空子集也一定是频繁的。
先验性质是基于如下观察,根据定义如果项集
I不满足最小支持杜阀值min_sup,则I是不频繁的,即P(I)<min_sup。如果把项A添加到项集I中,则结果项集(即I∪A)不可能比I更频繁出现因此I∪A也是不频繁的,即P(I∪A)<min_sup。
该性质属于一类特殊的性质,称为反单调性:如果一个集合不能通过测试,则他的所有超类也都不能通过相同的测试。
“如何在算法中使用先验性质?”为理解这一点,我们考察如何使用L
k-1找出
L
k,其中k>=2,下面的两步过程由连接步和剪枝步组成。
(1)连接步:
为找出Lk,通过将Lk-1与自身连接产生候选k项集合,该候选项集的集合为Ck,设l1和l2是Lk-1中的项集,为了有效地实现,Apriori算法嘉定实物或项集中的项按字典排序,之后执行连接操作Lk-1∞Lk-1,其中Lk-1是可连接的,如果他们前k-2个元素相同,如果(l1[1]=l2[1])∧(l1[2]=l2[2])∧......∧(l1[k-2]=l2[k-2])∧(l1[k-1]<l2[k-1]),则连接l1和l2产生的结果项集是{l1[1],l1[2]......,l1[k-1],l2[k-1]}。
(2)剪枝步:
Ck是Lk
的超集,Ck可以是也可以不是频繁的,但是所有的频繁项集都包含在Ck中,扫描数据库,确定Ck中每个候选的计数,从而确定Lk。
妈的不扯这些垃圾语言了 直接看例子:
Tid | 商品Id列表 | Tid | 商品Id列表 |
T100 | I1,I2,I5 | T600 | I2,I3 |
T200 | I2,I4 | T700 | I1,I3 |
T300 | I2,I3 | T800 | I1,I2,I3,I5 |
T400 | I1,I2,I4 | T900 | I1,I2,I3 |
T500 | I1,I3 |
其中的一些细节:
具体算法