數據挖掘之關聯分析二(頻繁項集的產生)

頻繁項集的產生

格結構(lattice structure)經常用來表示全部可能的項集。
html

發現頻繁項集的一個原始方法是肯定格結構中每一個候選項集的支持度。可是工做量比較大。另外有幾種方法能夠下降產生頻繁項集的計算複雜度。算法

  1. 減小候選項集的數目。如先驗(apriori)原理,是一種不用計算支持度而刪除某些候選項集的方法。
  2. 減小比較次數。利用更高級獲得數據結構或者存儲候選項集或者壓縮數據集來減小比較次數。

先驗原理(Apriori)

使用支持度對候選項集進行剪枝。
先驗原理:若是一個項集是頻繁的,則它的全部子集也必定是頻繁的。
數據結構

相反,若是一個項集是非頻繁的,則它全部的超集都是非頻繁的,這種基於支持度度量修剪指數搜索空間的策略稱爲基於支持度的剪枝,依賴於一個性質,即一個項集的支持度決不會超過它的本身的支持度,這個性質稱爲反之尺度度量的反單調性(anti-monotone)。
測試

Apriori算法的頻繁項集產生

Apriori算法是第一個關聯規則挖掘算法,它開創性地使用基於支持度的剪枝技術,系統地控制候選項集指數增加。spa

算法3d

  1. 初始經過單遍掃描數據集,肯定每一個項的支持度,獲得全部頻繁1-項集的集合F1.
  2. 迭代地使用上一步獲得的k-1項集,產生新的候選k項集。
  3. 爲了對候選項的支持度技術,算法須要再次掃描一遍數據集。
  4. 計算候選項的支持度,山區支持度小於minsup的左右後選集。
  5. 當沒有新的頻繁項集產生,算法結束。

Apriori算法的頻繁項集產生的部分有兩個重要的特色:(1)逐層算法,從頻繁1-項集到最長的項集,每次遍歷項集格中的一層。(2)它使用產生-測試(generate-and-test)策略來發現頻繁項集,每次迭代後的候選項集都由上一次迭代發現的頻繁項集產生。算法總迭代次數爲\(k_{max+1}\),其中\(k_{max}\)爲頻繁項集最大長度。htm

候選的產生與剪枝

剪枝:考慮候選k項集\(X={i_1,i_2,i_3……}\),若是X的一個真子集非頻繁,則X將會被剪枝。對於每個候選k-項集,確保\(X-{i_n}\)都是頻繁的,該操做的複雜度是O(k),然而並不須要檢查給定候選項集的全部k個子集。若是k個子集中的m個用來產生候選項集,則候選項集剪枝時只須要檢查剩下的k-m個子集。如{a, b, c, d}項集,正常狀況下須要檢查{a, b, c}, {a, b, d}, {a, c, d}, {b, c, d}都是頻繁項集,可是若是a,b 是用來產生後選集的,則說明它們是頻繁的,所以主要檢查{a, b, c}和{a, b, d}是頻繁項集。blog

候選產生

  1. 應當避免產生太多沒必要要的後選集,若是一個候選項集的子集是非頻繁的,則該後選集確定是非頻繁的。
  2. 確保候選項集的集合完整性,即產生候選項集過程沒有遺漏任何頻繁項集。
  3. 不該當產生重複的候選項集。

蠻力方法:把全部的k-項集都看作可能的候選集,而後使用候選剪枝除去沒必要要的候選。可是剪枝開銷比較大。
\(F_{k-1} \times F_1\)方法:用其餘頻繁項來擴展每一個頻繁k-1項集。可是這種方法很難避免產生重複的後選集。其中一種方法是每一個頻繁項集的項使用字典序存儲。
事務

使用這種方法獲得了些許的改進,可是仍是會產生大量沒必要要的候選,如當{b, c}是不頻繁時,{a, b}和{c}合併是沒必要要的。有幾種啓發式方法能夠減小沒必要要的後選集。如每一個頻繁k項集,它的每個項都必須在頻繁k-1項集中出現,不然該候選就是非頻繁。
的。
\(F_{k-1} \times F_{k-1}\)方法:當它們的前k-2個項都相同時,合併一對頻繁k-1項集。
令$ A = {a_1, a_2, \cdots, a_{k-1}} \(,知足\)a_i = b_i (i = 1, 2, \cdots , k-2)$ 而且$ a_{k-1} \neq b_{k-1} $get

k-2集合項順序也要相同,並確保是頻繁的。

支持度計數

一種方法是將每一個事務全部的候選項集進行比較,而且更新包含正在事務中的候選項集的支持度計數。這種計算的代價是昂貴的。
另外一種方法是枚舉每一個事務所包含的項集,並利用它們更新對應的候選項集的支持度。

使用Hash樹進行支持度計數
在Apriori算法中,候選集劃分爲不一樣的桶,並存放在hash樹中。在支持度計數時,將包含在事務中的項集也散列在相應的桶中,將事務中的每一個項集與同一個桶中的候選項集進行匹配。

以下圖所示,將候選集散列在Hash樹的葉結點中,計數時,將事務的項集散列到Hash樹中,若是葉結點包含該項,則計數加一

Apriori計算複雜度

支持度閾值,下降支持度閾值將會致使更多的頻繁項集。隨着支持度閾值的下降,頻繁項集的最大長度將增長,於是掃描數據的次數也將增長。
項數(維度),項數增長,須要更多空間來存儲支持度。
事務數,因爲Apriori算法反覆掃描數據集的時間增長。
事務平均寬度

時間複雜度

頻繁1-項集產生,須要更新每一個項支持度,於是時間爲\(O(Nw)\),其中w爲事務平均寬度,N爲事務數。
候選產生,爲了產生k項集,須要合併一對頻繁k-1項集,最好狀況是每次能產生一個可行的候選k項集,最壞狀況是必須合併上次迭代發現的每對k-1項集。所以開銷爲
\[ \sum_{k=2}^{w}(k-2)|C_k| <合併開銷< \sum_{k=2}^w (k-2)|F_{k-1}|^2\]
Hash樹在候選產生時構造,以存放候選項集,因爲Hash樹的最大深度爲k,將候選項集散列到Hash樹的開銷爲\(O( \sum_{k=2}^w k |C_k| )\)。在候選項剪枝的過程當中,須要檢驗每一個候選k項集的k-2項集時候頻繁,因爲在Hash樹上查找一個候選的花費是O(k),所以候選剪枝的時間須要\(O( \sum_{k=2}^w k(k-2) |C_k| )\)
支持度計數,每一個長度爲t的事務將差生\(C_{|t|}^k\)個k項集,這也是每一個事務遍歷Hash樹的有效次數,若更新每一個候選集的支持度計數的開銷是,則支持度計數的總開銷爲\(O(N \sum_k C_w^k \alpha_k)\)

數據挖掘之關聯分析一(基本概念)
數據挖掘之關聯分析二(頻繁項集的產生)
數據挖掘之關聯分析三(規則的產生)
數據挖掘之關聯分析四(連續屬性處理)
數據挖掘之關聯分析五(序列模式)
數據挖掘之關聯分析六(子圖模式)
數據挖掘之關聯分析七(非頻繁模式)

相關文章
相關標籤/搜索