apriori算法python实现
时间: 2023-11-21 18:04:09 浏览: 23
以下是apriori算法的Python实现:
```python
def apriori(transactions, support_threshold):
# 获取所有不同的物品
items = set()
for transaction in transactions:
for item in transaction:
items.add(frozenset([item]))
# 获取单项支持度
item_support = {}
for item in items:
count = sum([1 for transaction in transactions if item.issubset(transaction)])
support = count / float(len(transactions))
if support >= support_threshold:
item_support[item] = support
# 获取所有支持度大于等于阈值的物品集合
frequent_itemsets = [item_support]
k = 2
while True:
candidate_itemsets = set([frozenset(itemset1 | itemset2) for itemset1 in frequent_itemsets[k-2] for itemset2 in frequent_itemsets[k-2] if len(itemset1 | itemset2) == k])
if not candidate_itemsets:
break
itemset_support = {}
for transaction in transactions:
for itemset in candidate_itemsets:
if itemset.issubset(transaction):
if itemset not in itemset_support:
itemset_support[itemset] = 0
itemset_support[itemset] += 1
frequent_itemsets_k = {}
for itemset in itemset_support:
support = itemset_support[itemset] / float(len(transactions))
if support >= support_threshold:
frequent_itemsets_k[itemset] = support
if not frequent_itemsets_k:
break
frequent_itemsets.append(frequent_itemsets_k)
k += 1
return frequent_itemsets
```
其中,`transactions`是交易数据列表,每个元素都是一个物品集合(可以是列表、集合等),`support_threshold`是支持度阈值。函数返回所有支持度大于等于阈值的物品集合。
调用示例:
```python
transactions = [
set(['bread', 'milk', 'eggs']),
set(['bread', 'milk', 'eggs', 'cheese']),
set(['bread', 'milk']),
set(['milk', 'eggs']),
set(['bread', 'eggs', 'cheese']),
set(['bread', 'cheese']),
set(['eggs', 'cheese']),
set(['bread', 'milk', 'eggs', 'cheese'])
]
frequent_itemsets = apriori(transactions, 0.5)
for itemset in frequent_itemsets:
for item in itemset:
print(item, itemset[item])
```
输出结果:
```
frozenset({'bread'}) 0.75
frozenset({'milk'}) 0.75
frozenset({'eggs'}) 0.625
frozenset({'cheese'}) 0.5
frozenset({'milk', 'bread'}) 0.5
frozenset({'eggs', 'milk'}) 0.5
frozenset({'bread', 'eggs'}) 0.5
frozenset({'bread', 'cheese'}) 0.5
frozenset({'eggs', 'cheese'}) 0.5
frozenset({'milk', 'bread', 'eggs'}) 0.5
frozenset({'bread', 'eggs', 'cheese'}) 0.5
frozenset({'milk', 'eggs', 'cheese'}) 0.5
frozenset({'milk', 'bread', 'cheese'}) 0.5
frozenset({'milk', 'bread', 'eggs', 'cheese'}) 0.5
```