第十一章 使用Apriori算法進行關聯分析
一.導語
“啤酒和尿布”問題屬於經典的關聯分析。在零售業,醫葯業等我們經常需要是要關聯分析。我們之所以要使用關聯分析,其目的是為了從大量的數據中找到一些有趣的關系。這些有趣的關系將對我們的工作和生活提供指導作用。
二.關聯分析的基本概念
所謂的關聯分析就是從海量的數據中找到一些有趣的關系。關聯分析它有兩個目標,一個是發現頻繁項集,另一個是發現關聯規則。
關聯分析常用到的四個概念是:頻繁項集,關聯規則,置信度,支持度。頻繁項集指的是頻繁同時出現的數據子集,這里的頻繁是一般是根據支持度來確定的(當然你也可以根據其他的度量標准)。支持度指的是該項集最所有數據中出現的概率。關聯規則指的是兩個個體之間的關聯性, 它一般用置信度來進行衡量。置信度指的是該項集出現的條件概率,這里的條件概率的條件也就是我們關聯規則中的條件。比如 尿布->啤酒,那么此時的條件就是尿布。
三.Apriori原理
Apriori,顧名思義它是利用先驗的知識,對未知的知識進行判斷。
我們知道如果一個項集是頻繁項集,那么它的子集必定也是頻繁項集。比如{啤酒,尿布}是頻繁項集,那么{尿布}和{啤酒}必定也是頻繁項集。如果反向的思考的話,也就是說一個項集它不是頻繁項集,那么它的超集就不會是頻繁項集。Apriori算法正是利用了這個特點,對關聯分析求解頻繁項集的復雜度進行了很大程度的降低。
四.Apriori算法
如果直接的求解所有可能的頻繁項集,那么它的復雜度太高,是無法忍受的,因此為了降低問題的復雜度,我們基於Apriori原理,提出了Apriori算法。換句話說Apriori算法是一種簡便的求解頻繁項集的方法。
Apriori算法的特點:
它的優點是:算法簡單,容易實現
它的缺點是:不適用於大數據集
它的適用類型是:標稱型數據
Apriori算法的過程是:首先生成單個商品的項集,然后根據最小支持度來去除不符合條件的項集,然后將剩下的商品進行兩兩組合,再根據最小支持度對不符合條件的項集進行刪除,以此類推,直到所有不符合最小支持度的項集都被去掉。
以下是實現Apriori算法的python代碼:
1.獲取數據:
2.生成單個商品的項集:
3.根據最支持度去除不符合條件的項集:
4.寫一個函數用來獲取包含k個item的項集
5.Apriori算法
五.從頻繁項集中挖掘關聯規則
頻繁項集的度量指標是支持度,關聯規則的度量指標是置信度。當一個規則的置信度滿足一定的值時,我們就說這個規則是關聯規則。關聯規則具有和頻繁項集類似的性質。當一規則不滿足最小置信度的時候那么這個規則的子集也不滿足最小置信度,換言之,如果可以從后件大小為1的規則出發,不斷的產生新的規則。(這里所謂的后件,相當於結論,比如 尿布->啤酒, 這里的尿布是前件, 啤酒是后件)。
從求解關聯規則的算法上看,他和apriori算法異曲同工,不過它有一個新的名字稱之為分級算法。它就是先產生后件大小為1的規則,然后刪除不滿足置信度的規則,然后再利用剩下的規則,生出后件大小為2的規則,然后刪除不滿足置信度的規則,以此類推。
以下是python代碼:
1.首先我們創建主函數
2.其次我們根據最小置信度來獲取規則
3.我們創建規則
六.總結
關聯分析的目的是為了尋找數據中有趣的關系,這里的有趣的關系有兩層含義,一種是經常同時出現的項,也就是我們常說的尋找頻繁項集;另一種是滿足如果那么這種導出關系的項,也就是我們常說的尋找關聯規則。頻繁項集是由支持度來進行度量的,關聯規則是由置信度進行度量的。
我們在進行關聯分析的時候需要對結果進行組合,但是我們知道組合是很耗時的,為了簡化計算,降低解空間,我們采用了Apriori算法。該算法的基本思想就是一個非頻繁項集的超集也是非頻繁項集。這個概念也可以拓展到關聯規則,此時變為,一個規則不是關聯規則那么它的超集也不是關聯規則,該算法稱之為分級算法。
雖然Apriori算法能夠在一定的程度上減少計算量,但是因為它在每次頻繁項集改變的時候都需要重新遍歷一次數據庫,不適用於大型數據,為了解決這個問題人們又提出了FP-growth算法。FP-growth算法和Apriori算法相比只需要遍歷兩次數據庫,速度有了很大的提升。