【十大經典數據挖掘算法】系列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.