1. 程式人生 > >arules:關聯規則及視覺化

arules:關聯規則及視覺化

在個性化推薦中,除了應用比較廣的協同過濾,還有關聯規則。作為資料探勘中一個獨立的課題,關聯規則用於從大量資料中挖掘出有價值的資料項之間的相關關係,比如購買啤酒的顧客有多大的概率購買尿布?這就購物籃中比較著名的”啤酒與尿布“的故事;介紹兩個關聯規則中常用的演算法:Apriori和Eclat,這兩個演算法在arules中均有涉及; 關聯規則維基百科:Apriori演算法是應用比較廣泛的頻繁項集的演算法,特別是挖掘布林關聯規則(0-1);演算法主要分為兩步:

  • 第一步通過迭代,檢索出事務交易資料中的所有頻繁項集,即支援度不低於使用者設定的閾值的項集;

  • 第二步利用頻繁項集構造出滿足使用者最小信任度的規則。其中,挖掘或識別出所有頻繁項集是該演算法的核心,佔整個計算量的大部分。

Eclat主要思想是倒排,常規的交易資料是事務ID-事務資料,Eclat用事務中的每一項作為ID,事務ID作為值,對交易資料進行了變換; 詳細的資料變換和演算法請參考: arules package R語言

       從上圖可見:關聯規則的核心是生成itemMatrix,然後由apriori演算法生成規則或者由eclat演算法生成頻繁項集; 介紹一下arules中常用的函式:

1、as(object,class):演算法處理的矩陣與常規資料物件間的轉換,規則的轉換;
2、apriori(data, parameter = NULL, appearance = NULL, control = NULL) eclat(data, parameter = NULL, control = NULL) 兩個主要演算法函式,data為交易資料格式,可以通過as轉換;parameter為引數列表,比如定義 最小支援度和置信度,control主要用於演算法控制; 
3、inspect(rules[1000]);inspect(SORT(fsets, by = "support")[1:10]) 檢視或者按條件(支援度或置信度)檢視求得的規則 
4、subset(rules, subset = rhs %in% "Milk" &lift > 1.2):規則的篩選 5、itemFrequencyPlot(AdultSample, population = Adult, support = supp) 對滿足條件的頻繁項畫圖
一個arules的例子:
library(arules) #以Groceries資料為例,超市購物的例子,每一行為一個顧客的購買記錄,格式為transactions #也就是以稀疏矩陣儲存的物品矩陣資料 
data(Groceries) df.Gro=as(Groceries,"data.frame") head(df.Gro) #items 
 #1 {citrus fruit,semi-finished bread,margarine,ready soups}
 #2 {tropical fruit,yogurt,coffee}
 #3 {whole milk}
 #4 {pip fruit,yogurt,cream cheese ,meat spreads}
 #5 {other vegetables,whole milk,condensed milk,long life bakery product}
 #6 {whole milk,butter,yogurt,rice,abrasive cleaner}
 #參考上面的轉換我們還可以用as把data.frame轉為transcation test.Groceries=as(df.Gro,"transcations") rules = apriori(Groceries,parameter = list(support = 0.01,confidence = 0.2)) inspect(sort(rules,by="support")[1:6])
 #按支援度檢視前6條規則 inspect(sort(rules,by="confidence")[1:6])
 #按置信度檢視前6條規則 #也可以用subset做規則的篩選,取"右手邊"含有whole milk且lift大於1.2的規則 sub.rules=subset(rules, subset = rhs %in% "whole milk" &lift > 1.2)
 #用eclat演算法求頻繁項
 sets=eclat(Groceries, parameter = list(support =0.05,maxlen=10))
 #也可以用上面的inspect和subset檢視或篩選規則
 #針對transcation資料畫頻繁項的圖 itemFrequencyPlot(Groceries,support = 0.05,cex.names =0.8) 
 #儲存規則 兩種方法 #轉換成data.frame儲存 df.rules=as(rules,"data.frame") write.csv(df.rules,"GeroRules.csv")
 #直接儲存 write(rulesIncomeSmall, file = "GeroRules.csv", sep = ",", col.names = NA) 

itemFrequencyPlot: 
Rplot12

簡單介紹一下關聯規則的視覺化包:

 #每個畫圖包背後都有一堆包,像ggplot2 library(arulesViz)
 #載入需要的程輯包:scatterplot3d #載入需要的程輯包:vcd
 #載入需要的程輯包:MASS
 #載入需要的程輯包:grid
 #載入需要的程輯包:colorspace
 #載入需要的程輯包:seriation
 #載入需要的程輯包:cluster
 #載入需要的程輯包:TSP
 #載入需要的程輯包:gclus
 #arulesViz中有很多圖形,介紹幾個好看的,畫圖的物件都是rules plot(rules, shading="order", control=list(main = "Two-key plot"))
 #見chart.1 plot(rules, method="grouped")
 #見chart.2 plot(rules, method="graph")#見chart.3
chart.1:Two-key plot rule111 chart.2:Grouped matrix for 232 rules rules2 chart.3:Graph plot
rules3

文章轉載自:http://www.itongji.cn/article/0QR5962013.html