一、概述
關聯規則是發現事物之間的關系的分析過程,關聯規則最初提出的動機是針對購物籃分析(Market Basket Analysis)問題提出的。假設分店經理想更多的了解顧客的購物習慣。特別是,想知道哪些商品顧客可能會在一次購物時同時購買?為回答該問題,可以對商店的顧客事物零售數量進行購物籃分析。該過程通過發現顧客放入“購物籃”中的不同商品之間的關聯,分析顧客的購物習慣。這種關聯的發現可以幫助零售商了解哪些商品頻繁的被顧客同時購買,從而幫助他們開發更好的營銷策略。
二、參數
關聯規則算法主要有頻繁項集、支持度、置信度、提升度等指標,各個指標定義如下:
(1) 頻繁項集
對於一個數據表而言,每個字段的不同取值我們稱之為“項”,而該數據表內各項的任意組合稱之為項集,支持度大於最小支持度的項集稱為頻繁項集。
(2) 支持度
支持度的公式為:Support(A->B)=P(A U B)。從數學概念上理解即A與B同時出現的概率。如果A與B同時出現的概率小,說明A與B的關系不大;如果A與B同時出現的非常頻繁,則說明A與B總是相關的。
(3) 置信度
置信度的公式為:Confidence(A->B)=P(B | A)。數學形式為條件概率,A發生的條件下,B發生的概率,置信度揭示了A出現時,B是否也會出現或有多大概率出現。如果置信度度為100%,則說明A和B必然存在聯系。如果置信度太低,則說明A的出現與B是否出現關系不大。
(4) 提升度
提升度的公式為:Lift(A→B)=Confidence(A→B)/Support(B),度量規則是否可用的指標,描述的是相對於不用規則,使用規則可以提高多少,有用的規則的提升度大於1,在實際應用中,一般設置提升度大於1,以便濾除無意義的規則。
三、舉例
為了更好的理解關聯規則,特此舉一個簡單的小例子來說明,假設一個數據表為:
蘋果 | 香蕉 | 鴨梨 | ||
橘子 | 葡萄 | 蘋果 | 哈密瓜 | 火龍果 |
香蕉 | 哈密瓜 | 火龍果 | 葡萄 | |
橘子 | 香蕉 | |||
哈密瓜 | 鴨梨 | 葡萄 |
讓我們首先來計算“蘋果”的支持度,我們可以看到包含蘋果的項集共兩項,總項集的個數為五項,那么Support(蘋果)= 2/5 = 40%,香蕉蘋果同時出現的項集只有一個,那么Support(香蕉->蘋果)= 1/5 = 20% ,由此可以得到置信度Confidence(香蕉->蘋果)= 20% / 40% = 50%;此外,包含香蕉的項集共三項,即Support(香蕉)= 3/5 = 60%,那么我們可以得出香蕉對蘋果的提升度,Lift (香蕉->蘋果) = Confidence(香蕉->蘋果)/Support(香蕉) = 83.33%,lift<1,說明規則{香蕉,蘋果}無應用意義。同理我們可以算出 Lift (哈密瓜->葡萄) = 167%,大於1,說明哈密瓜與葡萄存在關聯。
四、算法
1.Apriori算法
Apriori算法:使用候選項集找頻繁項集
Apriori算法是一種最有影響的挖掘布爾關聯規則頻繁項集的算法。其核心是基於兩階段頻集思想的遞推算法。該關聯規則在分類上屬於單維、單層、布爾關聯規則。在這里,所有支持度大於最小支持度的項集稱為頻繁項集,簡稱頻集。
該算法的基本思想是:首先找出所有的頻集,這些項集出現的頻繁性至少和預定義的最小支持度一樣。然后由頻集產生強關聯規則,這些規則必須滿足最小支持度和最小可信度。然后使用第1步找到的頻集產生期望的規則,產生只包含集合的項的所有規則,其中每一條規則的右部只有一項,這里采用的是中規則的定義。一旦這些規則被生成,那么只有那些大於用戶給定的最小可信度的規則才被留下來。為了生成所有頻集,使用了遞推的方法。
Apriori算法采用了逐層搜索的迭代的方法,算法簡單明了,沒有復雜的理論推導,也易於實現。但其有一些難以克服的缺點:
(1)對數據庫的掃描次數過多。
(2)Apriori算法會產生大量的中間項集。
(3)采用唯一支持度。
(4)算法的適應面窄。
2.基於划分的算法
基於划分的算法
Savasere等設計了一個基於划分的算法。這個算法先把數據庫從邏輯上分成幾個互不相交的塊,每次單獨考慮一個分塊並對它生成所有的頻集,然后把產生的頻集合並,用來生成所有可能的頻集,最后計算這些項集的支持度。這里分塊的大小選擇要使得每個分塊可以被放入主存,每個階段只需被掃描一次。而算法的正確性是由每一個可能的頻集至少在某一個分塊中是頻集保證的。該算法是可以高度並行的,可以把每一分塊分別分配給某一個處理器生成頻集。產生頻集的每一個循環結束后,處理器之間進行通信來產生全局的候選k-項集。通常這里的通信過程是算法執行時間的主要瓶頸;而另一方面,每個獨立的處理器生成頻集的時間也是一個瓶頸。
3.FP-樹頻集算法
FP-樹頻集算法
針對Apriori算法的固有缺陷,J. Han等提出了不產生候選挖掘頻繁項集的方法:FP-樹頻集算法。采用分而治之的策略,在經過第一遍掃描之后,把數據庫中的頻集壓縮進一棵頻繁模式樹(FP-tree),同時依然保留其中的關聯信息,隨后再將FP-tree分化成一些條件庫,每個庫和一個長度為1的頻集相關,然后再對這些條件庫分別進行挖掘。當原始數據量很大的時候,也可以結合划分的方法,使得一個FP-tree可以放入主存中。實驗表明,FP-growth對不同長度的規則都有很好的適應性,同時在效率上較之Apriori算法有巨大的提高。
五、小結
關聯規則是機器學習中較為簡單的算法,后續將介紹關聯規則中的Apriori算法和FP-Growth算法的python實現。