python关联规则算法源代码,Python关联分析之挖掘关联规则—使用Apriori算法(2)...

在寻找频繁项集时,我们知道如果一个项集不满足最小支持度,这这个项集的所有超集都不满足最小支持度;在挖掘关联规则时,也有类似的属性:如果某条规则不满足最小置信度要求,那么该规则的所有子集也不会满足最小置信度要求;例如{A,B}->C这条规则不满足最小置信度,则support(A|B|C}/support(A|B){B,C}这条规则的置信度support{A|B|C}/support(A)也小于support(A|B));

def generateRules(L,supportData, minConf=0.7):

#L和supportData是上述apriori()产生的频繁项集和支持度

bigRuleList = []

for i in range(1, len(L)):

#从1而不是0开始是因为单个元素的集合不能产生规则,例如[[1],[2],[3]]之间并没有什么关联性

for freqSet in L[i]:

H1 = [frozenset([item])for item in freqSet]

#H1是出现在频繁项集集合中的所有元素,可以作为初始的只有一个元素的规则后件(即A->B中的B,如果是A->B|C,后续还需要合并)

if (i>1):

rulesFromConseq(freqSet, H1,supportData,bigRuleList,minConf)

else :

#项集中只有两个元素时,直接调用calcConf()函数

calcConf(freqSet, H1, supportData,bigRuleList, minConf)

return bigRuleList

calcConf()计算规则规则置信度:

def calcConf(freqSet, H, supportData, bigRuleList1, minConf=0.7):

prunedH =[]

for conseq in H :

conf = supportData[freqSet]/supportData[freqSet-conseq]

#参照公式:A->B_conf = support(A|B)/support(A)

if conf >= minConf:

print (freqSet - conseq, '-->', conseq, 'conf:',conf)

bigRuleList1.append((freqSet-conseq, conseq, conf))

prunedH.append(conseq)

return prunedH

def rulesFromConseq(freqSet, H, supportData, bigRuleList1, minConf=0.7):

#这里的H是generateRules()中产生的频繁项集集合中包含两个元素以上的集合元素H1,作为初始规则后件

m = len(H[0])

if (len(freqSet) > (m+1)):

#m+1是作为规则后件的元素个数,所以产生该规则的频繁项集中的集合元素个数肯定要大于规则后件的元素个数

Hmp1 = apriorigen(H, m+1) #利用apriorigen()来生成含有元素H的且含有m+1个元素的无重复集合

Hmp1 = calcConf(freqSet,Hmp1, supportData, bigRuleList1, minConf)

#然后调用calcConf()计算Hmp1能够满足最小支持度来做规则后件的元素

#如果Hmp1中有值存在,则递归调用

if (len(Hmp1)>1):

rulesFromConseq(freqSet, Hmp1, supportData, bigRuleList1, minConf)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值