第11章:使用Apriori算法进行关联分析(从频繁项集中挖掘关联规则)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/love_image_xie/article/details/84666574

原理:

根据频繁项集找关联规则,如有一个频繁项集{豆奶,莴苣},那么可能有一条关联规则是豆奶->莴苣,即一个人购买了豆奶,则大可能他会购买莴苣,但反过来一个人购买了莴苣,不一定他会购买豆奶,频繁项集使用支持度量化,关联规则使用可信度或置信度量化。一条规则P->H的可信度定义为支持度(P|H)/支持度(P)。(注意:python中'|'表示并集,数学中'U'表示并集)

网络示意图:

       该图为频繁项集{0,1,2,3}的关联规则网络示意图,阴影区域是第可信度的规则,如果发现0,1,2->3是低可信度的,则以3为后件的规则可信度也会低。因此,先从一个频繁项集出发(单个元素是没有关联规则的,因此从两个元素的频繁项集出发),创建一个规则列表,该规则右边只包含一个元素,然后对这些规则测试;然后合并所有规则创建新的关联列表,该规则右边包含两个元素,以此类推。

代码:

def generateRules(L,supportData,minConf=0.5):
    bigRuleList=[]
    for i in range(1,len(L)):
        for freqSet in L[i]:
            H1=[frozenset([item]) for item in freqSet]  #H1是单个元素集合
            if(i>1):
                #pdb.set_trace()
                rulesFromConseq(freqSet,H1,supportData,bigRuleList,minConf)
            else:
                calcConf(freqSet,H1,supportData,bigRuleList,minConf)
    return bigRuleList

#对于两个元素的集合计算置信度
def calcConf(freqSet,H,supportData,br1,minConf=0.5):  #freqSet频繁项集
    prunedH=[]
    for conseq in H:
        conf=supportData[freqSet]/supportData[freqSet-conseq]
        if conf>=minConf:
            #pdb.set_trace()
            print(freqSet-conseq,"-->",conseq,'conf: %3.f'%conf)
            br1.append((freqSet-conseq,conseq,conf))
            prunedH.append(conseq)
    return prunedH

#对于多于两个元素的集合,先将元素分为两两结合的,然后对于两两结合的计算置信度
def rulesFromConseq(freqSet,H,supportData,br1,minConf=0.5):
    m=len(H[0])
    if(len(freqSet)>(m+1)):
        Hmp1=aprioriGen(H,m+1)
        Hmp1=calcConf(freqSet,Hmp1,supportData,br1,minConf)
        if len(Hmp1)>1:
            rulesFromConseq(freqSet, Hmp1, supportData, br1, minConf)

猜你喜欢

转载自blog.csdn.net/love_image_xie/article/details/84666574