1. 程式人生 > >R語言 apriori演算法案例詳解

R語言 apriori演算法案例詳解

轉載自http://blog.csdn.net/gjwang1983/article/details/45015203

1.概念

1.1 引論

關聯規則(AssociationRules)是無監督的機器學習方法,用於知識發現,而非預測。

關聯規則的學習器(learner)無需事先對訓練資料進行打標籤,因為無監督學習沒有訓練這個步驟。缺點是很難對關聯規則學習器進行模型評估,一般都可以通過肉眼觀測結果是否合理。

 

關聯規則主要用來發現Pattern,最經典的應用是購物籃分析,當然其他類似於購物籃交易資料的案例也可以應用關聯規則進行模式發現,如電影推薦、約會網站或者藥物間的相互副作用。

 

1.2 例子 - 源資料

點選流資料。

不同的Session訪問的新聞版塊,如下所示:

Session ID

List of media categories accessed

1

{News, Finance}

2

{News, Finance}

3

{Sports, Finance, News}

4

{Arts}

5

{Sports, News, Finance}

6

{News, Arts, Entertainment}

 

1.3資料格式

關聯規則需要把源資料的格式轉換為稀疏矩陣。

把上表轉化為稀疏矩陣,1表示訪問,0表示未訪問。

Session ID News Finance Entertainment Sports
1 1 1 0 0
2 1 1 0 0
3 1 1 0 1
4 0 0 0 0
5 1 1 0 1
6 1 0 1 0


1.4術語和度量

1.4.1項集 ItemSet

這是一條關聯規則:

 

括號內的Item集合稱為項集。如上例,{News, Finance}是一個項集,{Sports}也是一個項集。

這個例子就是一條關聯規則:基於歷史記錄,同時看過News和Finance版塊的人很有可能會看Sports版塊。

 

{News,Finance} 是這條規則的Left-hand-side (LHS or Antecedent)

{Sports}是這條規則的Right-hand-side (RHS or Consequent)

 

LHS(Left Hand Side)的項集和RHS(Right Hand Side)的項集不能有交集。

 

下面介紹衡量關聯規則強度的度量。

1.4.2支援度 Support

項集的支援度就是該項集出現的次數除以總的記錄數(交易數)。

Support({News}) = 5/6 = 0.83

Support({News, Finance}) = 4/6 =0.67

Support({Sports}) = 2/6 = 0.33

支援度的意義在於度量項集在整個事務集中出現的頻次。我們在發現規則的時候,希望關注頻次高的項集。

1.4.3置信度 Confidence

關聯規則 X -> Y 的置信度 計算公式 

規則的置信度的意義在於項集{X,Y}同時出現的次數佔項集{X}出現次數的比例。發生X的條件下,又發生Y的概率。



表示50%的人  訪問過{News, Finance},同時也會訪問{Sports}

1.4.4提升度 Lift

當右手邊的項集(consequent)的支援度已經很顯著時,即時規則的Confidence較高,這條規則也是無效的。

舉個例子:

在所分析的10000個事務中,6000個事務包含計算機遊戲,7500個包含遊戲機遊戲,4000個事務同時包含兩者。

關聯規則(計算機遊戲,遊戲機遊戲) 支援度為0.4,看似很高,但其實這個關聯規則是一個誤導。

在使用者購買了計算機遊戲後有 (4000÷6000)0.667 的概率的去購買遊戲機遊戲,而在沒有任何前提條件時,使用者反而有(7500÷10000)0.75的概率去購買遊戲機遊戲,也就是說設定了購買計算機遊戲這樣的條件反而會降低使用者去購買遊戲機遊戲的概率,所以計算機遊戲和遊戲機遊戲是相斥的。

 

 

所以要引進Lift這個概念,Lift(X->Y)=Confidence(X->Y)/Support(Y)

規則的提升度的意義在於度量項集{X}和項集{Y}的獨立性。即,Lift(X->Y)= 1 表面 {X},{Y}相互獨立。[注:P(XY)=P(X)*P(Y),if X is independent of Y]

 

如果該值=1,說明兩個條件沒有任何關聯,如果<1,說明A條件(或者說A事件的發生)與B事件是相斥的,一般在資料探勘中當提升度大於3時,我們才承認挖掘出的關聯規則是有價值的。


最後,lift(X->Y) = lift(Y->X)


1.4.5出錯率 Conviction

Conviction的意義在於度量規則預測錯誤的概率。

表示X出現而Y不出現的概率。


例子:


表面這條規則的出錯率是32%。

 

1.5生成規則

一般兩步:

  • 第一步,找出頻繁項集。n個item,可以產生2^n- 1 個項集(itemset)。所以,需要指定最小支援度,用於過濾掉非頻繁項集。
  • 第二部,找出第一步的頻繁項集中的規則。n個item,總共可以產生3^n - 2^(n+1) + 1條規則。所以,需要指定最小置信度,用於過濾掉弱規則。

第一步的計算量比第二部的計算量大。

2.Apriori演算法

 Apriori Principle

如果項集A是頻繁的,那麼它的子集都是頻繁的。如果項集A是不頻繁的,那麼所有包括它的父集都是不頻繁的。

例子:{X, Y}是頻繁的,那麼{X},{Y}也是頻繁的。如果{Z}是不頻繁的,那麼{X,Z}, {Y, Z}, {X, Y, Z}都是不頻繁的。


生成頻繁項集

給定最小支援度Sup,計算出所有大於等於Sup的項集。

第一步,計算出單個item的項集,過濾掉那些不滿足最小支援度的項集。

第二步,基於第一步,生成兩個item的項集,過濾掉那些不滿足最小支援度的項集。

第三步,基於第二步,生成三個item的項集,過濾掉那些不滿足最小支援度的項集。


 如下例子:

One-Item Sets Support Count Support
{News} 5 0.83
{Finance} 4 0.67
{Entertainment} 1 0.17
{Sports} 2 0.33
Two-Item Sets Support Count Support
{News, Finance} 4 0.67
{News, Sports} 2 0.33
{Finance, Sports} 2 0.33
Three-Item Sets Support Count Support
{News, Finance, Sports} 2 0.33

規則生成

給定Confidence、Lift 或者 Conviction,基於上述生成的頻繁項集,生成規則,過濾掉那些不滿足目標度量的規則。因為規則相關的度量都是通過支援度計算得來,所以這部分過濾的過程很容易完成。


Apriori案例分析(R語言)

1. 關聯規則的包

arules是用來進行關聯規則分析的R語言包。

[java]  view plain  copy
  1. library(arules)   

2. 載入資料集

源資料groceries 資料集,每一行代表一筆交易所購買的產品(item)

資料轉換:建立稀疏矩陣,每個Item一列,每一行代表一個transaction。1表示該transaction購買了該item,0表示沒有購買。當然,data frame是比較直觀的一種資料結構,但是一旦item比較多的時候,這個data frame的大多數單元格的值為0,大量浪費記憶體。所以,R引入了特殊設計的稀疏矩陣,僅存1,節省記憶體。arules包的函式read.transactions可以讀入源資料並建立稀疏矩陣。

[java]  view plain  copy
  1. groceries <- read.transactions("groceries.csv", format="basket", sep=",")  
引數說明:

format=c("basket", "single")用於註明源資料的格式。如果源資料每行內容就是一條交易購買的商品列表(類似於一行就是一個購物籃)那麼使用basket;如果每行內容是交易號+單個商品,那麼使用single。

cols=c("transId", "ItemId") 對於single格式,需要指定cols,二元向量(數字或字串)。如果是字串,那麼檔案的第一行是表頭(即列名)。第一個元素是交易號的欄位名,第二個元素是商品編號的欄位名。如果是數字,那麼無需表頭。對於basket,一般設定為NULL,預設也是NULL,所以不用指定。

signle format的資料格式如下所示,與此同時,需要設定cols=c(1, 2)

1001,Fries

1001,Coffee

1001,Milk

1002,Coffee

1002,Fries


rm.duplicates=FALSE:表示對於同一交易,是否需要刪除重複的商品。


接下來,檢視資料集相關的統計彙總資訊,以及資料集本身。

[java]  view plain  copy
  1. summary(groceries)  
  2. transactions as itemMatrix in sparse format with  
  3.  9835 rows (elements/itemsets/transactions) and  
  4.  169 columns (items) and a density of 0.02609146   
  5.   
  6. most frequent items:  
  7.       whole milk other vegetables       rolls/buns             soda   
  8.             2513             1903             1809             1715   
  9.           yogurt          (Other)   
  10.             1372            34055   
  11.   
  12. element (itemset/transaction) length distribution:  
  13. sizes  
  14.    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   
  15. 2159 1643 1299 1005  855  645  545  438