博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Apriori算法进行关联分析
阅读量:4211 次
发布时间:2019-05-26

本文共 3461 字,大约阅读时间需要 11 分钟。

最后附上代码:

#加载数据集def loadDataSet():    return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]#构建候选集C1def createC1(dataSet):    C1 = []    for transaction in dataSet:        for item in transaction:            if not [item] in C1:                C1.append([item])    C1.sort()    return C1               #use frozen set so we                            #can use it as a key in a dictdataSet=loadDataSet()data=createC1(dataSet)print(data)#这个函数的作用是返回符合指定支持度的集合,它有三个参数,参数分别是数据集,候选项集列表CK,以及感兴趣项集的最小支持度minSupport#这个函数用于从Ck生成Lk (k是指数字)def scanD(D, Ck, minSupport):    ssCnt = {}    for tid in D:        for can in Ck:            if can.issubset(tid):                if not ssCnt.has_key(can): ssCnt[can]=1                else: ssCnt[can] += 1    numItems = float(len(D))    retList = []    supportData = {}    for key in ssCnt:        support = ssCnt[key]/numItems        if support >= minSupport:            retList.insert(0,key)        supportData[key] = support    return retList, supportData#构建候选集Ckdef aprioriGen(Lk, k): #creates Ck    retList = []    lenLk = len(Lk)    for i in range(lenLk):        for j in range(i+1, lenLk):            L1 = list(Lk[i])[:k-2]; L2 = list(Lk[j])[:k-2]            L1.sort(); L2.sort()            if L1==L2: #if first k-2 elements are equal                retList.append(Lk[i] | Lk[j]) #set union    return retList#得到频繁项集def apriori(dataSet, minSupport = 0.5):    C1 = createC1(dataSet)   #构建初始的候选集    D = map(set, dataSet)    #将dataSet映射为一个set    L1, supportData = scanD(D, C1, minSupport)   #得到L1频繁项集    L = [L1]    k = 2    while (len(L[k-2]) > 0):        Ck = aprioriGen(L[k-2], k)   #构建候选集Ck        Lk, supK = scanD(D, Ck, minSupport)#scan DB to get Lk        supportData.update(supK)        L.append(Lk)        k += 1    return L, supportData#下面这些函数都是生成关联规则的,如A->B  只要发生A,那么B也会发生的概率称为可信度#这个是主函数,L是频繁项集合,包含频繁项集合支持度的字典,minConf是最小置信度def generateRules(L, supportData, minConf=0.7):  #supportData is a dict coming from scanD    bigRuleList = []    for i in range(1, len(L)):#only get the sets with two or more items        for freqSet in L[i]:            H1 = [frozenset([item]) for item in freqSet]            if (i > 1):                rulesFromConseq(freqSet, H1, supportData, bigRuleList, minConf)            else:                calcConf(freqSet, H1, supportData, bigRuleList, minConf)    return bigRuleList#对规则进行评估def calcConf(freqSet, H, supportData, brl, minConf=0.7):    prunedH = [] #create new list to return    for conseq in H:        conf = supportData[freqSet]/supportData[freqSet-conseq] #calc confidence        if conf >= minConf:            print (freqSet-conseq,'-->',conseq,'conf:',conf)            brl.append((freqSet-conseq, conseq, conf))            prunedH.append(conseq)    return prunedH#生成候选规则集合def rulesFromConseq(freqSet, H, supportData, brl, minConf=0.7):    m = len(H[0])    if (len(freqSet) > (m + 1)): #try further merging        Hmp1 = aprioriGen(H, m+1)#create Hm+1 new candidates        Hmp1 = calcConf(freqSet, Hmp1, supportData, brl, minConf)        if (len(Hmp1) > 1):    #need at least two sets to merge            rulesFromConseq(freqSet, Hmp1, supportData, brl, minConf)def pntRules(ruleList, itemMeaning):    for ruleTup in ruleList:        for item in ruleTup[0]:            print (itemMeaning[item])        print ("           -------->")        for item in ruleTup[1]:            print (itemMeaning[item])        print ("confidence: %f" % ruleTup[2])        print  ()     #print a blank line
 

你可能感兴趣的文章
用 Tomcat 和 Eclipse 开发 Web 应用程序
查看>>
60款顶级大数据开源工具
查看>>
eclipse 配置scala问题-More than one scala library found in the build path
查看>>
IIS 承载的服务失败
查看>>
写连接代码时需要注意2000和2005的不同:
查看>>
五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT) – 整理
查看>>
程序员公司任职软件开发著作权该归谁呢
查看>>
OLTP报表和OLAP报表
查看>>
Hbase案例:浏览器用户行为分析
查看>>
SQL Server 2008 Reporting Services报表中文乱码问题
查看>>
report builder 报表表头固定
查看>>
DNS中的正向解析与反向解析
查看>>
忘记oracle的sys用户密码怎么修改
查看>>
科德十二定律(Codd's 12 rules)
查看>>
VBS ConvertToXlsx
查看>>
Java位运算总结:位运算用途广泛
查看>>
(Kettle)合并记录步骤
查看>>
XML5个转义符
查看>>
js获取json对象键名及值
查看>>
有向无环图
查看>>