關聯規則最早是由R.Agrawal等人針對超市購物籃分析問題提出的,其目的是發現超市交易數據庫中不同商品之間的關聯關系。
關聯規則體現了顧客購物的行為模式,這可以為經營決策、市場預測和策划等方面提供依據。關聯規則挖掘系統已經被成功應用於市場營銷、銀行業、零售業、保險業、電信業和公司經營管理等各個方面。關聯規則還可以應用於文本挖掘、商品廣告有機分析和網絡故障分析等領域。
經典的關聯規則挖掘算法包括Apriori算法和FP-growth算法(J.Han等人提出)。前者多次掃描數據庫,每次利用候選頻繁集產生頻繁集;后者則利用樹形結構直接得到頻繁集,減少了掃描數據庫的次數,從而提高了算法的效率。但是前者的擴展性好,可用於並行計算等領域。
|
咖啡
|
不喝
咖啡
|
|
茶
|
150
|
50
|
200
|
不喝茶
|
650
|
150
|
800
|
|
800
|
200
|
1000
|
假定希望分析愛喝咖啡和愛喝茶的人之間的關系。收集一組人關於飲料偏愛的信息
評估關聯規則:{茶} -> {咖啡}
支持度=15% 置信度=75%
Confidence= P(咖啡|茶) = 0.75
但是 P(咖啡) = 0.8
盡管規則 {茶} -> {咖啡}有很高的置信度,但是它卻是一個誤導。
支持度-置信度框架的局限性:
由於置信度度量忽略了規則后件中出現的項集的支持度,高置信度的規則有時可能出現誤導。
解決這個問題的一種方法是使用提升度:
lift(A,B)= P(B/A)P(B)或conf(A→B)/sup(B)
如果提升度大於1,表明A和B是正相關的。如果小於1,表明A和B是負相關的。
關聯規則 Eclat算法案例
library(arules) #加載arules程序包 data(Groceries) #調用數據文件
frequentsets=eclat(Groceries,parameter=list(support=0.05,maxlen=10)) #求頻繁項集 inspect(frequentsets[1:10]) #察看求得的頻繁項集 inspect(sort(frequentsets,by="support")[1:10]) #根據支持度對求得的頻繁項集排序並察看 supp(A) = P(A)= 出現的頻率 = count(A) / counts
關聯規則 Apriori算法案例
rules=apriori(Groceries,parameter=list(support=0.01,confidence=0.01)) #求關聯規則 summary(rules) #察看求得的關聯規則之摘要 x=subset(rules,subset=rhs%in%"whole milk"&lift>=1.2) #求所需要的關聯規則子集 inspect(sort(x,by="support")[1:5]) #根據支持度對求得的關聯規則子集排序並察看 supp(A) = P(A)= 出現的頻率 = count(A) / counts
inspect(sort(x,by="confidence")[1:5]) #根據置信度(可信度)對求得的關聯規則子集排序並察看 conf(A->B) = P(A ^ B)/ P(B)= P(B|A)
inspect(sort(x,by="lift")[1:5]) #根據提高率(興趣度)對求得的關聯規則子集排序並察看 lift(A->B) = lift(B->A) = conf(A->B)/ P(B)= conf(B->A) / P(A)
= P(A ^ B)/(P(A)* P(B))
# 保存內容 sink("apriori.txt") inspect(rules) sink()
關聯規則 FP-樹頻繁集算法案例
外鏈:FP-Tree算法的實現
Java開發算法推薦:http://blog.csdn.net/yangliuy/article/details/7494983