【十大经典数据挖掘算法】系列php
关联分析是一类很是有用的数据挖掘方法,能从数据中挖掘出潜在的关联关系。好比,在著名的购物篮事务(market basket transactions)问题中,html
TID | Iterms |
---|---|
1 | {Bread, Milk} |
2 | {Bread, Diapers, Beer, Eggs} |
3 | {Milk, Diapers, Beer, Cola} |
4 | {Bread, Milk, Diapers, Beer} |
5 | {Bread, Milk, Beer, Cola} |
关联分析则被用来找出此类规则:顾客在买了某种商品时也会买另外一种商品。在上述例子中,大部分都知道关联规则:{Diapers} → {Beer};即顾客在买完尿布以后一般会买啤酒。后来经过调查分析,原来妻子嘱咐丈夫给孩子买尿布时,丈夫在买完尿布后一般会买本身喜欢的啤酒。可是,如何衡量这种关联规则是否靠谱呢?下面给出了度量标准。算法
关联规则能够描述成:项集 → 项集。项集\(X\)出现的事务次数(亦称为support count)定义为:ide
\[ \sigma (X) = |t_i|X \subseteq t_i, t_i \in T| \]spa
其中,\(t_i\)表示某个事务(TID),\(T\)表示事务的集合。关联规则\(X \longrightarrow Y\)的支持度(support):3d
\[ s(X \longrightarrow Y) = \frac{\sigma (X \cup Y)}{|T|} \]htm
支持度刻画了项集\(X \cup Y\)的出现频次。置信度(confidence)定义以下:blog
\[ s(X \longrightarrow Y) = \frac{\sigma (X \cup Y)}{\sigma (X)} \]事务
对几率论稍有了解的人,应该看出来:置信度可理解为条件几率\(p(Y|X)\),度量在已知事务中包含了\(X\)时包含\(Y\)的几率。ip
对于靠谱的关联规则,其支持度与置信度均应大于设定的阈值。那么,关联分析问题即等价于:对给定的支持度阈值min_sup、置信度阈值min_conf,找出全部的知足下列条件的关联规则:
\begin{aligned}
& 支持度 >= min\_sup \cr
& 置信度 >= min\_conf \cr
\end{aligned}
把支持度大于阈值的项集称为频繁项集(frequent itemset)。所以,关联规则分析可分为下列两个步骤:
若(对于全部事务集合)项的个数为\(d\),则全部关联规则的数量:
\[ \begin{aligned} & \sum_{i}^d C_d^i \sum_{j}^{d-i} C_{d-i}^j \cr = & \sum_{i}^d C_d^i ( 2^{d-i} -1) \cr = & \sum_{i}^d C_d^i * 2^{d-i} - 2^d + 1 \cr = & (3^d - 2^d) - 2^d +1 \cr = & 3^d - 2^{d+1} + 1 \end{aligned} \]
若是采用暴力方法,穷举全部的关联规则,找出符合要求的规则,其时间复杂度将达到指数级。所以,咱们须要找出复杂度更低的算法用于关联分析。
Agrawal与Srikant提出Apriori算法,用于作快速的关联规则分析。
根据支持度的定义,获得以下的先验定理:
这个比较容易证实,由于某项集的子集的支持度必定不小于该项集。
定理2是上一条定理的逆反定理。根据定理2,能够对项集树进行以下剪枝:
项集树共有项集数:\(\sum_{k=1}^d k \times C_{d}^k = d \cdot 2^{d-1}\)。显然,用穷举的办法会致使计算复杂度过高。对于大小为\(k-1\)的频繁项集\(F_{k-1}\),如何计算大小为\(k\)的频繁项集\(F_k\)呢?Apriori算法给出了两种策略:
\(F_k = F_{k-1} \times F_1\)方法。之因此没有选择\(F_{k-1}\)与(全部)1项集生成\(F_k\),是由于为了知足定理2。下图给出由频繁项集\(F_2\)与\(F_1\)生成候选项集\(C_3\):
\(F_k = F_{k-1} \times F_{k-1}\)方法。选择前\(k-2\)项均相同的\(f_{k-1}\)进行合并,生成\(F_{k-1}\)。固然,\(F_{k-1}\)的全部\(f_{k-1}\)都是有序排列的。之因此要求前\(k-2\)项均相同,是由于为了确保\(F_k\)的\(k-2\)项都是频繁的。下图给出由两个频繁项集\(F_2\)生成候选项集\(C_3\):
生成频繁项集\(F_k\)的算法以下:
关联规则是由频繁项集生成的,即对于\(F_k\),找出项集\(h_m\),使得规则\(f_k-h_m \longrightarrow h_m\)的置信度大于置信度阈值。一样地,根据置信度定义获得以下定理:
定理3:若是规则\(X \longrightarrow Y-X\)不知足置信度阈值,则对于\(X\)的子集\(X'\),规则\(X' \longrightarrow Y-X'\)也不知足置信度阈值。
根据定理3,可对规则树进行以下剪枝:
关联规则的生成算法以下:
[1] Pang-Ning Tan, Michael Steinbach, Vipin Kumar, Introduction to Data Mining.