【数据挖掘笔记六】挖掘频繁模式、关联和相关性:基本概念和方法

6.挖掘频繁模式、关联和相关性:基本概念和方法

频繁模式(frequent pattern)是频繁地出现在数据集中的模式。

6.1 基本概念

频繁模式挖掘搜索给定数据集中反复出现的联系,旨在发现大型事务或关系数据集中项之间有趣的关联或相关性,其典型例子就是购物篮分析。

购物篮分析假设全域是商品的集合,每种商品有一个布尔变量,表示该商品是否出现在购物篮中。每个购物篮是一个布尔向量表示,分析布尔向量,可得到反映商品频繁关联或同时购买的购买模式,这些模式可用关联规则(association rule)形式表示。如购买计算机也趋向于同时购买杀毒软件,用如下规则表示:computer=>antivirus_software[support=2%;confidence=60%]。规则的支持度(support)和置信度(confidence)是规则兴趣度的两种度量,分别反映所发现规则的有用性和确定性。如果规则满足最小支持度阈值和最小置信度阈值,则关联规则是有趣的。

同时满足最小支持度阈值(min_sup)和最小置信度阈值(min_conf)的规则称为强规则。

项的集合称为项集,包含k个项的项集称为k项集。项集的出现频度是包含项集的事务数,称为项集的频度、支持度计数或计数。项集支持度也称为相对支持度,而出现频度称为绝对支持度。如果项集I的相对支持度满足预定义的最小支持度阈值(即 I的绝对支持度满足对应的最小支持度计数阈值),则I是频繁项集(frequent itemset)。频繁k项集的集合通常记为Lk。关联规则的挖掘一般两步:

第一:找出所有的频繁项集;第二:由频繁项集产生强关联规则。

从大型数据集中挖掘频繁项集的主要挑战是:产生大量满足最小支持度(min_sup)的阈值的项集。项集X在数据集D中是闭的(closed),如果不存在真超项集Y,使得Y与X在D中具有相同的支持度计数。项集X是数据集D中的闭频繁项集(closed frequent itemset),如果X在D中是闭的和频繁的。项集X是D中的极大频繁项集(maximal frequent itemset)或极大项集(max-itemset),如果X是频繁的,并且不存在超项集Y,使得并且 Y在D中是频繁的。

 

6.2 频繁项集挖掘方法

Apriori算法是一种发现频繁项集的基本算法,为布尔关联规则挖掘频繁项集的原创性算法。

1)Apriori算法:通过限制候选产生发现频繁项集

先验性质:频繁项集的所有非空子集也一定是频繁的。也称为反单调性(antimonotone),指如果一个集合不能通过测试,则它的所有超集也不能通过相同的测试。

基于先验性质,Apriori算法使用逐层搜索的迭代方法,其中k项集用于探索k+1项集。首先,通过扫描数据库,累计每个项的计数,并收集满足最小支持度的项,找出频繁I项集的集合,记集合L1;然后,使用L1找出频繁2项集的集合L2,使用L2找出L3,如此下去,直到不能再找到频繁k项集。找出每个Lk需要一次数据库的完整扫描。

基于先验性质从Lk-1找出Lk,由连接步和剪枝步组成:

连接步:为找出Lk,通过将Lk-1与自身连接产生候选k项集的集合,记为Ck,算法这里假定事务或项集中的项按字段序排序。

剪枝步:Ck是Lk的超集,Ck中的成员可以是频繁也可以不是,但所有的频繁k项集都包含在Ck中。

挖掘布尔关联规则发现频繁项集的Apriori算法如下:

 

2)由频繁项集产生关联规则

    一旦数据库D中的事务找出频繁项集,就可以直接产生强关联规则(强关联规则满足最小支持度和最小置信度)。

3)提高Apriori算法的效率

提高基于Apriori挖掘的效率:

采用基于散列的技术(散列项集到对应的桶中):一种基于散列的技术可用于压缩候选k项集的集合Ck(k>1)。

事务压缩(压缩进一步迭代扫描的事务数):不包含任何频繁k项集的事务不可能包含任何频繁(k+1)项集。

划分(为找候选项集划分数据):第一阶段把D中的事务化分成n个非重叠的分区;第二阶段评估每个候选的实际支持度,确定全局频繁项集。

抽样:对给定数据的一个子集上挖掘。

动态项集计数:在扫描不同点添加候选项集,动态项集计数将数据库划分为用开始点标记的块。

4)挖掘频繁项集的模式增长方法

Apriori可能产生大量的候选项集,需要重复地扫描整个数据库,通过模式匹配检查一个大的候选集合,这个开销比较大。因此,提出一种频繁模式增长的方法(Frequent-Pattern Growth,FP-growth),该方法采用分治策略。首先将代表频繁项集的数据库压缩到一颗频繁模式树(FP树),该树保留项集的关联信息;然后把压缩后的数据库划分成一组条件数据库(一种特殊类型的投影数据库),每个数据库关联一个频繁项或模式段,并分别挖掘每个条件数据库。对于每个模式片段,只考察与它相关联数据集。

FP树的挖掘:由长度为1的频繁模式(初始后缀模式)开始,构造它的条件模式基(一个子数据库,由FP树中与该后缀模式一起出现出现的前缀路径集组成)。然后,构造它的条件FP树,并递归地在该树上进行挖掘。模式增长通过后缀模式与条件FP树产生的频繁模式连接实现。

FP-growth方法将发现长频繁模式的问题转换成在较小的条件数据库中递归地搜索一些较短模式,然后连接后缀。使用最不频繁的项做后缀,提供了很好的选择性,显著地降低了搜索开销。

算法:FP-Growth,使用FP树,通过模式增长挖掘频繁模式

输入:D:事务数据库

      min_sup:最小支持度阈值

输出:频繁模式的完全集

方法:

     1.按以下步骤构造 FP 树:

       a.扫描事务数据库D一次,收集频繁项的集合F和它们的支持度计数,对F按支持度计数降序   排序,结果为频繁项列表L。

       b.创建FP树的根节点,以null标记它,对于D中每个事务Trans,执行:

选择Trans中的频繁项,并按L中次序排序。设Trans排序后的频繁项列表为[p|P],其中p是第一个元素,而P是剩余元素的列表。调用insert_tree([p|P],T)。

如果T有子女N使得N.item_name=p.item_name,则N的计数增加1;否则创建一个新结点N,将其计数置为1,链接到它的父节点T,并且通过结点链结构将其链接到具有相同item_name的结点。如果P非空,则递归地调用insert_tree(P,N)。

      2.FP树的挖掘同构调用FP_growth(PF_tree,null)实现,该过程实现如下:

      Procedure FP_growth(Tree,a)

         if Tree包含单个路径P then

             for 路径P中结点的每个组合(记作b)

               产生模式a ∪ b ,其支持度计数support_count等于b 中结点的最小支持度计数

         else for Tree的头表中的每个ai{

             产生一个模式b=a ∪ ai,其支持度计数support_count=ai.support_count;

             构造b的条件模式基,然后构造b的条件FP树Treeb

             if Treeb ≠ ∅ then 

                调用FP_growth(Treeb,b);

         }

对FP-growth方法的性能研究表明,对于挖掘长的频繁模式和短的频繁模式,都是有效的和可伸缩的,并且大约比Apriori算法快一个数量级。

5)使用垂直数据格式挖掘频繁项集

Apriori算法和FP-growth算法都是以事务为行、商品项为列,即水平数据格式。

垂直数据格式,商品项为行,事务为列。

使用垂直数据格式,不需要扫描数据库来确定k+1项集的支持度,因为每个k项集已携带了计算支持度的完整信息。

6)挖掘闭模式和极大模式

挖掘闭频繁项集的剪枝策略包括:

a.项合并:如果包含频繁项集X的每个事务都包含项集Y,但不包含 Y 的任何真超集,则 X ∪ Y形成一个闭频繁项集,并且不必搜索包含X但不包含Y的任何项集。

b.子项集剪枝:如果频繁项集X是一个已经发现的闭频繁项集Y的真子集,并且support_count(X)=support_count(Y),则X和Y在集合枚举树种的所有后代都不可能是闭频繁项集,因此可以剪枝。

c.项跳过:在深度优先挖掘闭项集时,每一层都有一个与头表和投影数据库相关联的前缀项集X;如果一个局部频繁项p在不同层的多个头表中都具有相同的支持度,则可以将p从较高层头表中剪裁掉。

    当一个新的频繁项集导出后,要进行两种闭包检查:超集检查,检查新的频繁项集是否是某个具有相同支持度的、已经发现的、闭项集的超集;子集检查,检查新发现的项集是否是某个具有相同支持度的、已经发现的、闭项集的子集。

6.3 那些模式是有趣的:模式评估方法

关联规则挖掘算法基本都使用支持度-置信度框架。不过低支持度阈值挖掘或挖掘长模式时,会产生很多无趣的规则,这是关联规则挖掘应用的瓶颈之一。

1)强规则不一定有趣的

    基于支持度-置信度框架识别出的强关联规则,不足以过滤掉无趣的关联规则,需要度量相关性和蕴涵关系。

2)从关联分析到相关分析

为识别规则的有趣性,需使用相关性度量来扩充关联规则的支持度-置信度框架。相关规则不仅用支持度和置信度度量,而且还用项集A和B之间的相关性度量。相关性度量的方法有:

提升度(lift):项集A的出现独立于项集B的出现,如果P(A∪B)=P(A)P(B);否则,作为事件,项集A和B是依赖的(dependent)和相关的(correlated),则A和B出现之间的提升度定义为:

lift(A,B)=P(A∪B)/P(A)P(B)

如果lift(A,B)<1,则说明A的出现和B的出现是负相关的;如果lift(A,B)>1,则A和B是正相关的,意味每一个的出现蕴涵另一个的出现;如果lift(A,B)=1,则说明A和B是独立的,没有相关性。

这四个度量,度量值仅受A、B和A∪B的支持度的影响,或说是受条件概率P(A|B)和P(B|A)的影响,而不受事务总个数的影响。四种度量方法的另一个共同性质是:每个度量值都去【0,1】,且值越大,A和B越紧密。

总结:仅使用支持度和置信度度量来挖掘关联可能产生大量规则,其中有可能存在用户不感兴趣的;因此,可用模式兴趣度度量来扩展支持度-置信度框架,有助于聚焦到强模式联系的规则挖掘上。

6.4 小结

1)大量数据中的频繁模式、关联和相关关系的发现在选择性销售、决策分析和商务管理方面是有用的。一个流行的应用领域是购物篮分析,同构搜索经常一起(或依次)购买的商品的集合,研究顾客的购买习惯。

2)关联规则挖掘首先找出频繁项集(项的集合,如 A和B,满足最小支持度阈值,或任务相关元组的百分比),然后,由它们产生形如A->B的强关联规则;这些规则满足最小置信度阈值(预定义的,在满足A的条件下满足B的概率);可进一步分析关联,发现项集A和B之间具有统计相关性的相关规则。

3)对于频繁项集挖掘,已有许多有效的、可伸缩的算法,可导出关联和相关规则,分成三类:类Apriori算法、基于频繁模式增长的算法,如FP-growth;3)使用垂直数据格式的算法。

4)Apriori算法是为布尔关联规则挖掘频繁项集的原创新算法,逐层进行挖掘,利用先验性质:频繁项集的所有非空子集也都是频繁的;在第k次迭代(k≥2),根据频繁(k-1)项集形成k项集候选,并扫描数据库一次,找出完成的频繁k项集的集合Lk;使用涉及散列和事务压缩技术的变形使得过程更有效。其他变形包括划分数据(对每分区挖掘,然后合并结果)和抽样数据(对数据子集挖掘);这些变形可将数据扫描次数减少到一两次。

5)频繁模式增长(FP-growth)是一种不产生候选的挖掘频繁项集方法;构造一个高度压缩的数据结构(FP树),压缩原来的事务数据库;和类Apriori方法使用产生-测试策略不同,FP-growth更聚焦于频繁模式(段)增长,避免了高代价的候选产生,可获得更好的效率。

6)使用处置数据格式挖掘频繁模式(ECLAT)将给定的、用TID-项集形式的水平数据格式事务数据集变换成项-TID-集合形式的垂直数据格式;根据先验性质和附加的优化技术(如diffset),通过TID-集的交,对变换后的数据集进行挖掘。

7)并非所有的强关联规则都是有趣的,应用模式评估度量来扩展支持度-置信度框架,识别有效的有趣规则;一种度量是零不变的,如果它的值不受零事务(即不包含所考虑项集的事务)的影响,在许多模式评估度量中,给出了提升度、、全置信度、最大置信度、余弦和Kulczynski。后四种是零不变的;可把Kulczynski度量和不平衡比一起使用,提供项集间的模式联系。

 

6.5 项目课题

    DBLP数据集(http://www.informatik.unitrier.de/~ley/db/)包括超过100万篇发表在计算机科学会议和杂志上的论文项。这些项中,很多作者有合著关系,提出一种方法,挖掘密切相关的(即经常一起写文章的)合著者关系;根据挖掘结果和模式评估度量,分析那种度量方法更有效。



  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python数据挖掘学习笔记主要包括以下几个方面的内容:Python基础知识、Python爬虫技术、Python数据分析与数据挖掘。其中,Python基础知识部分介绍了Python编程语言的基本语法、数据类型、流程控制等内容,为数据挖掘的学习打下了基础。Python爬虫技术部分介绍了如何使用Python编写爬虫程序,从网页中获取所需数据。Python数据分析与数据挖掘部分则介绍了使用Python进行数据分析和数据挖掘的相关技术和工具。 在Python数据挖掘中,还涉及到一些扩展库的使用,可以使用pip或apt-get进行安装,例如numpy库可以使用命令"sudo pip install numpy"或"sudo apt-get install python-numpy"进行安装。 另外,Matplotlib是Python中最常用的绘图库之一,主要用于绘制二维图形,也可以绘制简单的三维图形。下面是一个使用Matplotlib进行简单绘图的示例代码: ```python import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 1000) y = np.sin(x) z = np.cos(x ** 2) plt.figure(figsize=(8, 4)) plt.plot(x, y, label='$\sin x$', color='red', linewidth=2) plt.plot(x, z, 'b--', label='$\cos x^2$') plt.xlabel('Time(s)') plt.ylabel('Volt') plt.title('A Simple Example') plt.ylim(0, 2.2) plt.legend() plt.show() ``` 这段代码使用了numpy库生成了一组x轴的数据,然后分别计算了对应的y轴和z轴的数值。接下来使用Matplotlib进行绘图,其中plt.plot函数用于绘制曲线,plt.xlabel和plt.ylabel分别设置x轴和y轴的标签,plt.title设置图的标题,plt.ylim设置y轴的范围,plt.legend用于显示图例,plt.show用于显示图形。 通过学习这些内容,你可以掌握Python数据挖掘的基本知识和常用技术,为进一步的学习和实践打下坚实的基础。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python数据挖掘学习笔记](https://blog.csdn.net/yinghuoai/article/details/88392141)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [python数据挖掘笔记](https://blog.csdn.net/djm82755/article/details/101452842)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值