机器学习实战-10-Apriori关联分析

一、关联分析介绍

商场的销售过程,涉及很多机器学习的应用,商品的陈列,购物卷的提供,用户忠诚度等等,通过对这些大量数据的分析,可以帮组商店了解用户的购物行为,进而对商品的定价、市场促销、存货管理等进行决策帮组。

从大规模数据集中寻找物品间的隐含关系被称作关联分析(association analysis)或者关联规则学习(association rule learning)。这里的主要问题在于,寻找物品的不同组合是一项十分耗时的任务,所需的计算代价很高,蛮力搜索方法并不能解决这个问题,所以需要用更智能的方法在合理的时间范围内找到频繁项集。

关联分析是一种在大规模数据集中寻找有趣关系的任务。这些关系可以有两种形式:频繁项集或者关联规则。频繁项集(frequent item sets)是经常出现在一块的物品的集合,关联规则(association rules)暗示两种物品之间可能存在很强的关系。
下图给出了某个杂货店的交易清单。

频繁项集是指那些经常出现在一起的物品集合,上图中的集合{葡萄酒,尿布, 豆奶}就是频繁项集的一个例子。从下面的数据集中也可以找到诸如尿布➞葡萄酒的关联规则。这意味着如果有人买了尿布,那么他很可能也会买葡萄酒。使用频繁项集和关联规则,商家可以更好地理解他们的顾客。

当寻找频繁项集时,什么样的数据才是频繁项集呢?频繁(frequent)的定义是什么?

常用的频繁项集的评估标准有支持度,置信度两个。

  • 支持度:数据集中,包含该项集的记录出现的次数占总数据集的比重。
  • 可信度:也称为置信度,体现了一个数据出现后,另一个数据出现的概率,或者说数据的条件概率。针对一条关联规则来定义的。

从上图交易清单中可以得到,{豆奶}的支持度为4/5。而在5条交易记录中有3条包含{豆奶,尿布},因此{豆奶,尿布}的支持度为3/5。

针对一条诸如{尿布}➞{葡萄酒}的这条关联规则,这条规则的可信度被定义为“支持度({尿布, 葡萄酒})/支持度({尿布})”。由于{尿布, 葡萄酒}的支持度为3/5,尿布的支持度为4/5,所以“尿布➞葡萄酒”的可信度为3/4=0.75。这意味着对于包含“尿布”的所有记录,我们的规则对其中75%的记录都适用。

因此,我们可以利用支持度和可信度是用来量化关联分析是否成功。但是,当数据量非常大的时候,物品成千上万时,按照上述方法生成一个物品所有可能组合的清单非常非常慢,统计每一种组合它出现的频繁程度也很非常慢。这催生了关联规则挖掘的算法Apriori,该原理会减少关联规则学习时所需的计算量。

二、Apriori算法原理

一杂货店有四种商品 0,1,2,3.这些商品的组合可能有一种,二种,三种,四种。我们的关注点:用户购买一种或者多种商品,不关心具体买的商品的数量。
集合{0,1,2,3}中所有可能的项集组合如下图

四种商品要遍历15次,随着物品数目的增加遍历次数会急剧增加。对于包含N种商品的数据集一共有2^N-1种项集组合。

Apriori原理:

  • 如果某个项集是频繁的,那么它的所有子集也是频繁的。
  • 如果一个项集是非频繁集,那么它的所有超集也是非频繁的。

根据Apriori原理,假设集合{2,3}是非频繁项集,则{0,2,3},{1,2,3},{0,1,2,3}也是非频繁的,它们的支持度就不需要计算了。

Apriori算法采用迭代的方法,先搜索出候选1项集及对应的支持度,剪枝去掉低于支持度的1项集,得到频繁1项集。然后对剩下的频繁1项集进行连接,得到候选的频繁2项集,筛选去掉低于支持度的候选频繁2项集,得到真正的频繁二项集,以此类推,迭代下去,直到无法找到频繁k+1项集为止,对应的频繁k项集的集合即为算法的输出结果。

第i次的迭代过程包括扫描计算候选频繁i项集的支持度,剪枝得到真正频繁i项集和连接生成候选频繁i+1项集三步。

上面的数据集D有4条记录,分别是134,235,1235和25。现在用Apriori算法来寻找频繁k项集,最小支持度设置为50%。首先生成候选频繁1项集,包括所有的5个数据并计算5个数据的支持度,计算完毕后进行剪枝,数据4由于支持度只有25%被剪掉。最终的频繁1项集为1235,现在我们链接生成候选频繁2项集,包括12,13,15,23,25,35共6组。此时第一轮迭代结束。

进入第二轮迭代,扫描数据集计算候选频繁2项集的支持度,接着进行剪枝,由于12和15的支持度只有25%而被筛除,得到真正的频繁2项集,包括13,23,25,35。现在链接生成候选频繁3项集,123, 125,135和235共4组,这部分图中没有画出。通过计算候选频繁3项集的支持度,发现123,125和135的支持度均为25%,因此接着被剪枝,最终得到的真正频繁3项集为235一组。由于此时无法再进行数据连接,进而得到候选频繁4项集,最终的结果即为频繁3三项集235。

使用该原理就可以避免项集数目的指数增长,从而在合理时间内计算出频繁项集。

三、算法实现

算法伪代码:

3.1 apriori算法辅助函数

辅助函数有creat_c1、scan_d

可以看出,支持度不小于0.5的项集被选中到L中作为频繁项集,可以根据不同的需求设定最小支持度的值,从而得到想要的频繁项集。

3.2 组织完整的Apriori发现频繁项集

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

要找到关联规则,先从一个频繁集开始,我们想知道对于频繁项集中的元素能否获取其它内容,即某个元素或者某个集合可能会推导出另一个元素。从表1 可以得到,如果有一个频繁项集 {豆奶,莴苣},那么就可能有一条关联规则 "豆奶 --> 莴苣",意味着如果有人购买了豆奶,那么在统计上他会购买莴苣的概率较大。但是这一条反过来并不一定成立。

一个频繁项集可以产生许多可能的关联规则,如果能在计算规则可信度之前就减少规则的数目,就会很好的提高计算效率。有一条规律就是:如果某条规则并不满足最小可信度要求,那么该规则的所有子集也不会满足最小可信度要求,例如下图的解释:

结果中给出三条规则:{1} ➞ {3}、{5} ➞ {2}及{2} ➞ {5}。可以看到,后两条包含2和5的规则可以互换前件和后件,但是前一条包含1和3 的规则不行。下面降低可信度阈值之后看一下结果:

一旦降低可信度阈值,就可以获得更多的规则。

四、示例:发现毒蘑菇的相似特征

首先看一下毒蘑菇的数据集:

第一个特征表示有毒或者可食用。如果某样本有毒,则值为2。如果可食用,则值为1。下一个特征是蘑菇伞的形状,有六种可能的值,分别用整数3-8来表示。

为了找到毒蘑菇中存在的公共特征,可以运行Apriori算法来寻找包含特征值为2的频繁项集。

扩大范围到3个:

接下来需要观察一下这些特征,以便知道了解野蘑菇的那些方面。

五、小结

关联分析是用于发现大数据集中元素间有趣关系的一个工具集,可以采用两种方式来量化这些有趣的关系。第一种方式是使用频繁项集,它会给出经常在一起出现的元素项。第二种方式是关联规则,每条关联规则意味着元素项之间的“如果……那么”关系。

Apriori的方法简化了计算量,在合理的时间范围内找到频繁项集:Apriori原理是说如果一个元素项是不频繁的,那么那些包含该元素的超集也是不频繁的。

Apriori算法从单元素项集开始,通过组合满足最小支持度要求的项集来形成更大的集合。支持度用来度量一个集合在原始数据中出现的频率。

每次增加频繁项集的大小,Apriori算法都会重新扫描整个数据集。当数据集很大时,这会显著降低频繁项集发现的速度。下一篇会介绍FP-growth算法,和Apriori算法相比,该算法只需要对数据库进行两次遍历,能够显著加快发现繁项集的速度。

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

推荐阅读更多精彩内容