一、整体流程概述
以下实现了 Apriori 算法来挖掘频繁项集和生成关联规则。
主要步骤包括:
- 数据加载:通过
loadDataSet
函数加载原始数据集,它返回一个包含多个交易记录的列表,每个交易记录是一个包含商品项的列表。 - 构建初始项集:
creatC1
函数创建候选 1 项集,从数据集中找出所有不同的单个商品项,并转换为不可变集合(frozenset
)形式,同时去除重复项并排序。 - 扫描数据集:
scanD
函数用于扫描数据集,计算候选项集的支持度。它遍历数据集中的每一条交易记录和候选项集列表中的每一个候选项,检查候选项是否是交易记录的子集,如果是则增加该候选项的计数值。最后,根据设定的最小支持度,筛选出支持度大于最小支持度的候选项集,并返回这些频繁项集以及它们的支持度数据。 - 生成候选项集:
aprioriGen
函数根据已有的频繁项集生成新的候选项集。它遍历当前的频繁项集列表,通过两两组合的方式生成新的项集,确保新项集的元素个数比原来的频繁项集多一个。 - Apriori 算法主函数:
apriori
函数是 Apriori 算法的核心实现。它首先调用createC1
生成初始的候选项集,然后通过不断调用aprioriGen
和scanD
来迭代地生成新的候选项集和筛选频繁项集,直到没有新的频繁项集生成为止。 - 生成关联规则:
generateRules
函数从频繁项集生成关联规则。它遍历不同长度的频繁项集,对于每个频繁项集,根据其长度选择不同的方式生成关联规则。如果是频繁 2 项集,直接调用calConf
函数计算置信度并生成关联规则;如果项集长度大于 2,则调用rulessFromConseq
函数从后项集合生成更多关联规则。 - 计算置信度和筛选后项:
calConf
函数用于计算给定频繁项集和后项集合中各个后项的置信度,并根据最小置信度阈值筛选出满足要求的后项。它遍历后项集合,计算置信度,将满足最小置信度要求的后项添加到列表中,并返回这个列表。 - 递归生成更多规则:
rulessFromConseq
函数用于从给定的频繁项集和后项集合中生成更多的关联规则。它首先检查频繁项集的长度是否大于后项集合元素项数加 1,如果满足条件,则生成新的后项集合,计算置信度,然后递归调用自身继续生成更多规则。
二、函数功能详解
-
loadDataSet
:- 功能:简单地返回一个固定的数据集,用于测试和演示 Apriori 算法。在实际应用中,可以从文件、数据库或其他数据源读取数据。
- 示例:
return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]
返回了一个包含四个交易记录的数据集。
-
creatC1
:- 功能:构建初始的候选 1 项集。遍历数据集中的每个交易记录,提取出其中的单个商品项,去重、排序后转换为不可变集合形式。
- 示例:对于输入的数据集
[[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]
,该函数会生成一个包含frozenset({1})
、frozenset({2})
、frozenset({3})
、frozenset({4})
、frozenset({5})
的列表。