apriori算法案例代码实现
时间: 2023-12-10 19:01:29 浏览: 88
基于hadoop利用Apriori实现算法解决频繁项集问题源代码+PDF文档说明(高分项目)
以下是Python中Apriori算法的案例代码实现:
```python
def load_dataset():
"""
加载数据集
:return: 数据集
"""
return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]
def create_c1(dataset):
"""
创建初始项集的列表,C1,该列表中每个元素都是大小为1的项集
:param dataset: 数据集
:return: C1项集列表
"""
c1 = []
for transaction in dataset:
for item in transaction:
if not [item] in c1:
c1.append([item])
c1.sort()
return list(map(frozenset, c1))
def scan_dataset(dataset, candidate_set, min_support):
"""
从C1生成L1,Ck生成Lk的过程称为扫描数据集,该函数用于从候选项集列表中筛选出符合最小支持度要求的项集,并返回符合要求的项集列表及其支持度
:param dataset: 数据集
:param candidate_set: 候选项集列表
:param min_support: 最小支持度
:return: 符合要求的项集列表及其支持度
"""
candidate_count = {}
for transaction in dataset:
for candidate in candidate_set:
if candidate.issubset(transaction):
if candidate not in candidate_count:
candidate_count[candidate] = 1
else:
candidate_count[candidate] += 1
total = len(dataset)
support_data = {}
for candidate in candidate_count:
support = candidate_count[candidate] / total
if support >= min_support:
support_data[candidate] = support
return support_data
def apriori_gen(frequent_set, k):
"""
由Lk生成Ck+1的过程称为连接,该函数用于将Lk中的项集两两连接,生成候选项集列表Ck+1
:param frequent_set: 频繁项集列表
:param k: 项集元素个数
:return: 候选项集列表
"""
candidate_set = []
len_frequent_set = len(frequent_set)
for i in range(len_frequent_set):
for j in range(i + 1, len_frequent_set):
l1 = list(frequent_set[i])[:k - 2]
l2 = list(frequent_set[j])[:k - 2]
l1.sort()
l2.sort()
if l1 == l2:
candidate_set.append(frequent_set[i] | frequent_set[j])
return candidate_set
def apriori(dataset, min_support=0.5):
"""
Apriori算法主函数,用于从数据集中挖掘频繁项集及其支持度,并返回频繁项集列表及其支持度
:param dataset: 数据集
:param min_support: 最小支持度
:return: 频繁项集列表及其支持度
"""
c1 = create_c1(dataset)
frequent_set_list = [c1]
k = 2
total = len(dataset)
support_data = {}
while len(frequent_set_list[k - 2]) > 0:
candidate_set = apriori_gen(frequent_set_list[k - 2], k)
frequent_set = scan_dataset(dataset, candidate_set, min_support)
support_data.update(frequent_set)
frequent_set_list.append(frequent_set.keys())
k += 1
return frequent_set_list, support_data
```
以上代码实现了Apriori算法的主要函数,包括加载数据集、创建初始项集列表、扫描数据集、连接Lk中的项集生成Ck+1、Apriori算法主函数等。需要注意的是,以上代码仅作为Apriori算法的示例代码,实际应用需要根据具体情况进行调整和优化。
阅读全文