天天看點

R語言:關聯規則(apriori)

本文資料是來自datacastle網站上的一道競賽題,是基于關聯規則進行商品推薦之類的題目

資料集中還包含了對商品的評分和購買時間兩個額外變量,下面這篇文章并沒有使用到這一個變量,

特别是對商品的評分這個變量,包含了很多有用的資訊。

是以說,這篇文章還是一個半成品,有空會補上。

#讀入資料
data = read.csv("資料.csv",stringsAsFactors=F)
data = data[1:57528,]  #取訓練集

write.table(data,'shopping.txt')  #導出成txt,為導入成transactions做準備
#導出後,在txt檔案中,進行替換查找,格式如下:<pre name="code" class="plain">分别是行名,id,商品,評分,購買時間
           
1 1 1 5 874965758
2 1 3 4 878542960
3 1 4 3 876893119
4 1 5 3 889751712
5 1 7 4 875071561
6 1 9 5 878543541
7 1 13 5 875071805
8 1 15 5 875071608
9 1 16 5 878543541
10 1 18 4 887432020
11 1 19 5 875071515
           
library(arules)
#讀入成transactions資料格式
shopping = read.transactions('shopping.txt',format='single',cols=c(2,3))
#可以通過dim(shopping)  summary(shopping)來檢視資料集的基本情況
#size()檢視每個交易的商品數
basketSize = size(shopping)
#檢視每個item支援度
itemFreq = sort(itemFrequency(shopping),decreasing=T) #将支援度排序
itemFreq[1:5] #檢視前五個item的支援度
sum(itemFreq)#本質上代表"平均一個transaction購買的item個數"

#根據需要,篩選購買兩件以上的交易
shopping[size(shopping) > 1]

#運用apriori函數生成規則
myrules = apriori(shopping,parameter=list(support=0.1,confidence=0.25,minlen=2))
#使用summary函數檢視規則的彙總資訊
summary(myrules)
inspect(myrules[1:10])#檢視具體的規則
           

具體的規則如下:

> inspect(myrules[1:10])#檢視具體的規則

   lhs      rhs     support confidence     lift

1  {118} => {121} 0.1102863  0.6797386 2.693250

2  {121} => {118} 0.1102863  0.4369748 2.693250

3  {118} => {181} 0.1039236  0.6405229 1.755852

4  {181} => {118} 0.1039236  0.2848837 1.755852

5  {275} => {50}  0.1113468  0.5833333 1.432509

6  {50}  => {275} 0.1113468  0.2734375 1.432509

#按名額對規則進行排序
sort(myrules,by='lift')
#搜尋規則
subset(myrules,items %in% "12")
subset(myrules,lhs %in% "12")#前項含“12”的規則
subset(myrules,rhs %in% "12")#後項含“12”的規則

# %in%是精确比對
# %pin%是部分比對,也就是說隻要item like '%A%' or item like '%B%'
# %ain%是完全比對,也就是說itemset has ’A' and itemset has ‘B'


#儲存挖掘結果
#write是arules包函數
write(myrules,'myrules.csv',sep=",", quote=TRUE, row.names=FALSE)
write(myrules,'myrules.txt',sep=",", quote=TRUE, row.names=FALSE)#還是csv檔案清晰好看
#或者轉換成data.frame,再做進一步處理
myrules_df = as(myrules,'data.frame')
           

規則如下:

> head(myrules_df)
           rules   support confidence     lift
1 {118} => {121} 0.1102863  0.6797386 2.693250
2 {121} => {118} 0.1102863  0.4369748 2.693250
3 {118} => {181} 0.1039236  0.6405229 1.755852
4 {181} => {118} 0.1039236  0.2848837 1.755852
5  {275} => {50} 0.1113468  0.5833333 1.432509
6  {50} => {275} 0.1113468  0.2734375 1.432509
           

更詳盡的知識可以參考http://blog.csdn.net/gjwang1983/article/details/45015203

繼續閱讀