【十大經典數據挖掘算法】Apriori

【十大經典數據挖掘算法】系列php

  1. C4.5
  2. K-Means
  3. SVM
  4. Apriori
  5. EM
  6. PageRank
  7. AdaBoost
  8. kNN
  9. Naïve Bayes
  10. CART

1. 關聯分析

關聯分析是一類很是有用的數據挖掘方法,能從數據中挖掘出潛在的關聯關係。好比,在著名的購物籃事務(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)。所以,關聯規則分析可分爲下列兩個步驟:

  • 生成頻繁項集\(F=X \cup Y\)
  • 在頻繁項集\(F\)中,找出全部置信度大於最小置信度的關聯規則\(X \longrightarrow Y\)

暴力方法

若(對於全部事務集合)項的個數爲\(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} \]

若是採用暴力方法,窮舉全部的關聯規則,找出符合要求的規則,其時間複雜度將達到指數級。所以,咱們須要找出複雜度更低的算法用於關聯分析。

2. Apriori算法

Agrawal與Srikant提出Apriori算法,用於作快速的關聯規則分析。

頻繁項集生成

根據支持度的定義,獲得以下的先驗定理:

  • 定理1:若是一個項集是頻繁的,那麼其全部的子集(subsets)也必定是頻繁的。

這個比較容易證實,由於某項集的子集的支持度必定不小於該項集。

  • 定理2:若是一個項集是非頻繁的,那麼其全部的超集(supersets)也必定是非頻繁的。

定理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算法給出了兩種策略:

  1. \(F_k = F_{k-1} \times F_1\)方法。之因此沒有選擇\(F_{k-1}\)與(全部)1項集生成\(F_k\),是由於爲了知足定理2。下圖給出由頻繁項集\(F_2\)\(F_1\)生成候選項集\(C_3\)

  2. \(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,可對規則樹進行以下剪枝:

關聯規則的生成算法以下:

3. 參考資料

[1] Pang-Ning Tan, Michael Steinbach, Vipin Kumar, Introduction to Data Mining.

相關文章
相關標籤/搜索