Apriori算法是一种用于挖掘数据集中频繁项集的关联规则学习的经典算法。它基于“Apriori原理”,即如果一个项集是频繁的,那么它的所有子集也必须是频繁的。该算法通过不断生成新的频繁项集来实现。
Apriori算法的基本步骤如下:
- 设置最小支持阈值(例如总交易额的2%)并扫描数据集以生成符合阈值的频繁项集的列表。
- 使用第1步中的频繁项集生成下一级的候选项集列表,这些项集至少具有一个共同的项目。
- 再次扫描数据集,确定哪些候选项集实际上是频繁的,即检查它们是否符合支持阈值。
- 重复步骤2和3,直到不能生成更多的频繁项集。
- 使用之前步骤生成的频繁项集生成关联规则。
Apriori算法具有较高的时间复杂度,因此不适合大型数据集。但是,已经开发了几种优化版本来提高其效率。
这是一个在 Python 中实现 Apriori 算法的示例:
import itertools
def apriori(transactions, min_support): # 创建事务中唯一项目的列表 items = set([item for transaction in transactions for item in transaction])
# 初始化频繁项集列表 frequent_itemsets = []
# 遍历唯一项目 for item in items: # 统计每个项目在事务中出现的次数 item_count = sum([1 for transaction in transactions if item in transaction])
# 如果项目的支持度大于等于最小支持度 if item_count/len(transactions) >= min_support: # 将项目添加到频繁项集列表中 frequent_itemsets.append((item, item_count))
# 遍历频繁项集列表 for i in range(1, len(frequent_itemsets)): # 创建所有可能的项集组合列表 combinations = list(itertools.combinations(frequent_itemsets, i))
# 遍历组合 for combination in combinations: # 统计组合在事务中出现的次数 combination_count = sum([1 for transaction in transactions if set(combination).issubset(transaction)])
# 如果组合的支持度大于等于最小支持度 if combination_count/len(transactions) >= min_support: # 将组合添加到频繁项集列表中 frequent_itemsets.append(combination)
# 返回频繁项集列表 return frequent_itemsets
# 示例用法 transactions = [['A', 'B', 'C'], ['B', 'C', 'D'], ['A', 'B', 'D'], ['B', 'C', 'E']] min_support = 0.5 print(apriori(transactions, min_support))