Apriori算法的python实现

def listSet(targetList):#生成不含有重复项的列表
newList=[]
for listItem in targetList:
newList.append(list(set(listItem)))
return newList

def list1Creation(newList):#生成1-项集
list1=[]
for listItem in newList:
for Item in listItem:
if [Item] not in list1:
list1.append([Item])
return list1

def count(newList,setK):#计算K-项集的支持度计数
numList=[]
for son in setK:
num=0
for listItem in newList:
if (set(son).issubset(listItem)):
num+=1
numList.append(num)
return numList

def select(support,N,listN,numList):#生成频繁k项集
cmp=support*N
listM=[]
for Item in range(len(numList)):
if numList[Item]>=cmp:
listM.append(listN[Item])
return listM

def listNCreation(listN):#生成k+1项集
listM=[]
length=len(listN[0])+1
for i in range(len(listN)):
for j in range(i+1,len(listN)):
if list(set(listN[i])|set(listN[j])) not in listM:
listM+=[list(set(listN[i])|set(listN[j]))]
for Item in listM:
if len(Item)!=length:
del listM[listM.index(Item)]
return listM

List=[[1,1,3,4],[2,2,3,5],[1,2,3,5,5,5,5],[2,2,2,2,2,5]]
#样例,输出为
#[[1], [3], [2], [5]]
#[[1, 3], [2, 3], [3, 5], [2, 5]]
#[[2, 3, 5]]
List=listSet(List)#生成有效的列表
N=len(List)#列表的总长度
listN=list1Creation(List)#生成1-项集

while len(listN)!=1 and len(listN)!=0:
numList=count(List,listN)#计算k-项集的支持度计数
listM=select(0.5,N,listN,numList)#生成频繁k-项集
listN=listM
listN=listNCreation(listN)#生成k+1-项集
print(listM)

本人初学,才识学浅,代码水平有限,还请各位大佬提出改进算法意见,降低代码的复杂度。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值