首页 / 算法 / Apriori算法 源码
Apriori算法 源码
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Apriori算法 源码,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2896字,纯文字阅读大概需要5分钟。
内容图文
![Apriori算法 源码](/upload/InfoBanner/zyjiaocheng/622/ea05af2b931a45308746072adef5a366.jpg)
具体原理先鸽了
下面是代码
view code
#coding:utf-8
# generate data
def genData():
return [['牛奶','啤酒','尿布'],
['牛奶','面包','黄油'],
['牛奶','尿布','饼干'],
['面包','黄油','饼干'],
['啤酒','尿布','饼干'],
['牛奶','尿布','面包','黄油'],
['尿布','面包','黄油'],
['啤酒','尿布'],
['牛奶','尿布','面包','黄油'],
['啤酒','饼干'] ]
def loadDataSet():
return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]
# 传入参数:数据集
# 返回值:候选项集C1
def genC1(datalist)->[frozenset]:
goodsset = set()
for items in datalist:
for goods in items:
goodsset.add(goods)
C = list()
for goods in goodsset:
C.append(frozenset([goods]))
return C
# 传入参数:频繁项集list
# 返回:下一个候选项集->list(frozenset)
def mergeToNext(preL):
Ck = list()
k = len(preL[0])
for i in range(len(preL)):
for j in range(i+1,len(preL)):
A = sorted([x for x in preL[i]])[:k-1]
B = sorted([x for x in preL[j]])[:k-1]
if A == B:
Ck.append(preL[i] | preL[j])
return Ck
# 传入参数:数据集,候选项集,最小支持度
# 返回值:频繁项集->list(frozenset),频繁项集支持度->dict
def genfreq(dataset, preC, minsupport):
objfreq = dict()
L = list()
for item in preC:
__appcnt = 0
for data in dataset:
if (item&data) == item:
__appcnt += 1
if __appcnt / len(dataset) >= minsupport:
L.append(item)
objfreq[item] = __appcnt / len(dataset)
return L, objfreq
# 传入参数:频繁项,规则后集,支持度集合,规则集合,最小置信度
# 无返回值
def GetRules(freqset, R, suppotdata, rulelist, minconf):
if len(R)==0 or len(R[0])==len(freqset):
return
legalconseq = list()
for ret in R:
# P(A|B) = P(AB) / P(B)
conseq = freqset - ret
conf = supportdata[freqset] / supportdata[conseq]
if conf >= minconf:
rulelist.append([conseq,ret,conf])
legalconseq.append(conseq)
nextconseqlist = mergeToNext(legalconseq)
nextR = list()
for conseq in nextconseqlist:
nextR.append(freqset-conseq)
if len(nextR)==0 or len(nextR[0])==0:
return
GetRules(freqset,nextR,supportdata,rulelist,minconf)
# 传入参数:各长度频繁项集,频繁项集支持度,最小置信度
# 返回值:规则列表以及置信度
def genRules(Llist, supportdata, minconf = .5):
rulelist = list()
for i in range(1,len(Llist)):
L = Llist[i]
if len(L) == 0:
break
for freqset in L:
R = [frozenset([x]) for x in freqset]
GetRules(freqset,R,supportdata,rulelist,minconf)
return rulelist
# 传入参数:数据集,最小支持度
# 返回值:各长度频繁项集->list(list(frozenset)),频繁项集支持度->dist
def apriori(datalist, minsupport = .5):
# C1 -> L1 ---merge---> C2
dataset = list(map(frozenset,[x for x in datalist]))
supportdata = dict()
Llist = list()
C = genC1(dataset)
while len(C) != 0:
L, tmpfreq = genfreq(dataset,C,minsupport)
Llist.append(L)
supportdata.update(tmpfreq)
C = mergeToNext(Llist[-1])
return Llist, supportdata
if __name__ == "__main__":
# datalist = genData()
datalist = loadDataSet()
Llist, supportdata = apriori(datalist)
rulelist = genRules(Llist,supportdata)
# for L in Llist:
# for p in L:
# print(p,supportdata[p])
for rule in rulelist:
print(rule[0],'->',rule[1],'conf = ',rule[2])
内容总结
以上是互联网集市为您收集整理的Apriori算法 源码全部内容,希望文章能够帮你解决Apriori算法 源码所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。