數據挖掘算法09 - Apriori

Apriori

關聯規則挖掘可以讓我們從數據集中發現項與項(item 與 item)之間的關係,它在我們的生活中有很多應用場景,“購物籃分析”就是一個常見的場景,這個場景可以從消費者交易記錄中發掘商品與商品之間的關聯關係,進而通過商品捆綁銷售或者相關推薦的方式帶來更多的銷售量。所以說,關聯規則挖掘是個非常有用的技術。

知識點

  • 搞懂關聯規則中的幾個重要概念:支持度、置信度、提升度;
  • Apriori 算法的工作原理;
  • 熟悉與掌握 Apriori 工具包的使用;
  • 在實際工作中,我們該如何進行關聯規則挖掘。
  • 在實際問題中,靈活運用。包括數據集的準備等。

什麼是支持度呢?

支持度是個百分比,它指的是某個商品組合出現的次數與總次數之間的比例。支持度越高,代表這個組合出現的頻率越大。

什麼是置信度呢?

它指的就是當你購買了商品 A,會有多大的概率購買商品 B。

所以說置信度是個條件概念,就是說在 A 發生的情況下,B 發生的概率是多少。

什麼是提升度呢?

提升度 (A→B)= 置信度 (A→B)/ 支持度 (B)

這個公式是用來衡量 A 出現的情況下,是否會對 B 出現的概率有所提升。

所以提升度有三種可能:

  • 提升度 (A→B)>1:代表有提升;
  • 提升度 (A→B)=1:代表有沒有提升,也沒有下降;
  • 提升度 (A→B)<1:代表有下降。

Apriori 的工作原理

Apriori 算法其實就是查找頻繁項集 (frequent itemset) 的過程,所以首先我們需要定義什麼是頻繁項集。

頻繁項集就是支持度大於等於最小支持度 (Min Support) 閾值的項集,所以小於最小值支持度的項目就是非頻繁項集,而大於等於最小支持度的項集就是頻繁項集。

到這裏,你已經和我模擬了一遍整個 Apriori 算法的流程,下面我來給你總結下 Apriori 算法的遞歸流程:

  • K=1,計算 K 項集的支持度;
  • 篩選掉小於最小支持度的項集;
  • 如果項集爲空,則對應 K-1 項集的結果爲最終結果。

否則 K=K+1,重複 1-3 步。

Apriori 的改進算法:FP-Growth 算法

  • 可能產生大量的候選集。因爲採用排列組合的方式,把可能的項集都組合出來了;
  • 每次計算都需要重新掃描數據集,來計算每個項集的支持度。

所以 Apriori 算法會浪費很多計算空間和計算時間,爲此人們提出了 FP-Growth 算法,它的特點是:

  • 創建了一棵 FP 樹來存儲頻繁項集。在創建前對不滿足最小支持度的項進行刪除,減少了存儲空間。我稍後會講解如何構造一棵 FP 樹;
  • 整個生成過程只遍歷數據集 2 次,大大減少了計算量。

所以在實際工作中,我們常用 FP-Growth 來做頻繁項集的挖掘,下面我給你簡述下 FP-Growth 的原理。

  • 創建項頭表(item header table)

創建項頭表的作用是爲 FP 構建及頻繁項集挖掘提供索引。

這一步的流程是先掃描一遍數據集,對於滿足最小支持度的單個項(K=1 項集)按照支持度從高到低進行排序,這個過程中刪除了不滿足最小支持度的項。

項頭表包括了項目、支持度,以及該項在 FP 樹中的鏈表。初始的時候鏈表爲空。

  • 構造 FP 樹

FP 樹的根節點記爲 NULL 節點。

整個流程是需要再次掃描數據集,對於每一條數據,按照支持度從高到低的順序進行創建節點(也就是第一步中項頭表中的排序結果),節點如果存在就將計數 count+1,如果不存在就進行創建。同時在創建的過程中,需要更新項頭表的鏈表。

  • 通過 FP 樹挖掘頻繁項集

到這裏,我們就得到了一個存儲頻繁項集的 FP 樹,以及一個項頭表。我們可以通過項頭表來挖掘出每個頻繁項集。

具體的操作會用到一個概念,叫“條件模式基”,它指的是以要挖掘的節點爲葉子節點,自底向上求出 FP 子樹,然後將 FP 子樹的祖先節點設置爲葉子節點之和。

如何使用 Apriori 工具包


$ pip install efficient-apriori

挖掘導演是如何選擇演員的

  • 在實際工作中,數據集是需要自己來準備的,比如今天我們要挖掘導演是如何選擇演員的數據情況,但是並沒有公開的數據集可以直接使用。因此我們需要使用之前講到的 Python 爬蟲進行數據採集。
  • 有了數據之後,我們就可以用 Apriori 算法來挖掘頻繁項集和關聯規則

Apriori 算法中的最小支持度和最小置信度,一般設置爲多少比較合理?

和數據集特點有關係,不過數據集大的情況下,不好觀察特徵。我們可以通過設置最小值支持度和最小置信度來觀察關聯規則的結果。

一般來說最小支持度常見的取值有0.5,0.1,0.05。最小置信度常見的取值有1.0,0.9,0.8。可以通過嘗試一些取值,然後觀察關聯結果的方式來調整最小值尺度和最小置信度的取值。

總結

今天我給你講了 Apriori 算法,它是在“購物籃分析”中常用的關聯規則挖掘算法,在 Apriori 算法中你最主要是需要明白支持度、置信度、提升度這幾個概念,以及 Apriori 迭代計算頻繁項集的工作流程。

Apriori 算法在實際工作中需要對數據集掃描多次,會消耗大量的計算時間,所以在 2000 年 FP-Growth 算法被提出來,它只需要掃描兩次數據集即可以完成關聯規則的挖掘。FP-Growth 算法最主要的貢獻就是提出了 FP 樹和項頭表,通過 FP 樹減少了頻繁項集的存儲以及計算時間。

當然 Apriori 的改進算法除了 FP-Growth 算法以外,還有 CBA 算法、GSP 算法,這裏就不進行介紹。

Apriori 算法的核心就是理解頻繁項集和關聯規則。在算法運算的過程中,還要重點掌握對支持度、置信度和提升度的理解。在工具使用上,你可以使用 efficient-apriori 這個工具包,它會把每一條數據中的項(item)放到一個集合(籃子)裏來處理,不考慮項(item)之間的先後順序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章