【機器學習與R語言】10- 關(guān)聯(lián)規(guī)則

1.理解關(guān)聯(lián)規(guī)則

1)基本認識

  • 購物籃分析:用來判別事務型數(shù)據(jù)中商品之間關(guān)聯(lián)的機器學習方法肢专,在零售店之間廣泛使用本姥。
  • 購物籃分析的結(jié)果是一組指定商品之間關(guān)系模式的關(guān)聯(lián)規(guī)則肩袍。
  • 表現(xiàn)形式:{花生醬,果凍}——>{面包}婚惫,即如果購買了花生醬和果凍氛赐,就很有可能購買面包。商品的集合稱為項集先舷。
  • 特點:無監(jiān)督學習艰管,不能預測,智能發(fā)現(xiàn)知識密浑;不能衡量算法性能蛙婴,只能定性地評估。
  • 其他應用場景:癌癥種尋找DNA和蛋白質(zhì)頻繁出現(xiàn)的模式尔破;信用卡欺詐和保險或醫(yī)療津貼的模式等街图。

2)Apriori算法

  • Apriori:a priori,即事先
  • 事務型數(shù)據(jù)特點:一般很龐大懒构,潛在的項集數(shù)量隨著特征的數(shù)量呈指數(shù)增加餐济。給定k個項,則有2^k個可能的項集必須用于規(guī)則的搜索胆剧。
  • 采用啟發(fā)式算法來減少需要搜索的項集數(shù)絮姆,如廣泛使用的Apriori算法,利用了一個簡單的先驗信念作為準則來減少關(guān)聯(lián)規(guī)則的搜索空間(Apriori性質(zhì):一個頻繁項集的所有子集必須也是頻繁的)秩霍。
image.png

度量規(guī)則興趣度:支持度和置信度

  • 支持度:一個項集或規(guī)則在數(shù)據(jù)中出現(xiàn)的頻率篙悯。項集可以是多個項{A,B},也可是單個{A}铃绒。


    N是數(shù)據(jù)庫中交易次數(shù)鸽照,count(X)是項集X的交易次數(shù)
  • 置信度:規(guī)則的預測能力或準確度度量,即表交易中項集X的出現(xiàn)導致項集Y出現(xiàn)的比例颠悬,和貝葉斯概率P(A|B)類似矮燎。


    同時包含項集X和Y的支持度與只包含項集X支持度之商

用Apriori性質(zhì)建立規(guī)則

  • 如果{A,B}是頻繁的定血,那么{A}和{B}必須是頻繁的。通過Apriori算法可提前排除潛在的關(guān)聯(lián)規(guī)則诞外。
  • 過程:一是通過多次迭代-停止的過程來識別所有滿足最小支持度閾值的項集澜沟;二是根據(jù)滿足最小置信度閾值的這些項集來創(chuàng)建規(guī)則。

2.關(guān)聯(lián)規(guī)則應用示例

用關(guān)聯(lián)規(guī)則確定經(jīng)常一起購買的食品雜貨

1)收集數(shù)據(jù)

來自某超市經(jīng)營一個月的購物數(shù)據(jù)峡谊,包含9835次交易茫虽,大約每天327次交易。不考慮品牌靖苇,將食品雜貨數(shù)量歸為169個類型席噩,探究哪種類型的商品有可能一起購買。

數(shù)據(jù)下載:

鏈接: https://pan.baidu.com/s/11xTz8xkJxXTuj0hc5THTZA 提取碼: s5pr

2)探索和準備數(shù)據(jù)

不同于矩陣贤壁,事務型數(shù)據(jù)形式更自由悼枢,每一行為案例(一次交易),每條記錄包括用逗號隔開的任意數(shù)量的產(chǎn)品清單脾拆,一至多個馒索。也就是說案例之間的特征可能是不同的。

①為交易數(shù)據(jù)創(chuàng)建一個稀疏矩陣
傳統(tǒng)的數(shù)據(jù)框一旦增加額外的交易和商品名船,會變得過大而導致內(nèi)存不足绰上,因此用稀疏矩陣(購買了該單元格為1,否則為0渠驼,169列商品大部分單元為0)在內(nèi)存中沒有存儲完整的矩陣蜈块,只是存儲了由一個商品所占用的單元。

使用arules包中的read.transactions函數(shù)創(chuàng)建事務型數(shù)據(jù)的稀疏矩陣迷扇。

## Example: Identifying Frequently-Purchased Groceries ----
## Step 2: Exploring and preparing the data ----

# load the grocery data into a sparse matrix
library(arules)
groceries <- read.transactions("groceries.csv", sep = ",")
summary(groceries)

# look at the first five transactions
inspect(groceries[1:5])

# examine the frequency of items
itemFrequency(groceries[, 1:3])

②可視化商品的支持度(商品頻率)

# plot the frequency of items
itemFrequencyPlot(groceries, support = 0.1) #支持度至少10%
itemFrequencyPlot(groceries, topN = 20) #支持度前20的商品
10%

top20

③可視化稀疏矩陣(商品交易)
矩陣中有黑色填充的百揭,說明被購買了。大多數(shù)情況下蜓席,圖形是比較隨機的器一。
對于超大型交易數(shù)據(jù)集不適合全部展示,這時可以對交易進行隨機抽樣并可視化厨内。

# a visualization of the sparse matrix for the first five transactions
image(groceries[1:5])

# visualization of a random sample of 100 transactions
image(sample(groceries, 100))
image.png

3)訓練模型

apriori函數(shù)很簡單祈秕,但要找到支持度和置信度參數(shù)來產(chǎn)生合理數(shù)量的關(guān)聯(lián)規(guī)則,需要大量的試驗和誤差評估雏胃。參數(shù)閾值設置太高请毛,可能沒有規(guī)則或規(guī)則太普通,太低則可能導致規(guī)則數(shù)量龐大瞭亮,耗時耗內(nèi)存获印。

訓練模型函數(shù)說明:

#找出關(guān)聯(lián)規(guī)則
myrules=arules::apriori(data, 
        parameter = list(
                     support = 0.1,  #最低支持度
                     confidence = 0.8, #最低置信度
                     minlen = 1)) #最低項數(shù)

# 檢驗關(guān)聯(lián)規(guī)則
inspect(myrules)
  • 支持度的閾值設置:考慮規(guī)則之前,事先想好需要最小的交易數(shù)量,如某商品一天購買2次(一月約60次)時可考慮建立規(guī)則兼丰,則支持度設為60/9835=0.006。
  • 置信度的閾值設置:涉及一個巧妙的平衡唆缴。絕大部分取決于分析目標鳍征,如從保守值開始,若無可行性規(guī)則面徽,再降低要求拓寬范圍艳丛。
  • minlen設定為2有助于消除包含少于兩類商品的規(guī)則,防止僅僅是由于某商品被頻繁購買而創(chuàng)建的無趣規(guī)則趟紊。
## Step 3: Training a model on the data ----
library(arules)

# default settings result in zero rules learned
apriori(groceries)

# set better support and confidence levels to learn more rules
groceryrules <- apriori(groceries, parameter = list(support =
                          0.006, confidence = 0.25, minlen = 2))
groceryrules
建立的關(guān)聯(lián)規(guī)則數(shù)

4)評估性能

  • 規(guī)則的大械:前項(條件項/左項,lhs)和后項(結(jié)果項/右項霎匈,rhs)之和戴差,如{peanut butter, jully}=>{bread}的大小為2+1=3.
  • 度量規(guī)則質(zhì)量的統(tǒng)計量:支持度(support),置信度(confidence)和提升度(lift)铛嘱。提升率是指一類商品相對于它的一般購買率暖释,被購買的可能性有多大。若lift大于1墨吓,則說明商品關(guān)聯(lián)一起比單類商品購買更常見球匕。


    提升率與置信度不同,與商品購買順序無關(guān)帖烘,lift(X—>Y)和lift(Y—>X)一樣
  • 需要注意一些平凡的規(guī)則和令人費解的規(guī)則(可能只是隨機模式)
## Step 4: Evaluating model performance ----
# summary of grocery association rules
summary(groceryrules)

# look at the first three rules
inspect(groceryrules[1:3])
規(guī)則結(jié)果

查看前三項規(guī)則

5)提高模型性能

①對關(guān)聯(lián)規(guī)則集合排序
最有用的規(guī)則或許是那些具有最高支持度亮曹、置信度和提升度的規(guī)則,所以對其進行排序來尋找感興趣的規(guī)則秘症。

# sorting grocery rules by lift
inspect(sort(groceryrules, by = "lift")[1:5])
lift排序top5

②提取關(guān)聯(lián)規(guī)則的子集
假如只對某種商品和其他商品關(guān)聯(lián)感興趣照卦,,如漿果berries历极,則可以提取包含berries的所有規(guī)則窄瘟。

# finding subsets of rules containing any berry items
berryrules <- subset(groceryrules, items %in% "berries")
inspect(berryrules)
image.png

③將關(guān)聯(lián)規(guī)則保存到文件或數(shù)據(jù)框中
轉(zhuǎn)化數(shù)據(jù)框使用as函數(shù)。

# writing the rules to a CSV file
write(groceryrules, file = "groceryrules.csv",
      sep = ",", quote = TRUE, row.names = FALSE)

# converting the rule set to a data frame
groceryrules_df <- as(groceryrules, "data.frame") 
str(groceryrules_df)
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末趟卸,一起剝皮案震驚了整個濱河市蹄葱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锄列,老刑警劉巖图云,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異邻邮,居然都是意外死亡竣况,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門筒严,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丹泉,“玉大人情萤,你說我怎么就攤上這事∧『蓿” “怎么了筋岛?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長晒哄。 經(jīng)常有香客問我睁宰,道長,這世上最難降的妖魔是什么寝凌? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任柒傻,我火速辦了婚禮,結(jié)果婚禮上较木,老公的妹妹穿的比我還像新娘红符。我一直安慰自己,他們只是感情好劫映,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布违孝。 她就那樣靜靜地躺著,像睡著了一般泳赋。 火紅的嫁衣襯著肌膚如雪雌桑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天祖今,我揣著相機與錄音校坑,去河邊找鬼。 笑死千诬,一個胖子當著我的面吹牛耍目,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播徐绑,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼邪驮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了傲茄?” 一聲冷哼從身側(cè)響起毅访,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盘榨,沒想到半個月后喻粹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡草巡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年守呜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡查乒,死狀恐怖弥喉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情侣颂,我是刑警寧澤档桃,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站憔晒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蔑舞。R本人自食惡果不足惜拒担,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望攻询。 院中可真熱鬧从撼,春花似錦、人聲如沸钧栖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拯杠。三九已至掏婶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間潭陪,已是汗流浹背雄妥。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留依溯,地道東北人老厌。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像黎炉,于是被迫代替她去往敵國和親枝秤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345