21/7/7 读书笔记 关联规则挖掘 频繁项集的产生
21/7/7 读书笔记
数据挖掘导论 关联规则挖掘简介
以分析购物篮事务为例,我们将这些数据描述为多行事务,每行事务对应一个标识和一个用户购买的商品的集合。我们需要发掘这些集合间的关系,从而找到一些关联性来指导工作。
数据的表现方法:每条事务为一行,每种商品为一列,当该商品在该事务的集合中出现时,记为1,否则记为0.通常来说,1比0更有意义,因此这种数据也称为非对称(asymmetric)数据。当然,我们这里仅考虑“是否出现”这个层面,因此数据都是二元的,而还可能需要考虑数量、价格等多个方面,这就使得数据不再是二元的了。
项集和支持度计数:项集指所有购物篮中可能出现的商品的全集的一个子集\(X\),而支持度计数是指\(X\)在所有事务中出现的次数,即所有在集合中包含该项集的事务的计数。
关联规则:关联规则对于项集\(X\)和\(Y\)可以被描述为\(X\to Y\)的一个表达式,其中\(X\bigcap Y=\empty\)。关联规则反映X的出现和Y的出现之间的关联性。
支持度和置信度:支持度反映了当前关联规则的广泛性,置信度反映了当前规则的可靠性。支持度用\(\frac{X\bigcup Y的支持度计数}{总事务数}\)描述,置信度用\(\frac{X\bigcup Y的支持度计数}{X的支持度计数}\)描述,。对于一个给定的关联规则,其越经常在事务中出现,其支持度越高;而Y在包含X的事务汇总出现概率越高,置信度越高。
对于关联规则的发掘问题,我们将其描述为找到所有可能的关联中满足支持度和置信度要求的所有关联规则。但是按照数学分析,遍历所有的可能规则将无法在多项式时间内完成,因此我们需要用其他的方法来寻找规则。而我们注意到多个关联规则的支持度计算具有重复性,即只需要计算\(X\bigcup Y\)的支持度计数,因此我们可以先计算支持度,如果支持度不符合要求的话就直接抛弃所有这个支持度度量所对应的所有可能规则,而\(X\bigcup Y\)的支持度计数一定小于\(X\)或者\(Y\)的支持度计数。我们将策略规划为两步:
- 频繁项集的产生:频繁项集(frequent itemset)描述了满足最小支持度阈值的所有项集
- 规则的产生:从频繁项集中提取出所有符合置信度要求的规则,称为强规则(strong rule)
数据挖掘导论 频繁项集的产生
我们用格结构来描述各个候选项集的关系。
格结构:格是一种特殊的树,项集格中分层次构建了多个项集间的联系,如下图所示
我们不难发现,候选项集的数目是指数性上升的,同时我们必须将每个候选项集和每个事务进行比较,这种比较进一步加大了计算难度。实际上,我们对于频繁项集的产生主要从以下两个方面进行思考:
- 减小候选项集的个数
- 减小候选项集和事务的比较次数
对于第一个问题,我们可以用一些先验的原理来降低其数量。观察候选项集格和对应的支持度计数,我们可以发现一个规律:任意一个项集如果属于频繁项集,那么它的子集也一定属于频繁项集,同时如果一个项集不频繁,那么它的所有超集也一定不频繁。因此我们就能够通过计算支持度来对项集格进行剪枝。这利用了支持度计数的反单调性。
单调性:在集合间的单调性描述与函数上的单调性不同,如果对应于每个集合存在一个度量\(f\),度量\(f\)是单调的当且仅当:
\[\forall X,Y\in J(=2^I),\ (X\subseteq Y)\to f(X)\leq f(Y) \]反之则为反单调性的:
\[\forall X,Y\in J(=2^I),\ (X\subseteq Y)\to f(X)\geq f(Y) \]
下面我们讨论一些具体的实现算法。先验原理告诉我们一个k项集的如果不包含任何一个频繁k-1项集,那么它一定不是频繁的,因此它指导我们去通过构建频繁(k-1)项集来获得候选k项集,再从k项集中筛选出那些频繁k项集。(包含一个频繁k-1项集只是频繁k项集的必要而不充分条件)
候选项集的生成
而从技术上讲,从频繁k-1项集得到候选k项集的过程是比较复杂的,我们需要保证我们的生成算法满足以下要求:
- 避免产生不必要的候选项集:因为频繁\(r\)项集(\(r<k\))对我们来说已知,因此我们可以利用先验原理去排除相当一部分的候选项集,这些项集称为不必要的。
- 确保候选项集是完全的:保证所有的频繁项集都属于我们生成的候选项集。
- 不重复生成相同的候选项集:对于一个候选项集,其可能被多种生成方式生成,我们需要确保一个候选项集原则上只被生成一次,避免浪费计算资源。
生成算法的思想分为两种:
- \(F_{k-1}\times F_1\)方法:利用频繁项(频繁1项集)和频繁(k-1)项集生成候选k项集,这个方法保证了完全性,但是由于如果直接生成会导致重复生成,因此需要使用字典序将每个频繁(k-1)项集的项排序,并要求频繁(k-1)项集\(X\)只能用字典序比X中任意元素都大的频繁项组合,避免了重复生成。
- \(F_{k-1}\times F_{k-1}\)方法:利用字典序对项集进行排序的前提下,当一对频繁(k-1)项集的前k-2项一致时进行合并。兼顾了完全性和不重复性。
如何进行支持度计数
支持度计数可以用两种方式,一是将每个事务同所有候选项集进行比对,当事务和候选项集数目很大时,遍历更新候选项集的支持度计数是计算昂贵的;二是枚举每个事务所包含的集合的所有自己(即包含的所有可能项集),并利用它们更新对应候选项集的支持度计数。我们主要讨论第二种方式
该方式下主要问题在于两点:
- 如何生成事务包含集合的所有可能k项集?
- 如何用生成的项集去更新候选项集的支持度计数?
对于第一个问题,在被字典序限制的情况下,前缀关系被限制,因此可以利用前缀结构进行生成,产生k项集后就停止继续拓展;对于第二个问题,生成过程中前缀结构构成的树正好能够用于生成hash树存放候选项集,然后在生成的过程中沿hash树去找到对应的候选项集并更新其支持度计数,因此可以将两个问题用同一个hash树结构来统一解决。

浙公网安备 33010602011771号