ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

[机器学习算法]关联分析

2020-01-23 16:05:53  阅读:293  来源: 互联网

标签:机器 项集 频繁 算法 规则 置信度 关联 rightarrow


相关概念

1.关联分析

全球零售巨头沃尔玛分析消费者购物行为时偶然发现男性顾客同时购买啤酒和尿布的比例较高,于是通过将啤酒和尿布捆绑销售的方式提高了两者的销量。这种用于发现隐藏在大型数据集中的有意义联系的分析方法即是关联分析association analysis,所发现的规则可以用关联规则association rule或频繁项集的形式表示:
{尿布}{啤酒} \{\text{尿布}\} \rightarrow\{\text{啤酒}\} {尿布}→{啤酒}

2.购物篮数据

许多企业在日复一日的运营中积累了大量的数据,比如商店收银台每天收集的大量顾客购物数据。有一类数据,每一行对应着一个事务,这类数据通常被称为购物篮数据market basket transactiontcd

3.二元表示

购物篮数据可以用二元形式表示,其中每个事务中有多个项。项可以用二元变量表示,如果项在事务中出现则它的值为1,否则为0。

因为通常认为项在事务中出现比不出现更重要,所以项是非对称asymmetric二元变量。

典型的购物篮数据及其二元表示如下:

4.项集和支持度计数

I={i1,i2,...,id}I=\{i_1,i_2,...,i_d\}I={i1​,i2​,...,id​}是购物篮数据中所有项的集合,而T={t1,t2,...,tN}T=\{t_1,t_2,...,t_N\}T={t1​,t2​,...,tN​}是所有事务的集合。在关联分析中,包含000个或多个项的集合被称为项集itemset。如果一个项集包含kkk个项则称为kkk项集。
如果项集XXX是事务tjt_jtj​的子集,则称事务tjt_jtj​包含项集XXX。项集的一个重要性质就是它的支持度计数,即包含特定项集的事务个数。数学上,项集XXX的支持度计数σ(X)\sigma(X)σ(X)表示为:
σ(X)=tiXti,tiT \sigma(X) = |{t_i|X\subseteq t_i, t_i\in T}| σ(X)=∣ti​∣X⊆ti​,ti​∈T∣

5.关联规则:支持度与置信度

关联规则association rule指的是形如XYX \rightarrow YX→Y的蕴涵表达式,其中$X \cap Y = \varnothing $。衡量关联规则强度可以用它的支持度support和置信度confidence来表示:

  • 支持度:确定规则可以用于给定数据集的频繁程度
  • 置信度:确定YYY在XXX中出现的频繁程度

s(XY)=σ(XY)Nc(XY)=σ(XY)σ(X) s(X \rightarrow Y) = \frac{\sigma(X \cup Y)}{N} \\ c(X \rightarrow Y) = \frac{\sigma(X \cup Y)}{\sigma(X)} s(X→Y)=Nσ(X∪Y)​c(X→Y)=σ(X)σ(X∪Y)​

支持度主要是用于删去无意义的规则(说明这些规则可能是偶然出现),置信度衡量推理出的规则的可靠性。对于给定的规则XYX \rightarrow YX→Y,置信度越高,YYY包含在XXX中的可能性也就越大。置信度可以估计YYY在XXX给定情况下的条件概率。

6.关联规则发现

给定事务的集合TTT,关联规则发现指的是找出支持度大于等于minsup并且置信度大于等于minconf的所有规则。

挖掘关联规则的原始做法是:计算每个可能规则的支持度和置信度。但是从数据集提取的规则的数目达指数级别(包含ddd个项的数据集提取的可能规则总数为R=3d2d+1+1R=3^d-2^{d+1}+1R=3d−2d+1+1),因此这种做法的代码极高。

一种可靠的提高关联规则算法性能的方法将关联规则挖掘任务拆分为如下的两个子任务:

  • 频繁项集产生:发现满足最小支持度阈值的所有项集,这些项集被称为频繁项集frequent itemset
  • 规则的产生:目标是从上一步中发现的频繁项集中提取所有高置信度的规则,这些规则被称为强规则strong rule

通常频繁相机产生所需的计算开销远大于产生规则所需的计算开销

频繁项集的产生

一般包含kkk个项的数据集可能产生2k12^k-12k−1个频繁项集(不包括空集)。当kkk足够大时,需要搜索的项集空间是指数规模的。下图展示了I={a,b,c,d}I=\{a, b, c, d\}I={a,b,c,d}的项集格结构lattice structure

最笨的方法是挨个确定格结构中每个候选项集candidate itemset的支持度计数,需要进行O(NMw)\mathcal{O}(NMw)O(NMw)次比较,其中NNN表示事务数,M=2k1M=2^k -1M=2k−1表示候选项集数,www是事务的最大宽度。

有如下方法可以降低产生频繁项集的计算复杂度:

  • 减少候选项集的数目MMM,比如下文介绍的先验apriori原理,可以不用计算支持度值而删除某些候选项集
  • 减少比较次数:替代将每个候选项集和每个事务相匹配的方法,可以使用更高级的数据结构或者存储候选项集或者压缩数据集来减少比较次数

1.先验原理

先验原理:如果一个项集是频繁的,则它的所有子集都是频繁的;如果一个项集是非频繁的,则它的所有超集也一定是非频繁的。

2.Apriori算法的频繁项集产生

CkC_kCk​为候选kkk项集的集合,而FkF_kFk​为频繁kkk项集集合,先验算法可表示为:

  • 确定每个项的支持度,得到频繁111项集的集合F1F_1F1​
  • 使用上一次迭代发现的频繁k1k-1k−1项集产生新的候选kkk项集
  • 确定候选项的支持度计数,删去支持度计数小于minsup的所有候选项集
  • 当没有新的频繁项集产生,即Fk=F_k = \varnothingFk​=∅时算法结束

3.计算复杂度

Apriori算法的计算复杂度受如下因素影响:

  • 支持度阈值:降低支持度阈值通常将导致更多的频繁项集,算法需要扫描数据集的次数也将增多
  • 项数(维度):随着项数的增加,需要更多的空间存储箱的支持度计数
  • 事务数:由于该算法需要反复扫描数据集,因此它的运行时间随着事务数增加而增加
  • 事务的平均宽度:一方面频繁项集的最大长度随着事务平均宽度增加而增加,另一方面也会增加支持度计数时Hash树的遍历次数

规则产生

忽略前件或者后件为空的规则(Y\varnothing \rightarrow Y∅→Y或YY \rightarrow \varnothingY→∅),每个频繁项集可以产生多达2k22^k-22k−2个关联规则。关联规则可以这样提取:将项集YYY划分为两个非空的子集XXX和YXY-XY−X,使得XYXX \rightarrow Y-XX→Y−X满足置信度阈值即可。

如果规则XYXX \rightarrow Y-XX→Y−X不满足置信度阈值,则形如XYXX' \rightarrow Y-X'X′→Y−X′的规则也一定不满足置信度阈值,其中XX'X′是XXX的子集。

1.基于置信度的剪枝

定理:如果XYXX \rightarrow Y-XX→Y−X不满足置信度阈值,则形如XYXX' \rightarrow Y-X'X′→Y−X′的规则也一定不满足置信度阈值,其中XX'X′是XXX的子集。

2.Apriori算法中规则的产生

Apriori算法采用一种逐层方法来产生关联规则,其中每层对应于规则后件中的项数。首先提取规则后件只含一个项的所有高置信度规则,使用这些规则来产生新的候选规则,如下图所示:

Reference

[1] 数据挖掘导论

TOMOCAT 发布了233 篇原创文章 · 获赞 72 · 访问量 279万+ 他的留言板 关注

标签:机器,项集,频繁,算法,规则,置信度,关联,rightarrow
来源: https://blog.csdn.net/TOMOCAT/article/details/104076199

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有