数据挖掘概念与分析第六章笔记

挖掘频繁模式

频繁模式是频繁地出现在数据集中的模式,主要包括频繁项集模式频繁序列模式,和频繁结构模式。

我们先了解什么是项集,K-项集,数据集,绝对支持值的概念。书中都有讲解,这里简单的来说一下。

项集:最基本的模式就是项集,是指若干个项的集合

K-项集:包含K个项的项集

数据集:典型的数据集是事务的集合,每一个事务是一个非空项集,并拥有一个标识TID

绝对支持度:数据集中包含项集X的事务

如果我们想象全域是商店中商品的集合,则每种商品有一个布尔变量,表示该商品是否出现。每个购物篮可以用一个布尔向量来表示,例如

#商场中的全域变量
{牛奶,面包,麦片,鸡蛋,黄油,糖}
#顾客1
{1,1,1,0,0,0}
#顾客2
{1,1,0,1,0,1}

我们可以分析布尔向量,得到反映商品频繁关联或同事购买的购买模式,这些模式可以用哪个关联规则的形式表示

computer=>antivirus_software[support= 2%,confidence=60%]

support:为规则的支持度,该支持度为相对支持度,反映了规则的有用性,后面还有一个绝对支持度。通常需要一个最小支持度阀值或者其他相应的筛选规则来进行筛选。相对支持度是项集X的绝对支持度与数据集事务总数的比值。

confidence:反映了规则的确定性。置信度是一个事务在包含x的同时也包含y的条件概率。置信度作用于多个项的项集,因此所有的置信度都是单项的,也就是x->y与y->x的置信度不同。

 同时满足最小支持度阈值和最小置信度阈值的规则称为强规则。一般而言,关联规则的挖掘分为两步:

        1:找出所有的频繁项集,即候选规则

         2:对所有候选规则计算置信度,找出其中的强规则

因为一个频繁项集的每个子集也是频繁的,所以频繁项集里存在较多的冗余,因此引入了闭频繁项集和最大频繁项集

闭频繁项集

当项集X是频繁项集,且数据集D中不存在X的真超集Y,使得X和Y的支持度相等,则X是闭频繁项集。闭频繁项集的表示是无损压缩,不会丢失支持度的信息。通过闭频繁项集可以推出所有的频繁项集以及相应的支持度。

最大频繁项集

当项集X是频繁项集的,且数据集D中不存在X的真超集Y,使得Y是频繁项集,则X是最大频繁项集。极大频繁项集表示的是有损压缩,失去了频繁项集的支持度信息,我们可以根据极大频繁项集判断任意项集是否是频繁的,但是无法得到相应的支持度

我们讲了这些概念之后,就该来讨论怎样挖掘频繁项集。

频繁项集挖掘方法

 Apriori

 关联分析是一种在大规模数据集中寻找有趣关系的任务。Apriori是解决这一问题的基本算法。这个算法也是数据挖掘的入门算法。这是一种最有影响的挖掘布尔关联规则频繁项集的算法

Apriori算法:是通过限制候选产生发现频繁项集。该算法的主要方法就是使用一种称为逐层搜索的迭代方法,并且为了提高效率,一种被称为先验性质的重要性质被用于压缩搜索空间。

先验性质:频繁项集的所有非空子集也一定是频繁的。我们在Apriori算法中用到的实际上是该性质的反单调性:如果一个集合不能通过测试,则它的所有超集也都不能通过相同的测试。

例6.3讲了一个详细的例子,这里需要静下心来看,不然会很混乱。这里只需要简单了解一下原理就行。后面会详细的学习这个算法。

通过Apriori算法找出频繁项集之后,我们就可以直接由他们产生强关联规则,例6.4给出了例子 

参考文献Apriori算法 

书中6.2.3节提到了提高Apriori算法的效率。这是因为Apriori是一个宽度优先的算法,它有两个显著的缺点:

1:它可能仍然需要产生大量的候选集

2:它可能需要重复地扫描整个数据库,通过模式匹配检查一个很大的候选集合。

书中提到了五种提高Apriori算法效率的方法:

1:基于散列的技术:可以用于压缩候选项集的集合

2:事务压缩:不包含任何频繁k项集的事务不可能包含任何k+1项集

3:划分

4:抽样:基本思想为选取给定数据库D中的随即样本S,然后在S而不是在D中搜索频繁项集

5:动态项集计数:将数据库划分为用开始点标记的块

 纵观这里提到的几种方法,我们可以看到。这几种方法都只是在没有改变其核心思想上做的一个效率提升的工作,即旨在提升原生Apriori算法的效率。但事实上,KDD发展至今,对于频繁项集的挖掘已经有了很多种方法,其中广泛使用的是类Apriori算法

FP-growth 算法

FP-growth算法采取分治策略:首先,将代表频繁项集的数据库压缩到一颗频繁模式树,该树仍保留项集的关联信息。然后,把这种压缩后的数据库划分为一组条件数据库,每个数据库关联一个频繁项或"模式段",并分别挖掘每个条件数据库。对于每个"模式片段",只需要考察与它相关联数据集

书中的例子我是没看懂的,有那么一点点思路但是总觉得还差点什么,然后就去网上找资料。这个资料还不错FP-growth算法

FP-growth是深度优先的算法。它展示了如何使用事务数据集的压缩来表示有效的产生频繁项集,此外对于某些事务数据集,FP-growth算法比Apriori要快几个数量级 。

书中还介绍了使用垂直数据格式来挖掘频繁项集,其实这个很简单,将我们之前的思路给转换一下就行,这样的话项集的支持度计数简单地等于项集的TID集的长度

在某些情况下,如当数据集稠密和包含长模式的时候,该技术可以显著地降低频繁项集垂直格式挖掘的总开销。

挖掘闭模式和极大模式

 在挖掘的过程中直接搜索闭频繁项集,这就要求在挖掘过程中,一旦识别闭频繁项集就尽快对搜索空间进行剪枝。剪枝包括以下策略:

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

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

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

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

模式评估方法

大部分关联规则挖掘算法都是用支持度-置信度框架,但是关联规则可能是不可靠的。例6.7讲了一个最简单的例子,进而提出了提升度的概念

 提升度(lift)是一种简单的相关性度量,计算公式在书中已经给出,简单的来说就是置信度与支持度的比值。

书中介绍了六种相关性度量,并且对他们进行了比较。这里不做过多的记录。

猜你喜欢

转载自blog.csdn.net/Phoenix_tgd/article/details/81866690
今日推荐