学习笔记之数据挖掘 Apriori 算法
关联规则
设 A 是一个由项目构成的集合,称为项集。如果项集 A 中包含 k 个项目,则称其为 k 项集。项集 A 在事务数据库 D 中出现的次数占 D 中总事务的百分比叫做项集的支持度。如果项集的支持度超过用户给定的最小支持度阈值,就称该项集是频繁项集(或频集)。
关联规则的信任度为 Support(X∪Y)/support(X) S u p p o r t ( X ∪ Y ) / s u p p o r t ( X )
关规则挖掘算法
- Agrawal 等人提出的 AIS, Apriori 和 AprioriTid
- Cumulate 和 Stratify, Houstsma 等人提出的 SETM
- Park 等人提出的 DHP
- Savasere 等人的 PARTITION
- Han 等人提出的不生成候选集直接生成频繁模式 FPGrowth
- 其中最有效和有影响的算法为 Apriori, DHP, PARTITION 和 FPGrowth
步骤
通过迭代,检索出事务数据库中的所有频繁项集,即支持度不低于用户设定的阈值的项集;利用频繁项集构造出满足用户最小信任度的规则;挖掘或识别出所有频繁项集是该算法的核心,占整个计算量的大部分。
- 连接步:为找 Lk L k 通过将 Lk−1 L k − 1 与自身连接产生候选 k 项集的集合。 Lk L k 表示 k 项集。
- 剪枝步: Ck C k 是 Lk L k 的超集,也就是说, Ck C k 的成员可以是,也可以不是频繁的,但所有的频繁 k 项集都包含在 Ck C k 中。任何非频繁的 (k-1) 项集都不是频繁 k 项集的子集。
例子
其他例子: https://blog.csdn.net/v_july_v/article/details/6279498
性质
频繁项集的所有非空子集必为频繁项集;
{a, b, c, d} 出现的频次很高,那么,{a}, {a, b} 出现的频次也一定高。
非频繁项集的超集一定是非频繁的。
如果 {a, b, c} 出现 10 次,则 {a, b, c, d} 出现的频次一定是小于等于 10 的。
不足
- Ck C k 的项集是用来产生频繁集的候选集。
- 最后的频繁集 Lk L k 必须是 Ck C k 的一个子集。 Ck C k 中的每个元素在交易数据库中进行验证来决定其是否加入 Lk L k 。
- 验证过程是性能瓶颈。
交易数据库可能非常大;比如频繁集最多包含 10 个项,那么就需要扫描交易数据库 10 遍,需要很大的 I/O 负载。