91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

R語言中如何使用Apriori算法

發布時間:2021-07-19 15:06:43 來源:億速云 閱讀:668 作者:Leah 欄目:大數據

這篇文章將為大家詳細講解有關R語言中如何使用Apriori算法,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

一. 概念

關聯分析用于發現隱藏在大型數據集中的有意義的聯系。所發現的聯系可以用關聯規則(association rule)或頻繁項集的形式表示。

項集:在關聯分析中,包含0個或多個項的集合被稱為項集(itemset)。如果一個項集包含k個項,則稱它為k-項集。例如:{啤酒,尿布,牛奶,花生}  是一個4-項集。空集是指不包含任何項的項集。

關聯規則(association rule):是形如 X → Y  的蘊含表達式,其中X和Y是不相交的項集,即:X∩Y=∅。關聯規則的強度可以用它的支持度(support)和置信度(confidence)來度量。

支持度:一個項集或者規則在所有事物中出現的頻率,確定規則可以用于給定數據集的頻繁程度。σ(X):表示項集X的支持度計數

項集X的支持度:s(X)=σ(X)/N;規則X → Y的支持度:s(X → Y) = σ(X∪Y) / N

置信度:確定Y在包含X的事務中出現的頻繁程度。c(X → Y) = σ(X∪Y)/σ(X)

支持度是一種重要的度量,因為支持度很低的規則可能只是偶然出現,低支持度的規則多半也是無意義的。因此,支持度通常用來刪去那些無意義的規則;

置信度度量是通過規則進行推理具有可靠性。對于給定的規則X →  Y,置信度越高,Y在包含X的事物中出現的可能性就越大。即Y在給定X下的條件概率P(Y|X)越大。

二. R語言中實現Apriori算法應用

R語言中的Apriori算法實現包含在arules包中,本文不涉及算法的實現,只是應用arules該包實現關聯規則的挖掘。

1.數據源:利用arules包中自帶的Groceries數據集,該數據集是來自一個現實世界中的超市經營一個月的購物數據,包含了9835次交易。我們按照超市一天12個小時的工作時間計算,大約每小時的交易次數為9835/30/12=27.3,表明該超市規模屬于中等。

> library(arules)  #加載 arules 包 > data(Groceries) > Groceries transactions in sparse format with  9835 transactions (rows) and  169 items (columns)

2.探索和準備數據:

(1)事務型數據每一行指定一個單一的實例,每條記錄包括用逗號隔開的任意數量的產品清單,通過inspect()函數可以看到超市的交易記錄,每次交易的商品名稱;通過summary()函數可以查看該數據集的一些基本  信息。

> inspect(Groceries[1:5])   #通過inspect函數查看Groceries數據集的前5次交易記錄   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} <br>> summary(Groceries) transactions as itemMatrix in sparse format with  9835 rows (elements/itemsets/transactions) and  169 columns (items) and a density of 0.02609146    most frequent items:       whole milk other vegetables       rolls/buns             soda           yogurt          (Other)             2513             1903             1809             1715             1372            34055   element (itemset/transaction) length distribution: sizes    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   26   27   28   29 2159 1643 1299 1005  855  645  545  438  350  246  182  117   78   77   55   46   29   14   14    9   11    4    6    1    1    1    1    3   32    1      Min. 1st Qu.  Median    Mean 3rd Qu.    Max.   1.000   2.000   3.000   4.409   6.000  32.000   includes extended item information - examples:        labels  level2           level1 1 frankfurter sausage meat and sausage 2     sausage sausage meat and sausage 3  liver loaf sausage meat and sausage
> itemFrequency(Groceries[,1:3])   #itemFrequency()函數可以查看商品的交易比例<br>frankfurter sausage liver loaf <br>0.058973055 0.093950178 0.005083884

分析:

①密度值0.02609146(2.6%)指的是非零矩陣單元格的比例。

該數據集一共有9835行(交易記錄),169列(所有交易的商品種類),因此,矩陣中共有9835*169=1662115個位置,我們可以得出,在30天內共有1662115*0.02609146=43367件商品被購買。進一步可以得出在每次交易中包含了43367/9835=4.409件商品被購買,在均值那一列可以看出(Mean=4.409)我們的計算是正確的;

②most frequent items:列出了事務型數據中最常購買的商品。whole milk  在9835次交易中被購買了2513次,因此,我們可以得出結論:whole milk有2513/9835=25.6%的概率出現在所有的交易中;

③element (itemset/transaction) length  distribution:呈現了一組關于交易規模的統計,總共有2159次交易中包含一件商品,有1次交易中包含了32件商品.從分位數分布情況可以看出,25%的交易中包含了兩件或者更少的商品,大約一半的交易中商品數量為3件;

(2)可視化商品的支持度&mdash;&mdash;商品的頻率圖

為了直觀地呈現統計數據,可以使用itemFrequenctyPlot()函數生成一個用于描繪所包含的特定商品的交易比例的柱狀圖。因為包含很多種商品,不可能同時展現出來,因此可以通過support或者topN參數進行排除一部分商品進行展示

R語言中如何使用Apriori算法

R語言中如何使用Apriori算法

(3)可視化交易數據&mdash;&mdash;繪制稀疏矩陣

通過使用image()函數可以可視化整個稀疏矩陣。

image(Groceries[1:5]) # 生成一個5行169列的矩陣,矩陣中填充有黑色的單元表示在此次交易(行)中,該商品(列)被購買了

R語言中如何使用Apriori算法

從上圖可以看出,***行記錄(交易)包含了四種商品(黑色的方塊),這種可視化的圖是用于數據探索的一種很有用的工具。它可能有助于識別潛在的數據問題,比如:由于列表示的是商品名稱,如果列從上往下一直被填充表明這個商品在每一次交易中都被購買了;另一方面,圖中的模式可能有助于揭示交易或者商品的有趣部分,特別是當數據以有趣的方式排序后,比如,如果交易按照日期進行排序,那么黑色方塊圖案可能會揭示人們購買商品的數量或者類型受季節性的影響。這種可視化對于超大型的交易數據集是沒有意義的,因為單元太小會很難發現有趣的模式。

3.訓練模型

grocery_rules <- apriori(data=Groceries,parameter=list(support =,confidence =,minlen =))

運行apriori()函數很簡單,但是找到支持度和置信度參數來產生合理數量的關聯規則時,可能需要進行大量的試驗與誤差評估。

如果參數設置過高,那么結果可能是沒有規則或者規則過于普通而不是非常有用的規則;另一方面如果閾值太低,可能會導致規則數量很多,甚至需要運行很長的時間或者在學習階段耗盡內存。

aprior()函數默認設置 support = 0.1 和 confidence = 0.8,然而使用默認的設置,不能得到任何規則

> apriori(Groceries) set of 0 rules  # 因為support = 0.1,則意味著該商品必須至少出現在 0.1 * 9835 = 983.5次交易中,在前面的分析中,我們發現只有8種商品的 support >= 0.1,因此使用默認的設置沒有產生任何規則也不足為奇

解決支持度設定問題的一種方法是考慮一個有趣的模式之前,事先想好需要的最小交易數量,例如:我們可以認為如果一種商品一天被購買了2次,一個月也就是60次交易記錄,這或許是我們所感興趣的,據此,可以計算所需要的支持度support=60/9835=0.006;

關于置信度:設置太低,可能會被大量不可靠的規則淹沒,設置過高,可能會出現很多顯而易見的規則致使我們不能發現有趣的模式;一個合適的置信度水平的選取,取決于我們的分析目標,我們可以嘗試以一個保守的值開始,如果發現沒有具有可行性的規則,可以降低置信度以拓寬規則的搜索范圍。

在此例中,我們將從置信度0.25開始,這意味著為了將規則包含在結果中,此時規則的正確率至少為25%,這將排除最不可靠的規則

minlen = 2 表示規則中至少包含兩種商品,這可以防止僅僅是由于某種商品被頻繁購買而創建的無用規則,比如在上面的分析中,我們發現whole  milk出現的概率(支持度)為25.6%,很可能出現如下規則:{}=>whole milk,這種規則是沒有意義的。

最終,根據上面的分析我們確定如下參數設置:

> grocery_rules <- apriori(data = Groceries,parameter = list(support = 0.006,confidence = 0.25,minlen = 2)) > grocery_rules set of 463 rules

4.評估模型的性能

> summary(grocery_rules) set of 463 rules   rule length distribution (lhs + rhs):sizes  # 前件+后件 的規則長度分布   2   3   4 150 297  16    #有150個規則只包含2種商品,297個規則包含3種商品,16個規則包含4種商品      Min. 1st Qu.  Median    Mean 3rd Qu.    Max.   2.000   2.000   3.000   2.711   3.000   4.000   summary of quality measures:     support           confidence          lift            Min.   :0.006101   Min.   :0.2500   Min.   :0.9932   1st Qu.:0.007117   1st Qu.:0.2971   1st Qu.:1.6229   Median :0.008744   Median :0.3554   Median :1.9332   Mean   :0.011539   Mean   :0.3786   Mean   :2.0351   3rd Qu.:0.012303   3rd Qu.:0.4495   3rd Qu.:2.3565   Max.   :0.074835   Max.   :0.6600   Max.   :3.9565    mining info:       data ntransactions support confidence  Groceries          9835   0.006       0.25 <br>> inspect(grocery_rules[1:5])   lhs             rhs                support     confidence lift    1 {pot plants} => {whole milk}       0.006914082 0.4000000  1.565460 2 {pasta}      => {whole milk}       0.006100661 0.4054054  1.586614 3 {herbs}      => {root vegetables}  0.007015760 0.4312500  3.956477 4 {herbs}      => {other vegetables} 0.007727504 0.4750000  2.454874 5 {herbs}      => {whole milk}       0.007727504 0.4750000  1.858983 

這里需要解釋一下lift(提升度),表示用來度量一類商品相對于它的一般購買率,此時被購買的可能性有多大。通俗的講就是:比如***條規則{pot  plants} => {whole milk},lift = 1.565,表明(購買pot plants 之后再購買 whole milk商品的可能性)  是 (沒有購買pot plants 但是購買了whole milk 的可能性) 的 1.565倍;

***條規則解讀:如果一個顧客購買了pot plants,那么他還會購買whole  milk,支持度support為0.0070,置信度confidence為0.4000,我們可以確定該規則涵蓋了大約0.7%的交易,而且在購買了pot  plants后,他購買whole milk的概率為40%,提升度lift值為1.565,表明他相對于一般沒有購買pot plant商品的顧客購買whole  milk商品的概率提升了1.565倍,我們在上面的分析中知道,有25.6%的顧客購買了whole  milk,因此計算提升度為0.40/0.256=1.56,這與顯示的結果是一致的,注意:標有support的列表示規則的支持度,而不是前件(lhs)或者后件(rhs)的支持度。

提升度 lift(X &rarr; Y) = P (Y| X) / P (Y) , lift(X &rarr; Y) 與 lift(Y &rarr; X) 是相同的。

如果lift值>1,說明這兩類商品在一起購買比只有一類商品被購買更常見。一個大的提升度值是一個重要的指標,它表明一個規則時很重要的,并反映了商品之間的真實聯系。

5.提高模型的性能

(1)對關聯規則集合排序

根據購物籃分析的目標,最有用的規則或許是那些具有高支持度、信度和提升度的規則。arules包中包含一個sort()函數,通過指定參數by為"support","confidence"或者"lift"對規則列表進行重新排序。  在默認的情況下,排序是降序排列,可以指定參數decreasing=FALSE反轉排序方式。

> inspect(sort(grocery_rules,by="lift")[1:10])     lhs                                             rhs                  support     confidence lift    3   {herbs}                                      => {root vegetables}    0.007015760 0.4312500  3.956477 57  {berries}                                    => {whipped/sour cream} 0.009049314 0.2721713  3.796886 450 {tropical fruit,other vegetables,whole milk} => {root vegetables}    0.007015760 0.4107143  3.768074 174 {beef,other vegetables}                      => {root vegetables}    0.007930859 0.4020619  3.688692 285 {tropical fruit,other vegetables}            => {pip fruit}          0.009456024 0.2634561  3.482649 176 {beef,whole milk}                            => {root vegetables}    0.008032537 0.3779904  3.467851 284 {pip fruit,other vegetables}                 => {tropical fruit}     0.009456024 0.3618677  3.448613 282 {pip fruit,yogurt}                           => {tropical fruit}     0.006405694 0.3559322  3.392048 319 {citrus fruit,other vegetables}              => {root vegetables}    0.010371124 0.3591549  3.295045 455 {other vegetables,whole milk,yogurt}         => {tropical fruit}     0.007625826 0.3424658  3.263712

(2)提取關聯規則的子集:可以通過subset()函數提取我們感興趣的規則

> fruit_rules <- subset(grocery_rules,items %in% "pip fruit")  # items 表明與出現在規則的任何位置的項進行匹配,為了將子集限制到匹配只發生在左側或者右側位置上,可以使用lhs或者rhs代替 > fruit_rules set of 21 rules > inspect(fruit_rules[1:5])     lhs                           rhs                support     confidence lift    127 {pip fruit}                => {tropical fruit}   0.020437214 0.2701613  2.574648 128 {pip fruit}                => {other vegetables} 0.026131164 0.3454301  1.785237 129 {pip fruit}                => {whole milk}       0.030096594 0.3978495  1.557043 281 {tropical fruit,pip fruit} => {yogurt}           0.006405694 0.3134328  2.246802 282 {pip fruit,yogurt}         => {tropical fruit}   0.006405694 0.3559322  3.392048

關于R語言中如何使用Apriori算法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

郴州市| 措美县| 元朗区| 色达县| 永年县| 莒南县| 巴中市| 临高县| 奎屯市| 类乌齐县| 靖远县| 阿坝| 白玉县| 本溪市| 阿克| 夏津县| 杭锦后旗| 天等县| 北京市| 宿州市| 鹤庆县| 扬州市| 仁寿县| 巨鹿县| 双鸭山市| 新津县| 南投市| 襄垣县| 聊城市| 平原县| 原阳县| 三台县| 瑞丽市| 惠东县| 封开县| 万载县| 林甸县| 佳木斯市| 南开区| 永胜县| 黑龙江省|