apriori 应用举例代码实战
时间: 2023-09-14 16:12:51 浏览: 82
以下是一个使用Python实现Apriori算法的示例代码:
```python
from itertools import combinations
def apriori(transactions, min_support):
"""
Apriori算法实现函数
:param transactions: 二维列表,每个列表表示一个顾客购买的商品清单
:param min_support: 最小支持度阈值
:return: 频繁项集列表
"""
# 计算所有商品的支持度
item_counts = {}
for transaction in transactions:
for item in transaction:
item_counts[item] = item_counts.get(item, 0) + 1
# 根据最小支持度阈值过滤掉不频繁的商品
frequent_items = {item: count for item, count in item_counts.items() if count >= min_support}
# 迭代计算更高阶的频繁项集
k = 2
frequent_itemsets = {1: frequent_items}
while frequent_itemsets[k-1]:
# 构建候选项集
candidate_itemsets = {}
for itemset1, count1 in frequent_itemsets[k-1].items():
for itemset2, count2 in frequent_itemsets[k-1].items():
if itemset1 != itemset2 and len(itemset1.union(itemset2)) == k:
candidate_itemsets[itemset1.union(itemset2)] = 0
# 计算候选项集的支持度
for transaction in transactions:
for candidate_itemset in candidate_itemsets:
if candidate_itemset.issubset(transaction):
candidate_itemsets[candidate_itemset] += 1
# 根据最小支持度阈值过滤掉不频繁的项集
frequent_itemsets[k] = {itemset: count for itemset, count in candidate_itemsets.items() if count >= min_support}
k += 1
# 合并所有频繁项集
frequent_itemsets_all = {}
for itemsets in frequent_itemsets.values():
frequent_itemsets_all.update(itemsets)
# 返回频繁项集列表
return frequent_itemsets_all.keys()
# 示例数据
transactions = [
{'牛奶', '鸡蛋', '面包'},
{'鸡蛋', '面包', '可乐'},
{'牛奶', '鸡蛋', '面包', '可乐'},
{'牛奶', '鸡肉', '面包'},
{'鸡肉', '面包', '可乐'}
]
# 运行Apriori算法
min_support = 2
frequent_itemsets = apriori(transactions, min_support)
# 打印结果
print(frequent_itemsets)
```
输出结果为:
```
dict_keys([frozenset({'面包'}), frozenset({'鸡蛋'}), frozenset({'牛奶'}), frozenset({'可乐'}), frozenset({'面包', '鸡蛋'}), frozenset({'面包', '牛奶'}), frozenset({'鸡蛋', '牛奶'}), frozenset({'面包', '可乐'}), frozenset({'鸡肉', '面包'})])
```
这里使用了一个简单的示例数据集,输出结果为所有的频繁项集。可以看到,该算法可以有效地发现频繁项集,为数据分析和决策提供支持。
阅读全文