1. 程式人生 > >Apriori演算法的R語言實現

Apriori演算法的R語言實現

1)資料準備

library(arules)

 a<-matrix(0,7,4,dimnames=list(c("basket1","basket2","basket3","basket4",
+ "basket5","basket6","basket7"),c("item1","item2","item3","item4")))
> a[1,]<-c(1,0,1,0)
> a[2,]<-c(0,0,1,1)
> a[3,]<-c(1,1,1,1)
> a[4,]<-c(1,1,0,0)
> a[5,]<-c(0,0,1,0)
> a[6,]<-c(1,0,1,1)
> a[7,]<-c(0,1,1,1)

 a.class<-as(a,"transactions")

apriori函式進行關聯分析

rules<-apriori(a.class,parameter=list(supp=0.2,conf=0.6,target="rules"))

inspect(rules)

   lhs              rhs              support   confidence   lift     
1  {}            => {item3} 0.8571429 0.8571429  1.0000000
2  {item2}       => {item1} 0.2857143 0.6666667  1.1666667
3  {item2}       => {item4} 0.2857143 0.6666667  1.1666667
4  {item2}       => {item3} 0.2857143 0.6666667  0.7777778
5  {item1}       => {item3} 0.4285714 0.7500000  0.8750000
6  {item4}       => {item3} 0.5714286 1.0000000  1.1666667
7  {item3}       => {item4} 0.5714286 0.6666667  1.1666667
8  {item2,item4} => {item3} 0.2857143 1.0000000  1.1666667
9  {item2,item3} => {item4} 0.2857143 1.0000000  1.7500000
10 {item1,item4} => {item3} 0.2857143 1.0000000  1.1666667
11 {item1,item3} => {item4} 0.2857143 0.6666667  1.1666667

 rules<-apriori(a.class,parameter=list(supp=0.2,conf=0.6,target="rules"),appearance=
+ list(rhs="item3",default="lhs"))

inspect(rules)

 lhs              rhs     support            confidence     lift     
1 {}            => {item3} 0.8571429 0.8571429  1.0000000
2 {item2}       => {item3} 0.2857143 0.6666667  0.7777778
3 {item1}       => {item3} 0.4285714 0.7500000  0.8750000
4 {item4}       => {item3} 0.5714286 1.0000000  1.1666667
5 {item2,item4} => {item3} 0.2857143 1.0000000  1.1666667
6 {item1,item4} => {item3} 0.2857143 1.0000000  1.1666667

rules<-rules[which([email protected]$lift>1)]
rules.sorted<-sort(rules,by="lift")
write(rules,file="apriori_rules.txt",sep = "|",col.names=NA)

序列關聯分析——可以挖掘帶有因果效應的關聯

library(arulesSequences)
item<-factor(c("A","B","B","A","B","A","C","A","B","C","B","A","B","A","A","B","A","B"))
seqid<-c(1,1,1,1,1,2,2,2,2,2,2,3,3,3,4,4,4,4)
eventid<-c(10,10,20,30,30,20,20,30,30,30,50,10,30,40,30,30,40,50)

data.tran<-as(data,"transactions")



transactionInfo(data.tran)$sequenceID<-seqid
transactionInfo(data.tran)$eventID<-eventid


transactionInfo(data.tran)


result<-cspade(data.tran,parameter = list(support = 0.5),control = list(verbose = TRUE))
result<-sort(result,by="support")
inspect(result)

例項:使用者點選頁面的行為分析

root<-"C:/"
tmpp<-read.fwf(paste(root,"anonymous-msweb.data",sep=""),widths=c(60))
train_list<-tmpp$V1


tmp_page<-c(0)
tmp_sequenceid<-c(0)
tmp_eventid<-c(0)
m<-0
sequenceid<-0
train_length<-length(train_list)
for (i in 302:train_length){
tmp<-unlist(strsplit(as.character(train_list[i]),","))
if(tmp[1]=="C"){
sequenceid<-sequenceid+1
eventid<-0
}else if (tmp[1]=="V") {
m<-m+1
eventid<-eventid+1
tmp_sequenceid[m]<-sequenceid
tmp_eventid[m]<-eventid
tmp_page[m]<-as.numeric(tmp[2])
}
}
tmp_page<-factor(tmp_page)
data<-data.frame(page=tmp_page,seqid=tmp_sequenceid,eventid=tmp_eventid)


user.page=1034
user.sequenceid<-unique(data$seqid[which(data$page==user.page)])
i<-i;data.user<-data[1,]
for (seq.i in user.sequenceid) {
data.user<-rbind(data.user,subset(data,seqid==seq.i))
i<-i+1
}
data.user<-data.user[-1,]


#資料準備
library(arulesSequences)
tmp_data<-data.frame(page=data.user$page)
data.tran<-as(tmp_data,"transactions")
transactionInfo(data.tran)$sequenceID<-data.user$seqid
transactionInfo(data.tran)$eventID<-data.user$eventid
#函式進行分析
result<-cspade(data.tran,parameter=list(support=0,maxlen=2),control=list(verbose=TRUE))
result<-sort(result,by="support")
page.2<-paste(".*page=",user.page,"[^\\}]*\\}>",sep="")
result.2<-result[grep(page.2,as(result,"data.frame")$sequence)]
inspect(result.2)




#篩選重點頁面並衡量其引導能力
result.data.frame<-as(result.2[-1],"data.frame")
persent<-result.data.frame$support/sum(result.data.frame$support)
sum.persent<-cumsum(persent)
result.data.frame<-cbind(result.data.frame,persent,sum.persent)
max.persent=0.7
result.data.frame<-subset(result.data.frame,sum.persent<=max.persent)
result.data.frame


page<-0;i<-1
for (i.seq in result.data.frame$sequence) {
real_seq1<-regexpr("<\\{page=",i.seq)+7
real_seq2<-regexpr("\\}",i.seq)[1]-1
page[i]<-substr(i.seq,real_seq1,real_seq2)
i<-i+1
}


i<-1;uv<-0
for (i.page in page){
uv[i]<-length(unique(data$seqid[which(data$page==i.page)]))
i<-i+1
}
conf<-result.data.frame$support*[email protected]$nsequences/uv
result.data.frame<-cbind(result.data.frame,conf=conf,page=page)


#繪製結果表圖
barplot(as.matrix(result.data.frame$persent,nrow=1),ylim=c(0,1),beside=TRUE,xlab=
"頁面名稱",main="引導使用者進入關鍵頁面1034的重點頁面分析")
lines(0.5+c(1:nrow(result.data.frame)),result.data.frame$conf,type="b",col="red")
text(0.5+c(1:nrow(result.data.frame)),result.data.frame$conf,labels=paste(round(result.data.frame$conf*100,2),"%",sep=""))
axis(1,at=0.5+c(1:nrow(result.data.frame)),labels=result.data.frame$page,tick=FALSE)




相關推薦

機器學習演算法(一)——關聯規則Apriori演算法R語言實現方法

關聯規則演算法算是一種十分常用的機器學習演算法,無論是面試還是日後工作中都會經常出現,那麼本篇小博就記錄一下自己學習關聯規則經典演算法Apriori的筆記。 1、概述 Apriori演算法是用一種稱為逐層搜尋的迭代方法,從項集長度k=1開始,選出頻繁的k=1項集,根據先驗性

Apriori演算法R語言實現

1)資料準備 library(arules)  a<-matrix(0,7,4,dimnames=list(c("basket1","basket2","basket3","basket4", + "basket5","basket6","basket7"),c("

Bagging演算法R語言實現

原始連結 http://www.tuicool.com/articles/yIjyiu bagging 是bootstrap aggregating的縮寫,是第一批用於多分類整合演算法。 bagging演算法如下:  迴圈K次,每次都從樣本集D中有放回地抽取樣本集Di,這樣總共得到k個樣本集,用這K個樣

區域性搜尋演算法R語言實現

禁忌演算法 禁忌演算法是啟發式演算法對個體的應用的一種。由於在運用最速下降或者最速上升區域性搜尋最值的時候可能會因為到了區域性最小值後停止搜尋。這裡禁忌演算法是一種可以look back的演算法,但是需要設定一些禁忌目錄來保證搜尋不是無限的。 例如:在B

【決策樹】ID3演算法理解與R語言實現

一、演算法理解 想來想去,還是決定用各大暢銷書中的相親例子來解釋什麼叫決策樹。 簡單來說,決策樹就是根據各種變數,作為輸入條件,最終輸出決策的過程。比如上圖中女方在相親過程中,影響是否見男方的變數有年齡、長相、收入、是否是公務員等。 最終在各種變數組合下,最終輸出見或不

基於使用者的協同過濾演算法(Java實現R語言實現

  協同過濾的步驟是:   建立資料模型 —> 使用者相似度演算法 —>使用者近鄰演算法 —>推薦演算法。   基於使用者的協同過濾演算法在Mahout庫中已經模組化了,通過4個模組進行統一的方法呼叫。首先,建立資料模型(DataModel

樸素貝葉斯分類演算法R語言實現

貝葉斯分類常用來預測隸屬關係,計算一個給定元組屬於某一類的概率 首先我們來看下貝葉斯基本公式: P(B|A)的意思是在A事件的情況下,發生B事件的概率,可以理解為概率論中的條件概率,而貝葉斯公式的巨大作用就是對因果關係進行了交換,通過上面的公式就可以計算P(A|B

機器學習演算法(二)——決策樹分類演算法R語言實現方法

決策樹演算法是分類演算法中最常用的演算法之一。決策樹是一種類似流程圖的樹形結構,可以處理高維資料,直觀易理解,且準確率較高,因此應用廣泛。本篇小博就決策樹的若干演算法:ID3演算法、C4.5演算法以及分類迴歸樹(CART)、C5.0進行對比介紹,並對比C4.5與C5.0處理

R語言實現關聯規則與推薦演算法(學習筆記)

R語言實現關聯規則筆者前言:以前在網上遇到很多很好的關聯規則的案例,最近看到一個更好的,於是便學習一下,寫個學習筆記。推薦演算法中物品-物品用關聯規則;人物-物品用協同過濾;人-人用社會網路分析;特徵-

分類演算法R語言實現案例

最近在讀《R語言與網站分析》,書中對分類、聚類演算法的講解通俗易懂,和資料探勘理論一起看的話,有很好的參照效果。 然而,這麼好的講解,作者居然沒提供對應的資料集。手癢之餘,我自己動手整理了一個可用於

用GA演算法設計22個地點之間最短旅程-R語言實現

資料探勘入門與實戰  公眾號: datadw 相關帖子 ———————————————————————————————————————————————————————— 某畢業班共有30位同學,來自22個地區,我們希望在假期來一次說走就走的旅行,

機器學習演算法(三)——樸素貝葉斯演算法R語言實現方法

樸素貝葉斯演算法也是一種常用的分類演算法,尤其在對文字文件分類的學習任務中,樸素貝葉斯分類是最有效的演算法之一。所謂的樸素,即假設在給定目標值時屬性值之間相互條件獨立,雖然這一假設看似不合理,但其最終的分類效果卻普遍較好。 一、概述 1、貝葉斯公式 2、最大後驗假設(MA

R語言:EM演算法和高斯混合模型的R語言實現

本文我們討論期望最大化理論,應用和評估基於期望最大化的聚類。軟體包install.packages("mclust");require(mclust)## Loading required package: mclust## Package 'mclust' version

R語言實現兩文件對應行列字符替換

pack nbsp mode none 安裝 lse 規則 改變 2.x 假設存在文件file1.xlsx,其內容如下: 存在文件file2.xlsx,其內容如下: 現在我想從第七列開始,將file2所有的字符替換成file1一樣的,即第七、八、九、十列不需要

Fisher線性判別及R語言實現

目錄 判別分析  線性判別分析 求Fisher線性判別函式 計算判別界值 資料如下 R程式碼 程式碼解釋及結果分析 判別分析 discriminat analysis,是多變數統計中用於判別樣品所屬類別的一種統計分析方法。它所解決的問題是在一些已知研

SHA-1演算法C語言實現

> 程式碼轉載自:https://blog.csdn.net/testcs_dn/article/details/25771377?locationNum=13&fps=1 > 感謝博主分享 #include<stdio.h> void creat_w(uns

頁面置換演算法——最近最久未使用演算法(c語言實現)

作業系統實驗:用C語言程式設計實現最近最久未使用置換演算法(LRU) 最近最久未使用置換演算法(LRU),全稱Least Recently Used,是一種頁面置換演算法。 對於在記憶體中但又不用的資料塊(記憶體塊)叫做LRU,作業系統會根據哪些資料屬於LRU而將其移出記憶體而騰出空間來載入另外

建立雙向連結串列的演算法——C語言實現

建立雙向連結串列的演算法——C語言實現 雙向連結串列也叫雙鏈表,是連結串列的一種,它的每個節點包含兩個指標,分別指向直接後繼和直接前驅(頭節點的前驅指空,尾節點的後繼指空)。所以,從雙向連結串列中的任意一個非前驅非後繼節點開始,都能很方便地訪問它的前驅和後繼節點。 實際上如果熟練掌握了單向連

差分進化演算法 C語言實現

之前的一篇中貼出了自己研究生期間C實現的基本粒子群演算法,執行速度顯然要比其他的高階語言快,這也是各個程式語言之間的差別,現在對於曾經輝煌過的差分進化演算法進行C語言實現。變異策略採用DE/rand/1,這個是最常見的。有錯誤之處請之處。 /***************D

R語言實現影象查重

(商業目的引用該文章請聯絡我,個人部落格引用該文章請註明來源,謝謝) 通過三個指令碼實現影象查重(需要提前匯入R的jpeg庫) R指令碼路徑: D:\Computer Science\Programming\R\ImageProcessing 影象儲存路徑: D:\