arules:關聯規則及視覺化
阿新 • • 發佈:2019-02-08
在個性化推薦中,除了應用比較廣的協同過濾,還有關聯規則。作為資料探勘中一個獨立的課題,關聯規則用於從大量資料中挖掘出有價值的資料項之間的相關關係,比如購買啤酒的顧客有多大的概率購買尿布?這就購物籃中比較著名的”啤酒與尿布“的故事;介紹兩個關聯規則中常用的演算法:Apriori和Eclat,這兩個演算法在arules中均有涉及; 關聯規則維基百科:Apriori演算法是應用比較廣泛的頻繁項集的演算法,特別是挖掘布林關聯規則(0-1);演算法主要分為兩步:
-
第一步通過迭代,檢索出事務交易資料中的所有頻繁項集,即支援度不低於使用者設定的閾值的項集;
-
第二步利用頻繁項集構造出滿足使用者最小信任度的規則。其中,挖掘或識別出所有頻繁項集是該演算法的核心,佔整個計算量的大部分。
Eclat主要思想是倒排,常規的交易資料是事務ID-事務資料,Eclat用事務中的每一項作為ID,事務ID作為值,對交易資料進行了變換; 詳細的資料變換和演算法請參考: arules package
從上圖可見:關聯規則的核心是生成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) 對滿足條件的頻繁項畫圖
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:
簡單介紹一下關聯規則的視覺化包:
#每個畫圖包背後都有一堆包,像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.3chart.1:Two-key plot chart.2:Grouped matrix for 232 rules chart.3:Graph plot
文章轉載自:http://www.itongji.cn/article/0QR5962013.html