使用Apriori算法进行关联分析(二)

从频繁项集中挖掘关联规则

频繁项集有其量化定义,即它满足最小支持度要求。对于关联规则,也有类似的量化方法,这种量化指标称为可信度。一条规则P -> H的可信度定义为\frac{support(P | H)}{support(P)}

# 计算可信度
def calcConf(freqSet, H, supportData, brl, minConf = 0.7):
    prunedH = []
    for conseq in H:
        # print('freqSet:', freqSet)
        # print('conseq:', conseq)
        conf = supportData[freqSet]/supportData[freqSet - conseq]
        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):
        # 创建Hm+1条新候选规则
        Hmp1 = aprioriGen(H, m + 1)
        # print('Hmp1:', Hmp1)
        Hmp1 = calcConf(freqSet, Hmp1, supportData, brl, minConf)
        if len(Hmp1) > 1:
            rulesFromConseq(freqSet, Hmp1, supportData, brl, minConf)

# 关联规则生成函数
def generateRules(L, supportData, minConf = 0.7):
    bigRuleList = []
    for i in range(1, len(L)):     # 从包含两个或者更多元素的项集开始
        for freqSet in L[I]:
            H1 = [frozenset([item]) for item in freqSet]
            # 如果频繁项集元素超过2,需要先合并
            if i > 1:
                rulesFromConseq(freqSet, H1, supportData, bigRuleList, minConf)
            else:
                calcConf(freqSet, H1, supportData, bigRuleList, minConf)
    return bigRuleList

generateRules()是主函数,调用另外两个函数calcConf()rulesFromConseq(),分别用于对规则进行评估以及生成候选规则集合。

接下来,我们会先生成一个最小支持度为0.5的频繁项集,然后基于此项集,生成最小可信度为0.7的关联规则。

data = createData()
L, supportData = apriori(data, minSupport = 0.5)
rules = generateRules(L, supportData, minConf = 0.7)

后面的输出是我添加的print语句。可以忽略。从中也可以看出一些关联规则生成的过程。

打印一下rules,看一下生成的关联规则。

结果中给出三条规则:{1} -> {3}、{2} -> {5}、{5} -> {2}。可以看到,2和5可以互换,但1和3不行。
举个例子,你晚上有约,路过超市去买了个raincoat(小雨衣~),然后会顺便买口香糖(别问我为什么,我不知道,没买过- -),这就构成关联{raincoat} -> {口香糖}。但是买口香糖的时候,就不一定买raincoat了,可能是喜欢吃口香糖的single dog吧。所以反过来是不行的。(这个例子是我朋友提供的。至于他为什么知道。Emmm...)
另一种情况就是,周末想在家当肥宅,你去买了可乐,然后买了零食,构成关联{可乐} -> {零食},但你也可能是先买了零食,然后才想要去买可乐,所以这两者是可以互换的。

下面降低可信度阈值之后看一下结果:


小结

关联分析是用于发现大数据集中元素间有趣关系的一个工具集。有两种方式量化这些关系。一是使用频繁项集;二是关联规则,每条关联规则表示元素项之间“如果······那么”关系。

Apriori原理是说如果一个元素项是不频繁的,那么包含该元素的超集也是不频繁的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容