Apriori算法的原理与关联规则挖掘过程
字数 2268 2025-10-28 08:36:45
Apriori算法的原理与关联规则挖掘过程
题目描述
Apriori算法是一种经典的关联规则挖掘算法,用于从大规模数据集中发现频繁项集(即经常一起出现的物品组合)及其关联规则。例如,在购物篮分析中,它可以帮助发现“购买啤酒的顾客也常购买尿布”这样的规律。算法的核心挑战是如何高效地找出所有支持度(出现频率)不低于设定阈值的项集,并基于此生成可信的关联规则。
解题过程
1. 核心概念定义
- 项集(Itemset):一组物品的集合,如 {啤酒, 尿布}。
- 支持度(Support):项集在数据集中出现的频率,即包含该项集的事务数除以总事务数。例如,支持度阈值设为0.5表示项集需出现在至少50%的交易中。
- 频繁项集(Frequent Itemset):支持度不低于设定阈值的项集。
- 关联规则:形如 \(X \to Y\) 的规则,表示若项集 \(X\) 出现,则 \(Y\) 也可能出现。
- 置信度(Confidence):规则 \(X \to Y\) 的可信度,计算为 \(\frac{\text{支持度}(X \cup Y)}{\text{支持度}(X)}\)。
2. Apriori原理:减少搜索空间
- 关键思想:若一个项集是频繁的,则其所有子集也必须是频繁的(反之,若某子集不频繁,则超集一定不频繁)。
- 示例:若 {啤酒, 尿布} 频繁,则 {啤酒} 和 {尿布} 必须频繁;若 {牛奶} 不频繁,则 {牛奶, 啤酒} 一定不频繁。
3. 算法步骤
步骤1:找出所有频繁项集
- 输入:事务数据集 \(D\)、最小支持度阈值 \(\text{min\_sup}\)。
- 过程(迭代进行,直到无法生成新的候选项集):
- 候选生成:基于上一轮的频繁项集 \(L_{k-1}\),通过连接和剪枝生成候选项集 \(C_k\)(大小为 \(k\) 的项集)。
- 连接:将 \(L_{k-1}\) 中前 \(k-2\) 项相同、最后一项不同的项集两两连接,生成 \(C_k\)。
- 剪枝:若 \(C_k\) 中某项集的任意 \(k-1\) 子集不在 \(L_{k-1}\) 中,则删除该项集(基于Apriori原理)。
- 支持度计数:扫描数据集,计算每个候选项集的支持度。
- 筛选:保留支持度 ≥ \(\text{min\_sup}\) 的项集,得到 \(L_k\)。
- 候选生成:基于上一轮的频繁项集 \(L_{k-1}\),通过连接和剪枝生成候选项集 \(C_k\)(大小为 \(k\) 的项集)。
示例演示(最小支持度 = 2/4)
| 事务ID | 物品集合 |
|---|---|
| 1 | {面包, 牛奶} |
| 2 | {面包, 尿布, 啤酒} |
| 3 | {牛奶, 尿布, 啤酒} |
| 4 | {面包, 牛奶, 尿布} |
-
第一轮(k=1):
- 候选项集 \(C_1\):{面包}, {牛奶}, {尿布}, {啤酒}
- 支持度计数:面包(3), 牛奶(3), 尿布(3), 啤酒(2)
- 频繁项集 \(L_1\):全部保留(支持度均≥2)
-
第二轮(k=2):
- 连接生成 \(C_2\):{面包,牛奶}, {面包,尿布}, {面包,啤酒}, {牛奶,尿布}, {牛奶,啤酒}, {尿布,啤酒}
- 剪枝:所有项集的子集(单个物品)均在 \(L_1\) 中,无剪枝。
- 支持度计数:{面包,牛奶}(2), {面包,尿布}(2), {面包,啤酒}(1), {牛奶,尿布}(2), {牛奶,啤酒}(1), {尿布,啤酒}(2)
- 频繁项集 \(L_2\):删除支持度<2的项集,保留 {面包,牛奶}, {面包,尿布}, {牛奶,尿布}, {尿布,啤酒}
-
第三轮(k=3):
- 连接:从 \(L_2\) 中前一项相同的项集连接,如 {面包,牛奶} 和 {面包,尿布} 生成 {面包,牛奶,尿布};{牛奶,尿布} 和 {尿布,啤酒} 无法连接(前一项不同)。
- 剪枝:检查 {面包,牛奶,尿布} 的2项子集 {牛奶,尿布}(在 \(L_2\) 中)、{面包,尿布}(在 \(L_2\) 中)、{面包,牛奶}(在 \(L_2\) 中),无需剪枝。
- 支持度计数:{面包,牛奶,尿布} 出现在事务2和4,支持度=2。
- 频繁项集 \(L_3\):{面包,牛奶,尿布}
-
第四轮(k=4):无法生成新候选项集,算法终止。
4. 生成关联规则
- 从频繁项集 \(L\) 中生成所有非空子集 \(X\) 和 \(Y = L \setminus X\) 的规则 \(X \to Y\)。
- 计算置信度:\(\text{置信度} = \frac{\text{支持度}(L)}{\text{支持度}(X)}\)。
- 保留置信度 ≥ 设定阈值(如0.6)的规则。
示例:从频繁项集 {面包,牛奶,尿布}(支持度=2)生成规则:
- {面包} → {牛奶,尿布}:置信度 = 2/3 ≈ 0.67
- {牛奶,尿布} → {面包}:置信度 = 2/2 = 1.0
- 若最小置信度=0.6,则两条规则均保留。
关键优化与挑战
- 优化:通过剪枝减少候选项集数量,避免计算所有组合。
- 挑战:多次扫描数据集导致I/O开销大;适合稀疏数据,稠密数据效率较低。
通过以上步骤,Apriori算法系统性地挖掘出数据中的频繁模式与关联规则。