关联分析的基本概念
关联分析(Association Analysis):在大规模数据集中寻找有趣的关系。
频繁项集(Frequent Item Sets):经常出现在一块的物品的集合,即包含0个或者多个项的集合称为项集。
支持度(Support):数据集中包含该项集的记录所占的比例,是针对项集来说的。
置信度(Confidence):出现某些物品时,另外一些物品必定出现的概率,针对规则而言。
关联规则(Association Rules):暗示两个物品之间可能存在很强的关系。形如A->B的表达式,规则A->B的度量包括支持度和置信度
项集支持度:一个项集出现的次数与数据集所有事物数的百分比称为项集的支持度
eg:support(A⇒B)=support_count(A∪B)/N
支持度反映了A和B同时出现的概率,关联规则的支持度等于频繁集的支持度。
项集置信度:包含A的数据集中包含B的百分比
eg:confidence(A⇒B)=supportcount(A∪B)/supportcount(A)
置信度反映了如果交易中包含A,则交易包含B的概率。也可以称为在A发生的条件下,发生B的概率,成为条件概率。
只有支持度和置信度(可信度)较高的关联规则才是用户感兴趣的。
关联分析步骤
1、发现频繁项集,即计算所有可能组合数的支持度,找出不少于人为设定的最小支持度的集合。
2、发现关联规则,即计算不小于人为设定的最小支持度的集合的置信度,找到不小于认为设定的最小置信度规则。
关联分析的两种关系:简单关联关系和序列关联关系
简单关联关系:
简单关联关系可以从经典的购物中进行分析,购买面包的顾客80%都会购买牛奶,由于面包和牛奶是早餐搭配的必需品,二者搭配构成了早餐的组成部分,这就是一种简单的关联关系。
序列关联关系:
当购买一款新手机后,就会考虑去购买手机膜等手机配件,这就是一种序列关系,不会先买手机膜再买手机的,先后关系是非常明显的,这种关系是一种顺序性的关系,也就是一种序列关联关系。
关联规则:规则就是一种衡量事物的标准,也就是一个算法。
简单关联规则算法
算法思想基础
如果某个项集是频繁的,那么它的所有子集也是频繁的。更常用的是它的逆否命题,即如果一个项集是非频繁的,那么它的所有超集也是非频繁的。
简单关联规则是无指导的学习方法,着重探索内部结构。简单关联规则也是使用最多的技术,主要算法包括:Apriori、GRI、Carma,其中Apriori和Carma主要是如何提高关联规则的分析效率,而GRI注重如何将单一概念层次的关联推广到更多概念层次的关联,进而揭示事物内在结构。
简单关联规则的数据存储形式:一种是交易数据格式,一种是表格数据格式。
序列关联规则算法
序列关联规则的核心就是找到事物发展的前后关联性,研究序列关联可以来推测事物未来的发展情况,并根据预测的发展情况进行事物的分配和安排。
如何设定合理的支持度和置信度?
对于某条规则:(A=a)−>(B=b)
(support=30%,confident=60%);其中support=30%表示在所有的数据记录中,同时出现A=a和B=b的概率为30%;confident=60%表示在所有的数据记录中,在出现A=a的情况下出现B=b的概率为60%,也就是条件概率。支持度揭示了A=a和B=b同时出现的概率,置信度揭示了当A=a出现时,B=b是否会一定出现的概率。
(1)如果支持度和置信度闭值设置的过高,虽然可以减少挖掘时间,但是容易造成一些隐含在数据中非频繁特征项被忽略掉,难以发现足够有用的规则;
(2)如果支持度和置信度闭值设置的过低,又有可能产生过多的规则,甚至产生大量冗余和无效的规则,同时由于算法存在的固有问题,会导致高负荷的计算量,大大增加挖掘时间。
关联分析的应用
(1):购物篮分析,通过查看那些商品经常在一起出售,可以帮助商店了解用户的购物行为,这种从数据的海洋中抽取只是可以用于商品定价、市场促销、存货管理等环节
(2):在Twitter源中发现一些公共词。对于给定的搜索词,发现推文中频繁出现的单词集合
(3):从新闻网站点击流中挖掘新闻流行趋势,挖掘哪些新闻广泛被用户浏览到
(4):搜索引擎推荐,在用户输入查询时推荐同时相关的查询词项
(5):发现毒蘑菇的相似特征。这里只对包含某个特征元素(有毒素)的项集感兴趣,从中寻找毒蘑菇中的一些公共特征,利用这些特征来避免迟到哪些有毒的蘑菇
(6):图书馆信息的书籍推荐,对于学生的借书信息,不同专业学生的借书情况,来挖掘不同学生的借书情况,进行数目的推荐。
(7):校园网新闻通知信息的推荐,在对校园网新闻通知信息进行挖掘的过程中,分析不同部门,不同学院的新闻信息的不同,在进行新闻信息浏览的过程中进行新闻的推荐。
Apriori算法
假设我们有一家经营着4种商品(商品0,商品1,商品2和商品3)的杂货店,2图显示了所有商品之间所有的可能组合:
对于单个项集的支持度,我们可以通过遍历每条记录并检查该记录是否包含该项集来计算。对于包含N中物品的数据集共有2
N
−1
种项集组合,重复上述计算过程是不现实的。
研究人员发现一种所谓的Apriori原理,可以帮助我们减少计算量。Apriori原理是说如果某个项集是频繁的,那么它的所有子集也是频繁的。更常用的是它的逆否命题,即如果一个项集是非频繁的,那么它的所有超集也是非频繁的。
注意:这里的子集不是传统数学中的子集,而是子项的项集。例如一个频繁项集包含3个项,则这三个项的子集组成的项集一定是频繁项集。
在图3中,已知阴影项集{2,3}是非频繁的。利用这个知识,我们就知道项集{0,2,3},{1,2,3}以及{0,1,2,3}也是非频繁的。也就是说,一旦计算出了{2,3}的支持度,知道它是非频繁的后,就可以紧接着排除{0,2,3}、{1,2,3}和{0,1,2,3}。
Apriori算法是发现频繁项集的一种方法。
Apriori算法的两个输入参数分别是最小支持度和数据集。该算法首先会生成所有单个元素的项集列表。接着扫描数据集来查看哪些项集满足最小支持度要求,那些不满足最小支持度的集合会被去掉。然后,对剩下来的集合进行组合以生成包含两个元素的项集。接下来,再重新扫描交易记录,去掉不满足最小支持度的项集。该过程重复进行直到所有项集都被去掉。
该算法需要不断寻找候选集,然后剪枝即去掉非频繁子集的候选集,时间复杂度由暴力枚举所有子集的指数级别O(n2)将为多项式级别,多项式具体系数是底层实现情况而定的。
Ariori算法有两个主要步骤:
1、连接:(将项集进行两两连接形成新的候选集)利用已经找到的k个项的频繁项集Lk,通过两两连接得