读书笔记 -- 011_数据挖掘_频繁模式_关联性_相关性_1

来源:互联网 发布:淘宝客推广怎么样 编辑:程序博客网 时间:2024/05/19 13:14

概念

频繁模式(frequent pattern):是频繁地出现在数据集中的模式(如项集、子序列或子结构)。频繁模式挖掘搜索给定数据集中反复出现的联系。
支持度(support)置信度(confidence)是关联规则的两种度量。他们分别反映所发现规则的有用性和确定性。例如:
computer=>antivirus_software[support = 2%; confidence = 60%],
其中支持度2%表示所有事务的2%显示电脑和杀毒软件被同时购买,置信度60%表示购买计算机的顾客也购买了杀毒软件。

2、关联规则
I={I1,I2,...,Im} 是项的集合。设任务相关的数据D是数据库事务的集合,其中每个事务T是一个非空项集,使得TI。每一个事务都有一个标识符,成为TID。设A是一个项集,事务T包含A,当且仅当AT。关联规则是形如 AB的蕴含式,其中AIBIAB,并且AB=。规则AB在事务集D中成立,具有 支持度 s ,其中sD中事务包含AB(即集合AB的并或AB二者)的百分比。它是概率P(AB)。规则AB在事务集D中具有置信度c,其中cD包含A的事务同时也包含B的事务的百分比。这是条件概率P(B|A)。即,

support(AB)=P(AB)=(σ(AB)N)(1)

confidence(AB)=P(B|A)=(σ(AB)σ(A))(2)

其中,σ(X)表示项集X的支持度计数。同时满足最小支持度阈值(min_sup)和最小置信度阈值(max_conf)的规则成为强规则。

给定事务的集合T关联规则发现是指找出支持度大于等于min_sup并且置信度大于等于min_conf的所有规则。挖掘关联规则的一种原始方法是:计算每个可能规则的支持度和置信度。但是这种方法的代价太高了,令人望而却步,因为可以从数据集中提取的规则的数目达到指数级。更具体地说,从包含n个项的数据集提取的可能规则的总数为:

R=3n2(n+1)+1

为了避免不必要的开销,事先对规则剪枝,而无须计算它们的支持度和置信度的值将是有益的。提高关联规则挖掘算法性能的第一步是拆分支持度和置信度要求。由公式1可以看出,规则AB的支持度仅仅依赖于其对应项集AB的支持度。例如,下面的规则有相同的支持度,因为他们涉及的项都源自于同一个项集{啤酒,尿布,牛奶}:
{啤酒,尿布}->{牛奶},{啤酒,牛奶}->{尿布},
{牛奶,尿布}->{啤酒},{啤酒}->{尿布,牛奶},
{尿布}->{牛奶,啤酒},{牛奶}->{尿布,啤酒}
如果项集{啤酒,尿布,牛奶}是非频繁的,则可以立即去掉这6个候选规则,则不必计算他们的置信度值。

因此,关联规则的挖掘是一个两步的过程:
(1)找出所有的频繁项集:根据定义,这些项集的每一个频繁出现的次数至少与预定义的最小支持度计数min_sup一样。
(2)由频繁项集产生强关联规则:根据定义,这些规则必须满足最小支持度和最小置信度。
可以使用附加的兴趣度度量来发现相关联的项之间的相关联系。由于第二步的开销远小于第一步,因此挖掘关联规则的总体性能由第一步决定。

例:
这里写图片描述
上表中:规则{(尿)()}的支持度 = 0.4,置信度=0.67

3、频繁项集的产生
发现频繁项集的一种原始的方法是确定每个候选项集的支持度计数。为了完成这一个任务,必须将每个候选项集与每个事务进行比较。

有几种方法可以降低产生频繁项集的计算复杂度:
(1)减少候选项集的数目:下面介绍的先验(apriori)原理,是一种不用计算支持度值而删除某些候选项集的有效方法。
(2)减少比较次数:替代将每个候选项集与每个事务相匹配,可以使用更高级的数据结构,或者存储候选项集或者压缩数据集,来减少比较的次数。

4、Apriori算法,通过限制候选产生发现频繁项集

(1)先验原理:
(a)定理:如果一个项集是频繁的,则它的所有非空子集也一定是频繁的;
(b)单调性:令I是项的集合,J=2II的幂集。度量f是单调的(或向上封闭的),如果

X,YJ:(XY)f(X)f(Y)
这表示如果XY的子集,则f(Y)一定不超过f(X)。例如,如果项集a,b,c是非频繁项集,则它的超集也一定是非频繁的,那么包含项集a,b,c的所有超集的可以被立即剪枝。这种基于支持度度量修剪指数搜索空间的策略称之为基于支持度的剪枝

(2)Apriori算法

**算法原理:**Apriori使用一种称之为逐层搜索的迭代方法,其中k项集用于探索(k+1)项集。首先,通过扫描数据库,累计每个项的计数,并收集满足最小支持度的项找出频繁1项集的集合。该集合记为L1。然后,使用L1找出频繁2项集的集合L2,使用L2找出L3。如此下去,直到再也找不到频繁k项集。找出每个Lk需要一次数据库的完整扫描。

Ck为候选k-项集的集合,而Fk为频繁k-项集的集合。
Apriori算法伪代码
(1)该算法初始通过单遍扫描数据集,确定每个项的支持度。一旦完成这一步,就得到所有频繁1-项集的集合F1(步骤1和步骤2)。
(2)接下来,该算法将使用上一次迭代发现的频繁(k-1)-项集,产生新的候选k-项集(步骤5)。候选的产生使用apriori-gen函数实现。
(3)为了对候选项的支持度计数,算法需要再次扫描一遍数据集(步骤6~10)。使用子集函数确定包含在每一个事务t中的Ck中的所有候选k-项集。
(4)计算候选项的支持度计数之后,算法将删去支持度计数小于minup的所有候选项集(步骤12)。
(5)当没有新的频繁项集产生,即Fk=时,算法结束(步骤13)。
Apriori算法的频繁项集产生的部分有两个重要的特点:第一,它是逐层算法,他每次遍历项集格中的一层;第二,它使用产生-测试(generate-and-test)策略发现频繁项集。该算法总的迭代次数是Kmax+1,其中Kmax是频繁项集的最大长度。

(3)候选的产生和剪枝
a.候选项集的产生,连接步:为了找出Lk,通过将Lk1与自身连接产生候选K项集的集合。
b.候选项集的剪枝,剪枝步:扫描数据库,确定候选的计数,删除支持度计数小于supportmin的候选。并非所有的候选都要确定其计数,如果其子项集不是频繁项集,则确定其不是频繁项集。

(3.a)连接步:候选项集的产生

a.蛮力方法:把所有的k-项集都看作可能的候选,然后使用候选剪枝除去不必要的候选。第k层产生的候选项集的数目为Ckd,其中,d是项的总数。虽然候选产生是相当简单的,但是候选剪枝的开销极大,因为必须考察的项集数量太大。设每一个候选项集所需的计算量为O(k),这种方法的总复杂度为O(dk=1KCkd)=O(d2d1)

b.Fk1F1方法:这种方法是完备的,因为每一个频繁k-项集都是由一个频繁(k1)-项集和频繁1-项集组成的。然而,这种方法很难避免重复地产生候选项集。避免产生重复的候选项集的一种方法是确保每个频繁项集中的项以字典序存储,每个频繁(k1)-项集X只用字典序比X中所有的项都大的频繁项进行扩展。尽管这种方法比蛮力方法有明显的改进,但是仍然会产生大量不必要的候选。

c.Fk1Fk1方法:函数apriori-gen函数的候选产生过程合并一对频繁(k1)项集,仅当他们的前k2个项都相同。令A={a1,a2,...,ak1}B={b1,b2,...,bk1}是一对频繁(k1)-项集,合并AB,如果他们满足如下的条件:

ai=bi(i=1,2,3,...,k2)ak1bk1

(4)基于Hash树进行支持度计数
在Apriori算法中,候选项集划分为不同的桶,并存放在Hash树中。在支持度计数期间,包含在事务当中的项集也散列到相应的桶中。这种方法不是将事务中的每个项集与所有的候选项集进行比较,而是将它与同一个桶内候选项集进行匹配。图略。

5、由频繁项集产生关联规则
一旦由数据库中产生频繁项集,就可以直接由他们产生强关联规则(强关联规则满足最小支持度和最小置信度)。
对于置信度,可以用如下公式进行计算:

confidence(AB)=P(B|A)=(σ(AB)σ(A))

对于支持度,可以用如下的公式计算:
support(AB)=P(AB)=(σ(AB)N)

每个频繁k项集能够产生多达2k2个关联规则。关联规则可以这样提取:将项集Y划分成两个非空的子集XYX,使得XXY满足置信度阈值。

计算关联规则的置信度并不需要再次扫描事务数据集。因为置信度σ(AB)/σ(A)。这两个项集在支持度计数已经在频繁项集产生的时候已经得到,因此不必再次扫描整个数据集。

6、基于置信度的剪枝
不像支持度度量,置信度不具有任何单调性。例如:规则XY的置信度可能大于、小于或者等于规则XY的置信度,其中XXYY。尽管如此,当比较由频繁项集Y产生的规则时,下面的定理对置信度度量成立。

定理: 如果规则XYX不满足置信度阈值,则形如XYX的规则一定也不满足置信度阈值,其中XX的子集。

7、频繁项集的紧凑表示
(a)极大频繁项集:极大频繁项集的直接超集都不是频繁的。极大频繁项集有效地提供了频繁项集的紧凑表示。换句话说,极大频繁项集形成了可以导出所有频繁项集的最小的项集的集合。
(b)闭项集:如果项集X的直接超集都不具有和他相同的支持度计数。闭项集提供了频繁项集的一种最小表示,该表示不丢失支持度信息。
(c)闭频繁项集:如果一个项集是闭的,并且它的支持度大于或等于最小支持度阈值。闭频繁项集的集合包含了频繁项集的完整信息。不会存在其它的项总是和闭频繁项集一起出现,否则闭频繁项集就包含它了。
频繁项集、极大频繁项集和闭频繁项集的关系

例:
腾讯应用宝使用Apriori算法实现的App推荐

0 0
原创粉丝点击