关联规则挖掘

基本概念(续)

定义一:设I={i1,i2,…,im}I=\{i_1,i_2,\dots,i_m\},是m个不同的项目的集合,每个iki_k称为一个项目。项目的集合I称为项集。其元素的个数称为项集的长度,长度为k的项集称为k-项集。引例中每个商品就是一个项目,项集为I={bread,beer,cake,cream,milk,tea}I=\{bread, beer, cake,cream, milk, tea\},I的长度为6。

定义二:每笔交易T是项集I的一个子集。对应每一个交易有一个唯一标识交易号,记作TID。交易全体构成了交易数据库D,|D|\vert D\vert等于D中交易的个数。引例中包含10笔交易,因此|D|=10\vert D\vert=10。

定义三:对于项集X,设定count(X⊆T)count(X\subseteq T)为交易集D中包含X的交易的数量,则项集X的支持度为:

support(X)=count(X⊆T)|D|

support(X)=\frac{count(X\subseteq T)}{|D|}

引例中X={bread,milk}X=\{bread, milk\}出现在T1,T2,T5,T9和T10中,所以支持度为0.5。

定义四最小支持度是项集的最小支持阀值,记为SUPminSUP_{min},代表了用户关心的关联规则的最低重要性。支持度不小于SUPminSUP_{min}的项集称为频繁集,长度为k的频繁集称为k-频繁集。如果设定SUPminSUP_{min}为0.3,引例中{bread,milk}\{bread, milk\}的支持度是0.5,所以是2-频繁集。

定义五关联规则是一个蕴含式:

R:X⇒Y

R:X\Rightarrow Y

其中X⊂IX\subset I,Y⊂IY\subset I,并且X∩Y=∅X\cap Y=\varnothing。表示项集X在某一交易中出现,则导致Y以某一概率也会出现。用户关心的关联规则,可以用两个标准来衡量:支持度和可信度。

定义六:关联规则R的支持度是交易集同时包含X和Y的交易数与|D|\vert D\vert之比。即:

support(X⇒Y)=count(X∩Y)|D|

support(X\Rightarrow Y)=\frac{count(X\cap Y)}{|D|}

支持度反映了X、Y同时出现的概率。关联规则的支持度等于频繁集的支持度。

定义七:对于关联规则R,可信度是指包含X和Y的交易数与包含X的交易数之比。即:

confidence(X⇒Y)=support(X⇒Y)support(X)

confidence(X\Rightarrow Y)=\frac{support(X\Rightarrow Y)}{support(X)}

可信度反映了如果交易中包含X,则交易包含Y的概率。一般来说,只有支持度和可信度较高的关联规则才是用户感兴趣的。

定义八:设定关联规则的最小支持度和最小可信度为SUPminSUP_{min}和CONFminCONF_{min}。规则R的支持度和可信度均不小于SUPminSUP_{min}和CONFminCONF_{min},则称为强关联规则。关联规则挖掘的目的就是找出强关联规则,从而指导商家的决策。

这八个定义包含了关联规则相关的几个重要基本概念,关联规则挖掘主要有两个问题:

1.找出交易数据库中所有大于或等于用户指定的最小支持度的频繁项集。

2.利用频繁项集生成所需要的关联规则,根据用户设定的最小可信度筛选出强关联规则。

其中,步骤1是关联规则挖掘算法的难点,下文介绍的Apriori算法和FP-growth算法,都是解决步骤1问题的算法。

参考:

http://blog.csdn.net/OpenNaive/article/details/7047823

Apriori算法

Apriori算法的思路如下:

1.第一次扫描交易数据库D时,产生1-频繁集。在此基础上经过连接、修剪产生2-频繁集。以此类推,直到无法产生更高阶的频繁集为止。

2.在第k次循环中,也就是产生k-频繁集的时候,首先产生k-候选集,k-候选集中每一个项集都是对两个只有一个项不同的属于k-1频繁集的项集连接产生的。

3.k-候选集经过筛选后产生k-频繁集。

从频繁集的定义,我们可以很容易的推导出如下结论:

如果项目集X是频繁集,那么它的非空子集都是频繁集。

如果k-候选集中的项集Y,包含有某个k-1阶子集不属于k-1频繁集,那么Y就不可能是频繁集,应该从候选集中裁剪掉。Apriori算法就是利用了频繁集的这个性质。

参考:

http://zhan.renren.com/dmeryuyang?gid=3602888498023976650&checked=true

http://blog.csdn.net/lizhengnanhua/article/details/9061755

FP-growth算法

Aprori算法利用频繁集的两个特性,过滤了很多无关的集合,效率提高不少,但是我们发现Apriori算法是一个候选消除算法,每一次消除都需要扫描一次所有数据记录,造成整个算法在面临大数据集时显得无能为力。

FP-Growth算法是韩家炜等人在2000年提出的关联分析算法。它通过构造一个树结构来压缩数据记录,使得挖掘频繁项集只需要扫描两次数据记录,而且该算法不需要生成候选集合,所以效率会比较高。

注:韩家炜,中国科学技术大学本科(1979)+中科院硕士+威斯康辛大学博士(1985)。美国伊利诺伊大学香槟分校计算机系教授,IEEE和ACM院士。

FpGrowth算法的平均效率远高于Apriori算法,但是它并不能保证高效率,它的效率依赖于数据集,当数据集中的频繁项集的没有公共项时,所有的项集都挂在根结点上,不能实现压缩存储,而且Fptree还需要其他的开销,需要存储空间更大,使用FpGrowth算法前,对数据分析一下,看是否适合用FpGrowth算法。

参考:

http://www.cnblogs.com/fengfenggirl/p/associate_fpgowth.html

幸存者偏差

二战期间,盟军需要对战斗机进行装甲加厚,以提高生还率,但由于军费有限,只能进行局部升级。那么问题来了,究竟哪个部位最关键,最值得把装甲加厚来抵御敌方炮火呢?人们众口不一,最后一致决定采用统计调查的方式来解决,即:仔细检查每一驾战斗机返回时受到的损伤程度,计算出飞机整体的受弹状况,然后根据大数据分析决定。

不久,统计数据很快出炉:盟军飞机普遍受弹最严重的地方是机翼,有的几乎被打成了筛子;相反,受弹最轻的地方是驾驶舱及尾部发动机,许多飞机的驾驶舱甚至连擦伤都没有。

正当所有人拿着这份确凿无疑的报告准备给机翼加厚装甲时,统计学家Abraham Wald阻拦了他们,同时提出了一个完全相反的方案:加厚驾驶舱与尾部。理由非常简单:这两个位置中弹的飞机,都没有回来。换言之,它们是一份沉默的数据——“死人不会说话”。

最后,盟军高层纷纷听取了这个建议,加固了驾驶舱与尾部,果然空中战场局势得以好转,驾驶员生还率也大大提高。事实证明,这是一个无比英明的措施。

这个事例也被称作“幸存者偏差”(Survivorship bias)。它是一种典型的由于模型不当,导致的“数据说谎”。

注:Abraham Wald,1902~1950,生于奥匈帝国,维也纳大学博士。1938年为躲避纳粹,移民美国,哥伦比亚大学教授。Herman Chernoff的导师。其子Robert M. Wald,为著名理论物理学家,芝加哥大学教授,黑洞理论的提出者之一。

关联规则评价

“数据说谎”的问题很普遍。再看这样一个例子,我们分析一个购物篮数据中购买游戏光碟和购买影片光碟之间的关联关系。交易数据集共有10,000条记录,如表1所示:

表1 买游戏 不买游戏 行总计
买影片 4000 3500 7500
不买影片 2000 500 2500
列总计 6000 4000 10000

假设我们设置得最小支持度为30%,最小自信度为60%。从上面的表中,可以得到:

support(买游戏光碟→买影片光碟)=4000/10000=40%

support(买游戏光碟\to 买影片光碟)=4000/10000=40\%

confidence(买游戏光碟→买影片光碟)=4000/6000=66%

confidence(买游戏光碟\to 买影片光碟)=4000/6000=66\%

这条规则的支持度和自信度都满足要求,因此我们很兴奋,我们找到了一条强规则,于是我们建议超市把影片光碟和游戏光碟放在一起,可以提高销量。

可是我们想想,一个喜欢的玩游戏的人会有时间看影片么,这个规则是不是有问题,事实上这条规则误导了我们。在整个数据集中买影片光碟的概率p(买影片)=7500/10000=75%,而买游戏的人也买影片的概率只有66%,66%<75%恰恰说明了买游戏光碟抑制了影片光碟的购买,也就是说买了游戏光碟的人更倾向于不买影片光碟,这才是符合现实的。

从上面的例子我们看到,支持度和自信度并不总能成功滤掉那些我们不感兴趣的规则,因此我们需要一些新的评价标准,下面介绍几种评价标准:

相关性系数

相关性系数的英文名是Lift,这就是一个单词,而不是缩写。

lift(X⇒Y)=supp(X∪Y)supp(X)×supp(Y)

\mathrm{lift}(X\Rightarrow Y) = \frac{ \mathrm{supp}(X \cup Y)}{ \mathrm{supp}(X) \times \mathrm{supp}(Y) }

lift(X⇒Y)⎧⎩⎨>1,=1,<1,正相关独立负相关

\mathrm{lift}(X\Rightarrow Y)\begin{cases} >1, & 正相关 \\ =1, & 独立 \\

实际运用中,正相关和负相关都是我们需要关注的,而独立往往是我们不需要的。显然:

lift(X⇒Y)=lift(Y⇒X)

\mathrm{lift}(X\Rightarrow Y)=\mathrm{lift}(Y\Rightarrow X)

确信度

Conviction的定义如下:

conv(X⇒Y)=1−supp(Y)1−conf(X⇒Y)

\mathrm{conv}(X\Rightarrow Y) =\frac{ 1 - \mathrm{supp}(Y) }{ 1 - \mathrm{conf}(X\Rightarrow Y)}

它的值越大,表明X、Y的独立性越小。

卡方系数

卡方系数是与卡方分布有关的一个指标。参见:

https://en.wikipedia.org/wiki/Chi-squared_distribution

χ2=∑i=1n(Oi−Ei)2Ei

\chi^2 = \sum_{i=1}^n \frac{(O_i - E_i)^2}{E_i}

注:上式最早是Pearson给出的。

公式中的OiO_i表示数据的实际值,EiE_i表示期望值,不理解没关系,我们看一个例子就明白了。

表2 买游戏 不买游戏 行总计
买影片 4000(4500) 3500(3000) 7500
不买影片 2000(1500) 500(1000) 2500
列总计 6000 4000 10000

表2的括号中表示的是期望值。以第1行第1列的4500为例,其计算方法为:7500×6000/10000。

经计算可得表2的卡方系数为555.6。基于置信水平和自由度(r−1)∗(c−1)=(行数−1)∗(列数−1)=1(r-1)*(c-1)=(行数-1)*(列数-1)=1,查表得到自信度为(1-0.001)的值为6.63。

555.6>6.63,因此拒绝A、B独立的假设,即认为A、B是相关的,而

E(买影片,买游戏)=4500>4000

E(买影片,买游戏)=4500>4000,因此认为A、B呈负相关。

全自信度

all_confidence(A,B)=P(A∩B)max{P(A),P(B)}=min{P(B|A),P(A|B)}=min{confidence(A→B),confidence(B→A)}

all\_confidence(A,B)=\frac{P(A\cap B)}{max\{P(A),P(B)\}}\\=min\{P(B|A),P(A|B)\}=min\{confidence(A\to B),confidence(B\to A)\}

最大自信度

max_confidence(A,B)=max{confidence(A→B),confidence(B→A)}

max\_confidence(A,B)=max\{confidence(A\to B),confidence(B\to A)\}

Kulc

kulc(A,B)=confidence(A→B)+confidence(B→A)2

kulc(A,B)=\frac{confidence(A\to B)+confidence(B\to A)}{2}

cosine距离

cosine(A,B)=P(A∩B)sqrt(P(A)∗P(B))=sqrt(P(A|B)∗P(B|A))=sqrt(confidence(A→B)∗confidence(B→A))

cosine(A,B)=\frac{P(A\cap B)}{sqrt(P(A)*P(B))}=sqrt(P(A|B)*P(B|A))\\=sqrt(confidence(A\to B)*confidence(B\to A))

Leverage

Leverage(A,B)=P(A∩B)−P(A)P(B)

Leverage(A,B) = P(A\cap B)-P(A)P(B)

不平衡因子

imbalance ratio的定义:

IR(A,B)=|support(A)−support(B)|(support(A)+support(B)−support(A∩B))

IR(A,B)=\frac{|support(A)-support(B)|}{(support(A)+support(B)-support(A\cap B))}

全自信度、最大自信度、Kulc、cosine,Leverage是不受空值影响的,这在处理大数据集是优势更加明显,因为大数据中空记录更多,根据分析我们推荐使用kulc准则和不平衡因子结合的方法。

参考:

http://www.cnblogs.com/fengfenggirl/p/associate_measure.html

机器学习(十八)——关联规则挖掘相关推荐

  1. 【Python数据挖掘课程笔记】八.关联规则挖掘及Apriori实现购物推荐

    #2018-03-23 10:48:40 March Friday the 12 week, the 082 day SZ SSMR[Python数据挖掘课程笔记]八.关联规则挖掘及Apriori实现 ...

  2. 入门机器学习(十八)--异常检测(Anomaly Detection)

    异常检测(Anomaly Detection) 1. 问题动机(Problem Motivation) 2. 高斯分布(Gaussian Distribution) 3. 算法(Algorithm) ...

  3. 《红楼梦》后四十回真假辨析——数据挖掘之关联规则挖掘

    前言 很多人都听说过<红楼梦>的后四十回并非曹雪芹所著.本文就是用关联规则挖掘的方法,验证红楼梦后四十回与前八十回之间的用词差异. 基本概念定义 关联:自然界中某种事物发生时,其他事物也会 ...

  4. 机器学习作业(第十八次课堂作业)

    机器学习作业(第十八次课堂作业) 猜想 对于上述问题, 我首先认为是数据特殊导致. 编程证明 反复更改数据集.减少数据偶然性. 结果 事实是,无论如何更改数据集, sklearn都只显示数据 f1-s ...

  5. 【机器学习】关联规则挖掘算法 + 三大案例实战 + Apriori算法 + Python代码实现

    文章目录 一.关联规则概述 1.1 关联规则引入 1.2 关联规则相关概念介绍 1.2.1 样本.事务.项集.规则 1.2.2 支持度.置信度 1.2.3 提升度 1.2.4 所有指标的公式 二.Py ...

  6. 机器学习之MATLAB代码--CEEMDAN+EEMD+EMD+VMD+IMF重构络(十八)

    机器学习之MATLAB代码--CEEMDAN+EEMD+EMD+VMD+IMF重构络(十八) 压缩分量的EEMD代码 压缩分量的EEMD数据 压缩分量的EEMD结果 CEEMDAN代码 CEEMDAN ...

  7. 机器学习笔记(二十八):高斯核函数

    凌云时刻 · 技术 导读:核函数是机器学习算法中一个重要的概念.简单来讲,核函数就是样本数据点的转换函数.这一节我们来看看应用非常广泛的一个核函数,高斯核函数. 作者 | 计缘 来源 | 凌云时刻(微 ...

  8. 机器学习之十八(读书笔记)

    Generative Adversarial Network(生成性对抗网络) Conditional Generation by GAN 二十八.Generative Adversarial Net ...

  9. 大数据分析十八般工具

    大数据分析是一个含义广泛的术语,是指数据集,如此庞大而复杂的,他们需要专门设计的硬件和软件工具进行处理.该数据集通常是万亿或EB的大小.这些数据集收集自各种各样的来源:传感器,气候信息,公开的信息,如 ...

最新文章

  1. 微软提出极低资源下语音合成与识别新方法,小语种不怕没数据!| ICML 2019
  2. Spring scope解惑
  3. 网上一个仿TP挂钩内核的源码
  4. Android strings.xml中定义字符串显示空格
  5. win7里面计算机叫什么,Win7电脑中的mrt.exe是甚么文件
  6. Java-打印三角形
  7. 互联网“高薪榜”曝光,物联网将接棒?
  8. 使用 windows命令和iconv.exe批量转换文件编码
  9. 6.0新特性 权限管理方式
  10. 文本分析python和r_中文文本挖掘R语言和Python哪个好?
  11. 采用Trench肖特基二极管,实现功率密度的显著提升
  12. 1102: 【入门】字符图形1-星号矩形
  13. 2、数码相框之显示文字
  14. 数值计算之 插值法(6)样条插值
  15. PDF页面旋转怎么操作
  16. 聚集理论派+实践派大咖,与您一起剖析CI/CD的那些事儿 | 在线研讨会《如何实现集中管理、灵活高效的CI/CD》
  17. 看精神小伙是如何智斗骗子的
  18. 如何使用js实现交通红绿灯
  19. Sci-Fi 科幻迷们,爱死机第二季来啦 | Mixlab 科幻实验
  20. 2万字库PHP汉字转拼音(UTF-8)

热门文章

  1. 数据访问层,完整的增,删,改,查
  2. php伪协议实现命令执行的七种姿势
  3. 主函数main中变量(int argc,char *argv[ ])的含义
  4. linux window命令大全,Windows 与 Linux->vim中常用命令大全
  5. java高级知识点_JAVA高级阶段知识点汇总
  6. vue 实现 web端滚动刷新 排序 筛选 响应式布局 (源码)
  7. java 8 stream_深度分析:java8的新特性lambda和stream流,看完你学会了吗?
  8. Centos 7 docker 拉取镜像慢
  9. 代码复杂度降级的几个实例
  10. linux创建用户,并修改分组,改变权限