第11章:使用Apriori演算法進行關聯分析(從頻繁項集中挖掘關聯規則)
阿新 • • 發佈:2018-12-02
原理:
根據頻繁項集找關聯規則,如有一個頻繁項集{豆奶,萵苣},那麼可能有一條關聯規則是豆奶->萵苣,即一個人購買了豆奶,則大可能他會購買萵苣,但反過來一個人購買了萵苣,不一定他會購買豆奶,頻繁項集使用支援度量化,關聯規則使用可信度或置信度量化。一條規則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)