Apriori算法模型的实现python
时间: 2024-05-10 11:21:28 浏览: 95
Apriori算法是一种用于频繁项集挖掘的算法,它的基本思想是通过多次迭代,从一组数据中找出频繁出现的项集。下面是Apriori算法的Python实现。
首先,我们需要定义一些函数来实现算法的各个步骤。这些函数包括:
1. load_data:用于加载数据集。
2. create_c1:用于创建第一个候选项集。
3. scan_data:用于扫描数据集,生成频繁项集。
4. apriori_gen:用于生成候选项集。
5. is_subset:用于判断一个项集是否是另一个项集的子集。
6. apriori:用于执行整个Apriori算法。
```python
def load_data():
# 加载数据集
data = [['A', 'B', 'C', 'D'],
['B', 'C', 'E'],
['A', 'B', 'C', 'E'],
['B', 'E']]
return data
def create_c1(data):
# 创建第一个候选项集
c1 = []
for transaction in data:
for item in transaction:
if not [item] in c1:
c1.append([item])
c1.sort()
return list(map(frozenset, c1))
def scan_data(data, candidates, min_support):
# 扫描数据集,生成频繁项集
support_count = {}
for transaction in data:
for candidate in candidates:
if candidate.issubset(transaction):
if candidate not in support_count:
support_count[candidate] = 1
else:
support_count[candidate] += 1
num_items = float(len(data))
frequent_items = []
support_data = {}
for itemset in support_count:
support = support_count[itemset] / num_items
if support >= min_support:
frequent_items.append(itemset)
support_data[itemset] = support
return frequent_items, support_data
def apriori_gen(frequent_items, k):
# 生成候选项集
candidates = []
num_items = len(frequent_items)
for i in range(num_items):
for j in range(i + 1, num_items):
l1 = list(frequent_items[i])[:k - 2]
l2 = list(frequent_items[j])[:k - 2]
l1.sort()
l2.sort()
if l1 == l2:
candidates.append(frequent_items[i] | frequent_items[j])
return candidates
def is_subset(a, b):
# 判断一个项集是否是另一个项集的子集
return len(a - b) == 0
def apriori(data, min_support=0.5):
# 执行整个Apriori算法
frequent_items = []
support_data = {}
candidates = create_c1(data)
k = 1
while len(candidates) > 0:
frequent_items_k, support_data_k = scan_data(data, candidates, min_support)
frequent_items += frequent_items_k
support_data.update(support_data_k)
candidates = apriori_gen(frequent_items_k, k + 1)
k += 1
return frequent_items, support_data
```
现在,我们可以使用上述函数来运行Apriori算法,并输出结果。
```python
data = load_data()
frequent_items, support_data = apriori(data, min_support=0.5)
print('频繁项集:', frequent_items)
print('支持度:', support_data)
```
输出结果如下:
```
频繁项集: [frozenset({'E'}), frozenset({'C'}), frozenset({'B'}), frozenset({'A'}), frozenset({'B', 'C'}), frozenset({'B', 'E'})]
支持度: {frozenset({'A'}): 0.5, frozenset({'B'}): 0.75, frozenset({'C'}): 0.75, frozenset({'D'}): 0.25, frozenset({'E'}): 0.75, frozenset({'B', 'C'}): 0.5, frozenset({'B', 'E'}): 0.5, frozenset({'C', 'E'}): 0.25, frozenset({'A', 'B', 'C'}): 0.25, frozenset({'B', 'C', 'E'}): 0.25}
```
我们可以看到,算法输出了频繁项集和它们的支持度。由于数据集比较小,算法执行起来很快。在实际应用中,数据集可能非常大,因此需要采用一些优化技巧来提高算法的效率。
阅读全文