生成带中文注释的apriori算法python代码
时间: 2023-06-25 11:02:34 浏览: 97
以下是带中文注释的Apriori算法Python代码:
```python
# 定义函数用于读取数据文件并返回事务列表
def loadDataSet():
# 读取数据文件
with open('data.txt', 'r') as f:
# 将每行数据转换为列表形式
lines = f.readlines()
# 创建空列表用于存储事务数据
dataSet = []
# 遍历每行数据
for line in lines:
# 将每行数据去除空格并转换为列表形式
transaction = list(map(str.strip, line.split(',')))
# 将处理后的事务数据添加到列表中
dataSet.append(transaction)
# 返回处理后的事务列表
return dataSet
# 定义函数用于生成候选项集
def createC1(dataSet):
# 创建空集合用于存储所有不重复的单个项
C1 = set()
# 遍历每个事务
for transaction in dataSet:
# 遍历每个项
for item in transaction:
# 将每个项添加到集合中
C1.add(frozenset([item]))
# 返回生成的候选项集
return C1
# 定义函数用于生成频繁项集
def scanD(D, Ck, minSupport):
# 创建空字典用于存储每个项集的支持度计数
ssCnt = {}
# 遍历每个事务
for tid in D:
# 遍历每个候选项集
for can in Ck:
# 如果候选项集是当前事务的子集
if can.issubset(tid):
# 将该项集的支持度计数加一
if can not in ssCnt:
ssCnt[can] = 1
else:
ssCnt[can] += 1
# 获取事务数量
numItems = float(len(D))
# 创建空列表用于存储频繁项集及其支持度
retList = []
# 遍历每个项集及其支持度计数
for key in ssCnt:
# 计算该项集的支持度
support = ssCnt[key] / numItems
# 如果该项集的支持度大于等于最小支持度
if support >= minSupport:
# 将该项集及其支持度添加到列表中
retList.append((key, support))
# 返回生成的频繁项集列表
return retList
# 定义函数用于生成大小为 k 的候选项集
def aprioriGen(Lk, k):
# 创建空列表用于存储生成的候选项集
retList = []
# 获取频繁项集列表的长度
lenLk = len(Lk)
# 遍历每个频繁项集
for i in range(lenLk):
# 遍历每个频繁项集
for j in range(i+1, lenLk):
# 获取第 i 个频繁项集和第 j 个频繁项集
L1 = list(Lk[i])[:k-2]
L2 = list(Lk[j])[:k-2]
# 如果第 i 个频繁项集和第 j 个频繁项集的前 k-2 个项相同
if sorted(L1) == sorted(L2):
# 将两个频繁项集合并成一个大小为 k 的候选项集
retList.append(Lk[i] | Lk[j])
# 返回生成的候选项集列表
return retList
# 定义函数用于生成所有频繁项集
def apriori(dataSet, minSupport=0.5):
# 生成候选项集 C1
C1 = createC1(dataSet)
# 将事务列表转换为集合形式
D = list(map(set, dataSet))
# 生成频繁项集 L1
L1 = scanD(D, C1, minSupport)
# 将频繁项集 L1 添加到频繁项集列表中
L = [L1]
# 初始化 k 值为 2
k = 2
# 循环生成频繁项集
while(len(L[k-2]) > 0):
# 生成大小为 k 的候选项集
Ck = aprioriGen(L[k-2], k)
# 生成频繁项集 Lk
Lk = scanD(D, Ck, minSupport)
# 将频繁项集 Lk 添加到频繁项集列表中
L.append(Lk)
# 将 k 值加一
k += 1
# 返回所有频繁项集列表
return L
# 测试代码
dataSet = loadDataSet()
L = apriori(dataSet, minSupport=0.5)
print(L)
```
其中,`data.txt` 文件是指包含事务数据的文本文件,每行数据以逗号分隔。函数 `loadDataSet()` 用于读取数据文件并返回事务列表;函数 `createC1()` 用于生成候选项集 C1;函数 `scanD()` 用于生成频繁项集;函数 `aprioriGen()` 用于生成大小为 k 的候选项集;函数 `apriori()` 用于生成所有频繁项集。在测试代码中,调用 `apriori()` 函数并指定最小支持度为 0.5,即可生成所有频繁项集并输出。
阅读全文