apriori算法python源代码
时间: 2023-07-25 11:44:57 浏览: 99
以下是使用 Python 实现 Apriori 算法的源代码:
```python
def load_dataset():
"""
加载测试数据集
:return: 数据集
"""
return [['A', 'B', 'C'], ['B', 'C', 'D'], ['C', 'D', 'E'], ['D', 'E', 'F']]
def create_c1(dataset):
"""
创建候选项集 C1
:param dataset: 数据集
:return: 候选项集 C1
"""
c1 = []
# 遍历数据集中的所有项
for transaction in dataset:
for item in transaction:
# 如果该项不在候选项集 C1 中,则将其添加到 C1 中
if not [item] in c1:
c1.append([item])
# 对 C1 中的项进行排序
c1.sort()
# 将 C1 转换为不可变集合
return list(map(frozenset, c1))
def scan_dataset(dataset, ck, min_support):
"""
扫描数据集,计算每个候选项集的支持度,得到频繁项集 Lk
:param dataset: 数据集
:param ck: 候选项集
:param min_support: 最小支持度
:return: 频繁项集 Lk
"""
support_count = {}
# 遍历数据集中的所有项
for transaction in dataset:
# 遍历候选项集 Ck 中的所有项
for item in ck:
# 如果 Ck 中的项是数据集中当前项的子集,则增加其计数
if item.issubset(transaction):
if item not in support_count:
support_count[item] = 1
else:
support_count[item] += 1
# 计算支持度
num_items = float(len(dataset))
lk = []
support_data = {}
for item, count in support_count.items():
support = count / num_items
if support >= min_support:
lk.insert(0, item)
support_data[item] = support
return lk, support_data
def apriori(dataset, min_support=0.5):
"""
Apriori 算法
:param dataset: 数据集
:param min_support: 最小支持度
:return: 所有频繁项集的支持度
"""
# 创建候选项集 C1
c1 = create_c1(dataset)
# 将数据集转换为不可变集合
dataset = list(map(set, dataset))
# 计算所有频繁项集的支持度
frequent_itemsets = {}
k = 1
while True:
# 根据候选项集 Ck-1 创建候选项集 Ck
ck = create_ck(frequent_itemsets, k)
# 扫描数据集,计算每个候选项集的支持度,得到频繁项集 Lk
lk, support_data = scan_dataset(dataset, ck, min_support)
# 将所有频繁项集添加到频繁项集字典中
frequent_itemsets[k] = lk
# 如果没有找到任何频繁项集,则退出循环
if len(lk) == 0:
break
k += 1
# 返回所有频繁项集的支持度
return support_data
def create_ck(lk, k):
"""
根据频繁项集 Lk-1 创建候选项集 Ck
:param lk: 频繁项集 Lk-1
:param k: 项集中项的个数
:return: 候选项集 Ck
"""
ck = []
len_lk = len(lk)
for i in range(len_lk):
for j in range(i + 1, len_lk):
l1 = list(lk[i])[:k - 2]
l2 = list(lk[j])[:k - 2]
l1.sort()
l2.sort()
if l1 == l2:
ck.append(lk[i] | lk[j])
return ck
# 测试代码
dataset = load_dataset()
support_data = apriori(dataset)
print(support_data)
```
这段代码实现了 Apriori 算法的主要逻辑,可以根据自己的数据集进行调整和修改。
阅读全文