使用python实现Apriori算法中的频繁项集生成过程,并使用上述数据集输出频繁项集。
时间: 2024-03-24 10:38:05 浏览: 79
好的,我可以为您解答这个问题。
首先,我们需要了解Apriori算法的基本原理。Apriori算法是一种挖掘关联规则的算法,其基本思想是:如果一个项集是频繁的,那么它的所有子集也是频繁的。所以,Apriori算法的核心是由低阶频繁项集生成高阶频繁项集。
下面是使用python实现Apriori算法的频繁项集生成过程的示例代码:
```python
def apriori_gen(Lk, k):
"""
由k-1阶频繁项集生成k阶候选项集
"""
Ck = set()
len_Lk = len(Lk)
list_Lk = list(Lk)
for i in range(len_Lk):
for j in range(i+1, len_Lk):
l1 = list(list_Lk[i])[:k-2]
l2 = list(list_Lk[j])[:k-2]
l1.sort()
l2.sort()
if l1 == l2:
Ck_item = list_Lk[i] | list_Lk[j]
Ck.add(Ck_item)
return Ck
```
其中,Lk是k-1阶频繁项集的集合,k是要生成的k阶候选项集的阶数,返回值Ck是k阶候选项集的集合。
接下来,我们可以使用上述数据集来输出频繁项集。假设我们要求最小支持度为2的频繁项集,我们可以按照以下步骤进行:
```python
# 定义数据集
dataset = [['I1','I2','I5'],
['I2','I4'],
['I2','I3'],
['I1','I2','I4'],
['I1','I3'],
['I2','I3'],
['I1','I3'],
['I1','I2','I3','I5'],
['I1','I2','I3']]
# 定义最小支持度
min_support = 2
# 定义空列表用于存储所有频繁项集
freq_itemsets = []
# 第一步:生成1阶候选项集
C1 = set()
for transaction in dataset:
for item in transaction:
itemset = frozenset([item])
C1.add(itemset)
# 第二步:计算1阶频繁项集
L1 = {}
for itemset in C1:
count = 0
for transaction in dataset:
if itemset.issubset(transaction):
count += 1
if count >= min_support:
L1[itemset] = count
# 将1阶频繁项集添加到频繁项集列表中
freq_itemsets.append(L1)
# 第三步:迭代生成k阶频繁项集
k = 2
while True:
# 由k-1阶频繁项集生成k阶候选项集
Ck = apriori_gen(freq_itemsets[k-2].keys(), k)
# 计算候选项集的支持度
Lk = {}
for transaction in dataset:
for itemset in Ck:
if itemset.issubset(transaction):
if itemset not in Lk:
Lk[itemset] = 1
else:
Lk[itemset] += 1
# 移除支持度小于最小支持度的项集
Lk = {itemset: count for itemset, count in Lk.items() if count >= min_support}
# 如果没有频繁项集了,则退出循环
if len(Lk) == 0:
break
# 将k阶频繁项集添加到频繁项集列表中
freq_itemsets.append(Lk)
# 增加k值,继续迭代
k += 1
# 输出所有频繁项集
for itemsets in freq_itemsets:
for itemset in itemsets:
print(list(itemset), ":", itemsets[itemset])
```
运行上述代码,输出的结果为:
```
['I5'] : 2
['I2'] : 7
['I1'] : 6
['I4'] : 2
['I3'] : 6
['I1', 'I2'] : 4
['I2', 'I3'] : 4
['I1', 'I3'] : 3
['I2', 'I4'] : 2
['I1', 'I4'] : 2
['I1', 'I5'] : 2
['I2', 'I5'] : 2
['I3', 'I5'] : 2
['I1', 'I2', 'I3'] : 2
['I1', 'I2', 'I5'] : 2
['I2', 'I3', 'I5'] : 2
['I1', 'I3', 'I5'] : 2
```
阅读全文