1. 程式人生 > >挖掘關聯規則之Apriori演算法詳解

挖掘關聯規則之Apriori演算法詳解

1. 挖掘關聯規則
1.1   什麼是關聯規則
一言蔽之,關聯規則是形如X→Y的蘊涵式,表示通過X可以推導“得到”Y,其中X和Y分別稱為關聯規則的先導(antecedent或left-hand-side, LHS)和後繼(consequent或right-hand-side, RHS)
1.2   如何量化關聯規則
關聯規則挖掘的一個典型例子便是購物車分析。通過關聯規則挖掘能夠發現顧客放入購物車中的不同商品之間的關聯,分析顧客的消費習慣。這種關聯規則的方向能夠幫助賣家瞭解哪些商品被顧客頻繁購買,
從而幫助他們開發更好的營銷策略。比如:將經常同時購買的商品擺近一些,以便進一步刺激這些商品一起銷售;或者,將兩件經常同時購買的商品擺遠一點,這樣可能誘發買這兩件商品的使用者一路挑選其他商品。
在資料探勘當中,通常用“支援度”(support)和“置性度”(confidence)兩個概念來量化事物之間的關聯規則。它們分別反映所發現規則的有用性和確定性。比如:
Computer => antivirus_software , 其中 support=2%, confidence=60%
表示的意思是所有的商品交易中有2%的顧客同時買了電腦和防毒軟體,並且購買電腦的顧客中有60%也購買了防毒軟體。在關聯規則的挖掘過程中,
通常會設定最小支援度閾值和最小置性度閾值,如果某條關聯規則滿足最小支援度閾值和最小置性度閾值,則認為該規則可以給使用者帶來感興趣的資訊。

1.3   關聯規則挖掘過程
1)幾個基本概念:
關聯規則A->B的支援度support=P(AB),指的是事件A和事件B同時發生的概率。
置信度confidence=P(B|A)=P(AB)/P(A),指的是發生事件A的基礎上發生事件B的概率。
同時滿足最小支援度閾值和最小置信度閾值的規則稱為強規則。
如果事件A中包含k個元素,那麼稱這個事件A為k項集,並且事件A滿足最小支援度閾值的事件稱為頻繁k項集。

2)挖掘過程:
第一,找出所有的頻繁項集;
第二,由頻繁項集產生強規則。
2. 什麼是Apriori
2.1   Apriori介紹
Apriori演算法使用頻繁項集的先驗知識,使用一種稱作逐層搜尋的迭代方法,k項集用於探索(k+1)項集。首先,通過掃描事務(交易)記錄,找出所有的頻繁1項集,該集合記做L1,
然後利用L1找頻繁2項集的集合L2,L2找L3,如此下去,直到不能再找到任何頻繁k項集。最後再在所有的頻繁集中找出強規則,即產生使用者感興趣的關聯規則。

其中,Apriori演算法具有這樣一條性質:任一頻繁項集的所有非空子集也必須是頻繁的。因為假如P(I)< 最小支援度閾值,當有元素A新增到I中時,
結果項集(A∩I)不可能比I出現次數更多。因此A∩I也不是頻繁的。

2.2   連線步和剪枝步
在上述的關聯規則挖掘過程的兩個步驟中,第一步往往是總體效能的瓶頸。
Apriori演算法採用連線步和剪枝步兩種方式來找出所有的頻繁項集。
1)  連線步
為找出Lk(所有的頻繁k項集的集合),通過將Lk-1(所有的頻繁k-1項集的集合)與自身連線產生候選k項集的集合。候選集合記作Ck。設l1和l2是Lk-1中的成員。記li[j]表示li中的第j項。
假設Apriori演算法對事務或項集中的項按字典次序排序,即對於(k-1)項集li,li[1]<li[2]<……….<li[k-1]。將Lk-1與自身連線,
如果(l1[1]=l2[1])&&( l1[2]=l2[2])&&……..&& (l1[k-2]=l2[k-2])&&(l1[k-1]<l2[k-1]),那認為l1和l2是可連線。連線l1和l2 產生的結果是{l1[1],l1[2],……,l1[k-1],l2[k-1]}。

2)  剪枝步
CK是LK的超集,也就是說,CK的成員可能是也可能不是頻繁的。通過掃描所有的事務(交易),確定CK中每個候選的計數,判斷是否小於最小支援度計數,如果不是,則認為該候選是頻繁的。
為了壓縮Ck,可以利用Apriori性質:任一頻繁項集的所有非空子集也必須是頻繁的,反之,如果某個候選的非空子集不是頻繁的,那麼該候選肯定不是頻繁的,從而可以將其從CK中刪除。
(Tip:為什麼要壓縮CK呢?因為實際情況下事務記錄往往是儲存在外儲存上,比如資料庫或者其他格式的檔案上,在每次計算候選計數時都需要將候選與所有事務進行比對,
眾所周知,訪問外存的效率往往都比較低,因此Apriori加入了所謂的剪枝步,事先對候選集進行過濾,以減少訪問外存的次數。)
2.3   Apriori演算法例項
交易ID    商品ID列表
T100      I1,I2,I5
T200      I2,I4
T300      I2,I3
T400      I1,I2,I4
T500  I1,I3
T600  I2,I3
T700  I1,I3
T800     I1,I2,I3,I5
T900     I1,I2,I3
上圖為某商場的交易記錄,共有9個事務,利用Apriori演算法尋找所有的頻繁項集的過程如下:
詳細介紹下候選3項集的集合C3的產生過程:從連線步,首先C3={{I1,I2,I3},{I1,I2,I5},{I1,I3,I5},{I2,I3,I4},{I2,I3,I5},{I2,I4,I5}}(C3是由L2與自身連線產生)。根據Apriori性質,頻繁項集的所有子集也必須頻繁的,可以確定有4個候選集{I1,I3,I5},{I2,I3,I4},{I2,I3,I5},{I2,I4,I5}}不可能時頻繁的,因為它們存在子集不屬於頻繁集,因此將它們從C3中刪除。注意,由於Apriori演算法使用逐層搜尋技術,給定候選k項集後,只需檢查它們的(k-1)個子集是否頻繁。

3. Apriori虛擬碼
演算法:Apriori
輸入:D - 事務資料庫;min_sup - 最小支援度計數閾值
輸出:L - D中的頻繁項集
方法:
     L1=find_frequent_1-itemsets(D); // 找出所有頻繁1項集
     For(k=2;Lk-1!=null;k++){
        Ck=apriori_gen(Lk-1); // 產生候選,並剪枝
        For each 事務t in D{ // 掃描D進行候選計數
            Ct =subset(Ck,t); // 得到t的子集
            For each 候選c 屬於 Ct
                         c.count++;
        }
        Lk={c屬於Ck | c.count>=min_sup}
}
Return L=所有的頻繁集;
Procedure apriori_gen(Lk-1:frequent(k-1)-itemsets)
      For each項集l1屬於Lk-1
              For each項集 l2屬於Lk-1
                       If((l1[1]=l2[1])&&( l1[2]=l2[2])&&……..
&& (l1[k-2]=l2[k-2])&&(l1[k-1]<l2[k-1])) then{
                   c=l1連線l2 //連線步:產生候選
                   if has_infrequent_subset(c,Lk-1) then
                       delete c; //剪枝步:刪除非頻繁候選
                   else add c to Ck;
                  }
          Return Ck;
   
     Procedure has_infrequent_sub(c:candidate k-itemset; Lk-1:frequent(k-1)-itemsets)
        For each(k-1)-subset s of c
            If s不屬於Lk-1 then
               Return true;
        Return false;
  
4. 由頻繁項集產生關聯規則
Confidence(A->B)=P(B|A)=support_count(AB)/support_count(A)
關聯規則產生步驟如下:
1)  對於每個頻繁項集l,產生其所有非空真子集;
2)  對於每個非空真子集s,如果support_count(l)/support_count(s)>=min_conf,則輸出 s->(l-s),其中,min_conf是最小置信度閾值。
例如,在上述例子中,針對頻繁集{I1,I2,I5}。可以產生哪些關聯規則?該頻繁集的非空真子集有{I1,I2},{I1,I5},{I2,I5},{I1 },{I2}和{I5},對應置信度如下:
I1&&I2->I5            confidence=2/4=50%
I1&&I5->I2            confidence=2/2=100%
I2&&I5->I1            confidence=2/2=100%
I1 ->I2&&I5            confidence=2/6=33%
I2 ->I1&&I5            confidence=2/7=29%
I5 ->I1&&I2            confidence=2/2=100%
如果min_conf=70%,則強規則有I1&&I5->I2,I2&&I5->I1,I5 ->I1&&I2。

相關推薦

挖掘關聯規則Apriori演算法

1. 挖掘關聯規則 1.1   什麼是關聯規則 一言蔽之,關聯規則是形如X→Y的蘊涵式,表示通過X可以推導“得到”Y,其中X和Y分別稱為關聯規則的先導(antecedent或left-hand-side, LHS)和後繼(consequent或right-hand-side

資料菜鳥的挖掘旅(二)關聯規則Apriori演算法

一、介紹 假如,我們手中有一個顧客在商場中購買物品交易記錄的資料庫。我們如何通過這個資料庫,找出一些規則,再通過一些方法,讓這些規則被顧客接受,促使他們在商場中購買更多的商品?、 就像很早以前所說的——啤酒與尿布 二、幾個基本概念 2.1項集(I

Apriori演算法【二、虛擬碼和例子】

上一篇文章中對Apriori演算法進行了簡單的描述(http://blog.csdn.net/lizhengnanhua/article/details/9061755),現在用虛擬碼實現,及對經典例子進行描述(紅蘭PPT上之摘抄)。 一、Apriori演算法虛擬碼實現:

機器學習 (十五) 關聯分析Apriori演算法

前言        目前隨著資料量迅速增多,從海量資料中尋找有價值的資訊帶來的成本也在不斷增加,傳統的搜尋資料方式已經不能滿足我們的需要,我們先來通過一個演算法看一下演算法時間複雜度快慢帶來的影響,通過計算耗時我們會有個感性

Apriori演算法

Apriori演算法總結 一、背景 關聯規則學習(Association rule learning)是一種在大型資料庫中發現變數之間的有趣性關係的方法。它的目的是利用一些有趣性的量度來識別資料庫中發現的強規則。 關聯分析是一種在大規模資料集中尋找有趣關係的任務。這些關係可以有兩種形式

關聯分析Apriori演算法

1.資料探勘與關聯分析 資料探勘是一個比較龐大的領域,它包括資料預處理(清洗去噪)、資料倉庫、分類聚類、關聯分析等。關聯分析可以算是資料探勘最貼近我們生活的一部分了,開啟卓越亞馬遜,當挑選一本《Android4高階程式設計》時,它會不失時機的列出你可能還會感興趣的書籍,比如

關聯規則Apriori演算法及python實現

1 關聯規則 關聯分析一個典型的例子是購物籃分析,廣泛應用於零售業,通過檢視那些商品經常在一起購買,可以幫助商店瞭解使用者的購買行為。一個最有名的例子是“尿布與啤酒”,據報道,美國中西部的一家連鎖店發現,男人們會在週四購買尿布和啤酒,這樣商家實際上就可以將尿布

小白KMP演算法及python實現

在看子串匹配問題的時候,書上的關於KMP的演算法的介紹總是理解不了。看了一遍程式碼總是很快的忘掉,後來決定好好分解一下KMP演算法,算是給自己加深印象。 ------------------------- 分割線-------------------------------

模式串匹配KMP演算法

KMP演算法,是由Knuth,Morris,Pratt共同提出的模式匹配演算法,其對於任何模式和目標序列,都可以線上性時間內完成匹配查詢,而不會發生退化,是一個非常優秀的模式匹配演算法。但是相較於其他模式匹配演算法,該演算法晦澀難懂,第一次接觸該演算法的讀者往往會看得一頭

第三十五節,目標檢測YOLO演算法

YOLO的全拼是You Only Look Once,顧名思義就是隻看一次,把目標區域預測和目標類別預測合二為一,作者將目標檢測任務看作目標區域預測和類別預測的迴歸問題。該方法採用單個神經網路直接預測物品邊界和類別概率,實現端到端的物品檢測。因此識別效能有了很大提升,達到每秒45幀,而在快速YOLO(Fas

python實現關聯規則分析Apriori演算法

程式碼寫了好久了,今天搬上來。 Apriori演算法介紹: Apriori其實是為了降低搜尋空間以及提高搜尋速度而設計的一種演算法,本文采用python實現,徹底理解“頻繁項集的所有非空子集一定是頻繁的”這句話,並實現連線步、剪枝步、規則生成

【大資料演算法】:apriori演算法,非常清晰

 Apriori演算法例項 交易ID 商品ID列表 T100 I1,I2,I5 T200 I2,I4 T300 I2,I3 T400 I1,I2,I4 T500 I1,I3 T600 I2,I3 T700 I1

【模式匹配】 —— KMP演算法及證明

本文所述KMP演算法原始碼可在這裡下載: Name Date Reason for change Revision 超然 2013.03.19 First version 1.0 超然 2013.04.15 Added

讀書筆記1——Apriori演算法

平時看書就是自認為看懂就算,結果在過一段時間,或是面試的時候別人問我貌似什麼都不記得。所以如果能把自己所看的,寫下來給比人講清楚我想是非常重要的。開始第一個簡單的機器學習演算法的解釋。參考資料主要是《資料探勘概率與技術》第三版。       Apriori演算法的主要作用是

網路流 最大流—最小割 SAP演算法

首先引入幾個新名詞: 1、距離標號: 所謂距離標號 ,就是某個點到匯點的最少的弧的數量(即邊權值為1時某個點到匯點的最短路徑長度)。 設點i的標號為level[i],那麼如果將滿足level[i]=level[j]+1的弧(i,j)叫做允許弧 ,且增廣時只走允許弧

資料探勘關聯規則挖掘Apriori演算法實現

演算法細節見論文:Fast Algorithm for Mining Association Rules 控制檯版本C++程式碼如下: #include <iostream> #include <sstream> #include <fs

第11章:使用Apriori演算法進行關聯分析(從頻繁項集中挖掘關聯規則

原理: 根據頻繁項集找關聯規則,如有一個頻繁項集{豆奶,萵苣},那麼可能有一條關聯規則是豆奶->萵苣,即一個人購買了豆奶,則大可能他會購買萵苣,但反過來一個人購買了萵苣,不一定他會購買豆奶,頻繁項集使用支援度量化,關聯規則使用可信度或置信度量化。一條規則P->H的可信度定義為支援

HAWQ + MADlib 玩轉資料探勘(七)——關聯規則方法Apriori演算法

一、關聯規則簡介        關聯規則挖掘的目標是發現數據項集之間的關聯關係,是資料挖據中一個重要的課題。關聯規則最初是針對購物籃分析(Market Basket Analysis)問題提出的。假設超市經理想更多地瞭解顧客的購物習慣,特別是想知道,哪些商品顧客可能會在一次購

關聯規則DHP演算法

參考文獻: [1]Park, J. S., Chen, M. S., & Yu, P. S. (1995). Aneffective hash-based algorithm for mining association rules. Acm SigmodReco

關聯規則方法apriori演算法

        Apriori algorithm是關聯規則裡一項基本演算法,是由Rakesh Agrawal和Ramakrishnan Srikant兩位博士在1994年提出的關聯規則挖掘演算法。關聯規則的目的就是在一個數據集中找出項與項之間的關係,也被稱為購物藍分析 (M