Apriori演算法簡介及其用C++類比實現

來源:互聯網
上載者:User

原文連結:http://blog.csdn.net/qq675927952/article/details/6707704

http://blog.csdn.net/pupingpp/article/details/8264734

關聯規則的目的在於在一個資料集中找出項之間的關係,也稱之為購物藍分析 (market basketanalysis)。例如,購買鞋的顧客,有10%的可能也會買襪子,60%的買麵包的顧客,也會買牛奶。這其中最有名的例子就是"尿布和啤酒"的故事了。

關聯規則的應用場合。在商業銷售上,關聯規則可用於交叉銷售,以得到更大的收入;在保險業務方面,如果出現了不常見的索賠要求組合,則可能為欺詐,需要作進一步的調查。在醫學方面,可找出可能的治療組合;在銀行方面,對顧客進行分析,可以推薦感興趣的服務等等。

Apriori algorithm是關聯規則裡一項基本演算法。由Rakesh Agrawal 在 1994年提出的,詳細的介紹請猛擊這裡《Fast Algorithms for Mining Association Rules》。

首先我們來看,什麼是規則。規則形如"如果…那麼…(If…Then…)",前者為條件,後者為結果。例如一個顧客,如果買了可樂,那麼他也會購買果汁。

如何來度量一個規則是否夠好。有兩個量,信賴度(Confidence)和支援度(Support)。假設有如下表的購買記錄。

顧客

項目

1

orangejuice, coke

2

milk,orange juice, window cleaner

3

orangejuice, detergent

4

orangejuice, detergent, coke

5

windowcleaner

將上表整理一下,得到如下的一個2維表

  

Orange

WinCl

Milk

Coke

Detergent

Orange

4

1

1

2

2

WinCl

1

2

1

0

0

Milk

1

1

1

0

0

Coke

2

0

0

2

1

Detergent

1

0

0

0

2

上表中橫欄和縱欄的數字表示同時購買這兩種商品的交易條數。如購買有Orange的交易數為4,而同時購買Orange和Coke的交易數為2。

信賴度表示了這條規則有多大程度上值得可信。設條件的項的集合為A,結果的集合為B。信賴度計算在A中,同時也含有B的機率。即Confidence(A==>B)=P(B|A)。例如計算"如果Orange則Coke"的信賴度。由於在含有Orange的4條交易中,僅有2條交易含有Coke.其信賴度為0.5。

支援度計算在所有的交易集中,既有A又有B的機率。例如在5條記錄中,既有Orange又有Coke的記錄有2條。則此條規則的支援度為2/5=0.4。現在這條規則可表述為,如果一個顧客購買了Orange,則有50%的可能購買Coke。而這樣的情況(即買了Orange會再買Coke)會有40%的可能發生。

再來考慮下述情況。

支援度

A

0.45

B

0.42

C

0.4

A andB

0.25

A andC

0.2

B andC

0.15

A,B,andC

0.05

可得到下述規則

規則

信賴度

If B and C thenA

0.05/0.15*100%=33.33%

If A and C thenB

0.05/0.20*100%=25%

If A and B thenC

0.05/0.25*100%=20%

上述的三條規則,哪一條規則有用呢。

對於規則" If B and CthenA",同時購買B和C的人中,有33.33%會購買A。而單項A的支援度有0.45,也就是說在所有交易中,會有45%的人購買A.看來使用這條規則來進行推薦,還不如不推薦,隨機對顧客進薦好了。

為此引入另外一個量,即提升度(Lift),以度量此規則是否可用。描述的是相對於不用規則,使用規則可以提高多少。有用的規則的提升度大於1。計算方式為Lift(A==>B)=Confidence(A==>B)/Support(B)=Support(A==>B)/(Support(A)*Support(B))。在上例中,Lift(IfB and C The A)=0.05/(0.15*0.45)=0.74。而Lift(If A thenB)=0.25/(0.45*0.42)=1.32。也就是說對買了A的人進行推薦B,購買機率是隨機推薦B的1.32倍。lift(A->B) = P(AB)/(P(A)P(B))

如何產生規則呢。可以分兩步走。

首先找出頻繁集(frequentitemset)。所謂頻繁集指滿足最小支援度或信賴度的集合。其次從頻繁集中找出強規則(strongrules)。強規則指既滿足最小支援度又滿足最小信賴度的規則。

我們來看如何產生頻繁集。

這其中有一個定理。即頻繁集的子集也一定是頻繁集。比如,如果{A,B,C}是一個3項的頻繁集,則其子集{A,B},{B,C},{A,C}也一定是2項的頻繁集。為方便,可以把含有k項的集合稱之為k-itemsets.

下面以迭代的方式找出頻繁集。首先找出1-itemsets的頻繁集,然後使用這個1-itemsets,進行組合,找出2-itemsets的頻繁集。如此下去,直到不再滿足最小支援度或信賴度的條件為止。這其中重要的兩步驟分別是串連(join 串連的規則就是:兩個第K級的頻繁項要是可以串連形成第K+1級候選頻繁項,若且唯若:兩個第K級頻繁項的前K-1項都相同,只是第K項不同。。) 和剪枝(prune).即從(k-1)-itemsets中的項進行組合,產生備選集(Candidateitemsets)。再從備選集中,將不符合最小支援度或信賴度的項刪去。例如

Frequent2-itemsets

 

Candidate3-itemsets

 

Frqquent3-itemsets

I1,I2

==>

I1,I2,I4

==>

I1,I2,I4

I1,I4

 

I2,I3,I4

   

I2,I3

       

I2,I4

       

 

下面我們再來看一個詳細的例子。

設最小支援度為2,以Ck表示k-itemsets備選集,以Lk表示k-itemsets頻繁集。

ID

Items

 

Itemset

Sup.count

 

Itemset

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.