導航:首頁 > 源碼編譯 > 購物籃分析演算法

購物籃分析演算法

發布時間:2023-07-21 20:13:55

❶ 關聯規則演算法(The Apriori algorithm)

        關聯規則的目的在於在一個數據集中找出項之間的關系,也稱之為購物籃分析 (market basket analysis)。例如,購買鞋的顧客,有10%的可能也會買襪子,60%的買麵包的顧客,也會買牛奶。這其中最有名的例子就是"尿布和啤酒"的故事了。

        本篇的Apriori演算法主要是基於頻繁集的關聯分析。其主要目的就是為了尋找強關聯規則。

        要理解頻繁集、強關聯規則,要先藉助下面的一個情境,來介紹幾個重要概念。

        下表是一些購買記錄:

將購買記錄整理,可得到下表,橫欄和縱欄的數字表示同時購買這兩種商品的交易條數。如購買有Orange的交易數為4,而同時購買Orange和Coke的交易數為2。

        置信度,表示這條規則有多大程度上值得可信。

        設條件的項的集合為A,結果的集合為B。置信度計算在A中,同時也含有B的概率。即Confidence(A->B)=P(B|A)。例 如計算"如果Orange則Coke"的置信度。由於在含有Orange的4條交易中,僅有2條交易含有Coke。其置信度為0.5。

        支持度,計算在所有的交易集中,既有A又有B的概率。

        例如在5條記錄中,既有Orange又有Coke的記錄有2條。則此條規則的支持度為2/5=0.4。現在這條規則可表述為,如果一個顧客購買了Orange,則有50%的可能購買Coke。而這樣的情況(即買了Orange會再買Coke)會有40%的可能發生。

支持度大於預先定好的最小支持度的項集。

       關聯規則:令項集I={i1,i2,...in},且有一個數據集合D,它其中的每一條記錄T,都是I的子集。那麼關聯規則是形如A->B的表達式,A、B均為I的子集,且A與B的交集為空。這條關聯規則的支持度:support = P(A並B)。這條關聯規則的置信度:confidence = support(A並B)/suport(A)。

       強關聯規則:如果存在一條關聯規則,它的支持度和置信度都大於預先定義好的最小支持度與置信度,我們就稱它為強關聯規則。

下面用一個例子說明演算法的過程:

項目集合 I={1,2,3,4,5};

事務集 T:

設定最小支持度(minsup)=3/7,最小置信度(misconf)=5/7。

假設:n-頻繁項目集為包含n個元素的項目集,例如1-頻繁項目集為包含1個元素的項目集

則這里,1-頻繁項目集有:{1},{2},{3},{4},{5}

生成2-頻繁項目集的過程如下:

        首先列出所有可能的2-項目集,如下:

        {1,2},{1,3},{1,4},{1,5}

        {2,3},{2,4},{2,5}

        {3,4},{3,5}

        {4,5}

        計算它們的支持度,發現只有{1,2},{1,3},{1,4},{2,3},{2,4},{2,5}的支持度    滿足要求,因此求得2-頻繁項目集:

        {1,2},{1,3},{1,4},{2,3},{2,4}

生成3-頻繁項目集:

對於現有的2-頻繁項目集,兩兩取並集,並確保第三個二元組也在2-頻繁項目集內,把得到的所有3-項目集分別計算支持度,剔除不滿足最小支持度的項目集;

例如,

{1,2},{1,3}的並集得到{1,2,3};

{1,2},{1,4}的並集得到{1,2,4};

{1,3},{1,4}的並集得到{1,3,4};

{2,3},{2,4}的並集得到{2,3,4};

但是由於{1,3,4}的子集{3,4}不在2-頻繁項目集中,所以需要把{1,3,4}剔除掉。{2,3,4} 同理剔除。

然後再來計算{1,2,3}和{1,2,4}的支持度,發現{1,2,3}的支持度為3/7 ,{1,2,4}的支持度為2/7,所以需要把{1,2,4}剔除。因此得到3-頻繁項目集:{1,2,3}。

重復上面步驟繼續尋找n-頻繁項目集,直到不能發現更大的頻繁項目集。所以,到此,頻繁項目集生成過程結束。

這里只說明3-頻繁項目集生成關聯規則的過程,即以集合{1,2,3}為例:

回顧事物集,先生成1-後件的關聯規則:

(1,2)—>3,置信度=3/4(出現(1,2)的記錄共4條,其中有3條包含3,所以3/4);

(1,3)—>2,置信度=3/5;

(2,3)—>1,置信度=3/3;

第二條置信度<5/7,未達到最小置信度,所以剔除掉。所以對於3-頻繁項目集生成的強關聯規則為:(1,2)—>3和(2,3)—>1。

這表示,如果1、2出現了,則極有可能出現3;2、3出現,則極有可能有1。

http://www.cnblogs.com/junyuhuang/p/5572364.html

❷ Python購物籃數據(關聯分析)

pip install mlxtend

由於已經是csv格式,所以直接輸入:

每一行: 一個購物籃

每一列: 購物籃中的商品

先看看pd讀的對不對:

然後按行列印:

再將這些存在一個數組中:

1、什麼是獨熱碼

獨熱碼,在英文文獻中稱做 one-hot code, 直觀來說就是有多少個狀態就有多少比特,而且只有一個比特為1,其他全為0的一種碼制,更加詳細參加 one_hot code(維基網路) 。在機器學習中對於離散型的分類型的數據,需要對其進行數字化比如說性別這一屬性,只能有男性或者女性或者其他這三種值,如何對這三個值進行數字化表達?一種簡單的方式就是男性為0,女性為1,其他為2,這樣做有什麼問題?

使用上面簡單的序列對分類值進行表示後,進行模型訓練時可能會產生一個問題就是特徵的因為數字值得不同影響模型的訓練效果,在模型訓練的過程中不同的值使得同一特徵在樣本中的權重可能發生變化,假如直接編碼成1000,是不是比編碼成1對模型的的影響更大。為了解決上述的問題,使訓練過程中不受到因為分類值表示的問題對模型產生的負面影響,引入獨熱碼對分類型的特徵進行獨熱碼編碼。

        可以這樣理解,對於每一個特徵,如果它有m個可能值,那麼經過獨熱編碼後,就變成了m個二元特徵(如成績這個特徵有好,中,差變成one-hot就是100, 010, 001)。並且,這些 特徵互斥 ,每次只有一個激活。因此,數據會變成稀疏的。

這樣做的好處主要有:

(1)解決了分類器不好處理 屬性數據 的問題

(2)在一定程度上也起到了 擴充特徵 的作用

                                        M

以下為我摘取的別人的,貼上原文鏈接https://blog.csdn.net/hellozhxy/article/details/80600845

著名的啤酒與尿布, 這是典型的購物籃問題, 在數據挖掘界叫做頻繁項集(Frequent Itemsets).

note: 數據類型寫法按照Python的格式.

一. 目標與定義

1. 問題背景

超市中購物清單中總是有一些項目是被消費者一同購買的. 如果我們能夠發現這些 關聯規則 (association rules), 並合理地加以利用, 我們就能取得一定成果. 比如我們發現熱狗和芥末存在這種關系, 我們對熱狗降價促銷, 而對芥末適當提價, 結果能顯著提高超市的銷售額.

2. 目標

找到頻繁地 共同 出現在消費者結賬小票中項目(比如啤酒和尿布), 來一同促銷, 相互拉動, 提高銷售額.

3. 定義

支持度support: 其實就是概率論中的頻次frequency

支持度閾值support threshhold: 記為s, 指分辨頻繁項集的臨界值.

頻繁項集: 如果I是一個項集(Itemset), 且I的出現頻次(i.e.支持度)大於等於s, 那麼我們說I是頻繁項集.

一元項, 二元項, 三元項: 包含有一種商品, 兩種, 三種商品的項集.

4. 關聯規則

關聯規則: 形式為I->j, 含義是如果I種所有項都出現在某個購物籃的話, 那麼j很有可能也出現在這個購物籃中. 我們可以給出相應的confidence值(可信度, 即概率論中的置信度).

其中, 這個關聯規則的可信度計算為Confidence = I∪{j} / I, 本身是非常符合直覺和常識的. 比如我們說關聯規則{dog, cat} -> and 的可信度為0.6, 因為{dog, cat}出現在了1, 2, 3, 6, 7五個購物籃中, 而and出現在了1,2,7中, 因此我們可以算出Confidence = freq[{dog, cat, and}] / freq[{dog, cat}] = 3/5 = 0.6

注意到, 分子部分的頻次總是比分母低, 這是因為{dog, cat} 出現的次數總是大於等於{dog, cat, and}的出現次數.

二. 購物籃與A-Priori演算法

1. 購物籃數據表示

我們將有一個文本文件輸入, 比如allBills.txt, 或者allBills.csv. 裡面每行是一個購物籃.

文件的頭兩行可能是這樣(df.show(2)):

{23, 456, 1001}

{3, 18, 92, 145}

我們假定這是一家大型連鎖超市, 比如沃爾瑪, 因此這個文本文件是非常大的, 比如20GB. 因此我們無法一次將該文件讀入內存. 因此, 演算法的主要時間開銷都是磁碟IO.

我們同時還假定, 所有購物籃的平均規模是較小的, 因此在內存中產生所有大小項集的時間開銷會比讀入購物籃的時間少很多.

我們可以計算, 對於有n個項目組成的購物籃而言, 大小為k的所有子集的生成時間約為(n, k) = n! / ((n-k)!k!) = O(n^k/ k!), 其中我們只關注較小的頻繁項集, 因此我們約定k=2或者k=3. 因此所有子集生成時間T = O(n^3).

Again, 我們認為 在內存中產生所有大小項集的時間開銷會比讀入購物籃的時間少很多.

2. Itemset計數過程中的內存使用

我們必須要把整個k,v字典放在內存中, 否則來一個Itemset就去硬碟讀取一次字典將十分十分地慢.

此處, 字典是k=(18, 145), v=15這種形式. 此處, 應當注意到, 如果有{bread, milk, orange}這樣的String類型輸入, 應當預先用一個字典映射成對應的整數值編碼, 比如1920, 4453, 9101這樣.

那麼, 我們最多能用字典存儲多少種商品?

先看下我們存儲多少個count值.

我們假定項的總數目是n, 即超市有n種商品, 每個商品都有一個數字編號, 那麼我們需要(n, 2) = n^2/2 的大小來存儲所有的二元組合的count, 假設int是佔4個byte, 那麼需要(2·n^2)Byte內存. 已知2GB內存 = 2^31 Byte, 即2^31/2 = 2^30 >= n^2 --> n <= 2^15. 也就是說n<33 000, 因此我們說商品種類的最多是33k種.

但是, 這種計算方法存在一個問題, 並不是有10種商品, 那麼這10種商品的任意二元組合都會出現的. 對於那些沒出現的組合, 我們在字典中完全可以不存儲, 從而節省空間.

同時, 別忘了我們同樣也得存儲key = (i, j), 這是至少額外的兩個整數.

那麼我們到底具體怎麼存儲這些計數值?

可以採用三元組的方式來構造字典. 我們採用[i, j, count]形式來存儲, 其中i代表商品種類1, j代表商品種類2, 前兩個值代表key, 後面的value就是count, 是這個二元組合下的計數.

現在, 讓我們注意到我們(1)假定購物籃平均大小較小, 並(2)利用三元組(2個key的)字典和(3)不存儲沒出現組合優勢. 假設有100k = 10^5種商品, 有10million=10^7個購物籃, 每個購物籃有10個項, 那麼這種字典空間開銷是(10, 2) · 10^7 = 45 x 10^7 x 3= 4.5x10^8x3 = 1.35x10^9 個整數.  這算出來約為4x10^8 Byte = 400MB, 處於正常計算機內存范圍內.

3. 項集的單調性

如果項集I是頻繁的, 那麼它的所有子集也都是頻繁的. 這個道理很符合常識, 因為{dog, cat} 出現的次數總是大於等於{dog, cat, and}的出現次數.

這個規律的推論, 就是嚴格地, 我們頻繁一元組的個數> 頻繁二元組的個數 > 頻繁三元組的個數.

4. A-Priori演算法

我們通過Itemset計數中內存使用的部門, 已經明確了我們總是有足夠的內存用於所有存在的二元項集(比如{cat, dog})的計數. 這里, 我們的字典不存放不存在於購物籃中的任何二元項集合, 而且頻繁二元組的數目將會大於三元頻繁三元組> ...

我們可以通過單邊掃描購物籃文件, 對於每個購物籃, 我們使用一個雙重循環就可以生成所有的項對(即二元組). 每當我們生成一個項對, 就給其對應的字典中的value +1(也稱為計數器). 最後, 我們會檢查所有項對的計數結果,並且找出那些>=閾值s的項對, 他們就是頻繁項對.

1) A-Priori演算法的第一遍掃描

在第一遍掃描中, 我們將建立兩個表. 第一張表將項的名稱轉換為1到n之間的整數, 從而把String類型這樣的key轉為空間大小更小的int類型.  第二張表將記錄從1~n每個項在所有購物籃中出現的次數. 形式上類似

table 0(name table): {'dolphin': 7019, 'cat': 7020}  //dict形式, 其實也可以做成list形式 [['dolphin', 7019], ['cat', 7020]]

table 1(single-item counter table): {7019: 15, 7020: 18}  //dict形式, 其實也可以做成數組形式A[7019] = 2, A[7020] = 18

2) 第一遍掃描完的處理

第一遍掃描完後, 我們會按照自己設定的閾值s, 對整個table 1再進行一次mapping, 因為我們只關注最後counter值大於等於閾值的項目, 而且不關心其counter值具體多少. 因此, mapping策略是:

對凡是counter<s的, 一律把counter設成0; 對於counter>=s的, 按照次序, 把其設置成1~m的值(總共有m個滿足要求的項)

3) 第二遍掃描

第二遍掃描所做的事有三:

(1) 對每個購物籃, 在table 1中檢查其所有的商品項目, 把所有為頻繁項的留下來建立一個list.

(2) 通過一個雙重循環生成該list中的所有項對.

(3) 再走一次循環, 在新的數據結構table 2(dict或者list)中相應的位置+1. 此時的效果是dicta = {48: {13: 5}, 49: {71, 16}} 或者 lista [ [48, 13, 5],[49, 71, 16], ... ]

注意此時內存塊上存儲的結構: table1(name table), table2(single-item counter table), table3(double-item counter table)

5. 推廣: 任意大小頻繁項集上的A-Priori演算法

我們對上面這個演算法進行推廣.

從任意集合大小k到下一個大小k+1的轉移模式可以這么說:

(1) 對每個購物籃, 在table 1中檢查其所有的商品項目, 把所有為頻繁項的留下來建立一個list.

(2) 我們通過一個k+1重循環來生成該list中的所有(k+1)元組

(3) 對每個k+1元組, 我們生成其的(k+1 choose k)個k元組, 並檢查這些k元組是否都在之前的table k中. (注意到k=1的時候, 這步與(1)是重復的, 可以省略)

(4)再走一次循環, 在新的數據結構table k+1(dict或者list)中相應的位置+1. 此時的效果是k=2, k+1=3, 生成dicta = {48: {13: {19: 4}}, 49: {71: {51: 10}},  ... } 或者 生成lista [ [48, 13, 19, 4],[49, 71, 51, 10], ... ]

注意, 在進入下一次掃描前, 我們還需要額外把counter中值小於s的元組的計數值都記為0.

模式總體是:C1 過濾後 L1 計數後 C2 置零後 C2' 過濾後 L2 計數後 C3 置零後 C3' ......

END.

生成的商品種類為set形式:轉成list形式

第一張表:把項名稱轉換為1~n的整數:

至於數數,大神說,你就用collections.Counter就好:哈?

哈哈,可愛的wyy,開始分析吧~嚕嚕嚕啦啦啦~嚕啦嚕啦嚕~

生成全零矩陣:

換成zeros:

統計每一列的和,即每種商品的購買總數:

每一行列:

第一行:

建立一個新的只含有頻繁一項集的購物籃矩陣:

頻繁二項集:

❸ 數據挖掘- 關聯分析演算法

關聯分析,顧名思義就是找出哪幾項之間是有關聯關系的,舉個例子:

以上是五個購物記錄,從中我們可以發現,購買了尿布的人其中有3個購買了啤酒,那麼久我們可以推測,尿布和啤酒之間有較強的關聯關系,盡管他們之間看起來並沒有什麼聯系,也就是能得到規則:

因為購物分析能較好地描述關聯分析,所以又被叫做 購物籃分析
為了較好的描述這個分析的各種名詞,我們把上面的表格重新設計一下:

把每一個購物訂單中,涉及到的商品都變成1,沒涉及到的變成0,也就是將各個商品的購買記錄 二元化
當然肯定也有多個分類的情況。

那麼麵包,牛奶這些就叫數據集的 ,而他們組合起來的子集就叫做 項集 。可以為空,空集是不包含任何項的項集,如果一個項集包含k個子項,就叫做k-項集。
訂單12345叫做 事務 ,某個項集在所有事務中出現多少次,叫做項集的 支持度計數

在上面的表格中,項集{啤酒、尿布、牛奶}的支持度計數為2,因為有兩個事務(3、4)包含這一項集。

支持度 置信度 來衡量,假定存在規則 ,其中X和Y是 不相交 的項集,則支持度為:
其中N是數據集中的事務個數,相當於表示該規則在數據集中出現了多少次。
置信度為:

置信度的意思就是,在出現X的情況下,有多少次同時出現了Y,代表這個關聯規則的頻繁程度。

注意置信度的分母是 ,因此這個評價可能會存在一定的問題。

關聯分析的核心目標就是找出支持度大於等於某個閾值, 同時 置信度大於等於某個閾值的所有規則,這兩個閾值記為 和 。

為了更有效率的完成這個過程,通常把關聯規則演算法分為兩步:

可以看出來,櫻備首先要求得頻繁項集,這步驟的開銷很大,但是只需要考慮支持度就可以了,第二步只考慮置信度就可以了。

下面就可以分兩步來解析演算法:

首先我們可以把項集聯想成一個樹形結構,每層代表著不同的k-項集,依層遞增,非葉子節點來自於他的幾個父節點的並集,如圖:

我們肯定不能通過傳統的方式,遍歷這些節點,算出支持度,然後篩選掉不滿足最小支持度的那些,這樣開銷太大,因此我們引入先驗原理,來輔助剪枝。

這個原理不難想像,假如一個項集{a,b}是非頻繁項集,那麼{a,b,c}肯定也是,因為ab是,在{a,b,c}中與之關聯的c必須在ab出現之後才存在,因此他的支持度肯定不會大於{a,b}。

頻繁的就是支持度大於等於最小支持度的項集,非頻繁就是小於的。

我們可以利用這一定理,把非頻繁項集的超集一並從樹中減去,這樣就能大大的降低計算次數,如圖:

虛線圈上的,就是在{a,b}確定是非頻繁項集之後,剪掉的超集,這些是不用計算的。

根據這個原理,可以說一下Apriori演算法。

根據上面說的先驗原理,Apriori演算法先從項集寬度最低的1開始,遍歷所有的項集支持度,找出頻繁項集(因為第一層在找出支持度之前),之後根據先驗原理,挑選任意兩個頻繁項集組成2-頻繁項集(很簡單,如果挑非頻繁的,那組成的項集就不是頻繁項集了),再用2-項集挑選3-項集,直到挑選不出更高層次的項集為止,把這些項集作為 候選項集 ,如圖:

圖中1-項集中,啤酒,麵包,尿布,牛奶的支持度大於等於3(設 為3),則由他們組成2-項集,繼續篩選滿足支持度不小於3的項集,再由2-項集生成3-項集,這就是 Apriori 演算法篩選頻繁項集的基本步驟。總結如下:

上面提到了用k-1項集生成k-項脊稿毀集,那麼如何才能最有效率的產生k-項集呢,這里用了 的方法,也就是找到一對(k-1)-項集,當他們的前(k-2)項都相同時,進行合並,合並之後的結果就是{ },因為前k-2項是相同的。
舉個例子:

上面說了如何產生候選項集,接下來就是如何更敬塵有效率的確定支持度計數了,同樣,如果遍歷一個一個查的話效率是很低的,我們可以用枚舉的方法遍歷每個事務包含的項集,以查找3-項集為例,如圖:

因為我們要查3-項集,因此樹狀結構就分到3-項集為止。
因為3-項集的開頭第一個項肯定在1,2,3之間,我們就設定這三個數為三個分支,無論到哪個節點,都嚴格按照這個來分(1在左,2在中,3在右),在下面的層次中如何碰到比123更大的,則再向右分,就可以得到圖中的關於事務t的所有3-項集。

有了所有項集的列表,我們可以用候選項集去匹配這些項集,從而看t中是否包含候選項集,如果包含,則支持度+1。

可以使用Hash樹來進行匹配,從而實現支持度計數。
如下圖,就是一個Hash樹的例子,每個內部節點都使用Hash函數 來確定應當沿著當前節點的哪個分支向下,所以1,4,7就到了同一分支。

我們對於單個事務,可以遍歷Hash樹,設事務為t,則保證所有包含屬於事務t的候選3-項集的葉節點至少訪問一次。

由於我們之前已經通過樹的方式枚舉出了t中所有的3-項集,那麼我們跟這個Hash一走分支,找到對應3-項集的就+1支持度,即可算出每個候選項集的支持度。

提取規則相應的比較簡單,設有 頻繁項集Y ,我們忽略前件為空和後件為空的規則,每個頻繁項集能產生 個關聯規則,提取方法就是將Y劃分為兩個 非空 的子集X和Y-X,使得 滿足 置信度閾值 也就是最小置信度。

同樣的,提取規則也有一個原理:

參考頻繁項集的尋找過程,我們可以利用樹形結構對規則進行剪枝。
樹的每層對應規則後件中的項數,如圖:

假設規則{ } { }不滿足置信度閾值的要求,那麼可以丟棄後件包含{a}的所有規則,如上圖所示。

至此我們經歷了尋找頻繁項集和提取規則的過程,基本Apriori演算法就算完成了,不過還有一些需要考慮的細節。

在實際應用過程中,往往頻繁項集產生的數量可能很大,所以很難表示,我們需要尋找一種方法,找到一些有代表性的頻繁項集,以保證其描述性。

通常有如下兩種方法:

如圖:

這種表示很明顯降低了需要表示項集的個數,我們需要別的候選項集,直接取極大頻繁項集的子集就行,任意一個肯定都是。

但是這么做,表示不出他們子集的支持度,所以就需要再遍歷數據集,確定非極大頻繁項集的支持度,不是很方便。

所以我們還可以用閉頻繁項集來表示。

先來看閉項集的概念:

那麼閉頻繁項集的概念就很好理解了:

如圖,我們假設 是40%。

這種做法可以保證支持度和描述性。

之前舉的例子都是二元分類的,要麼1要麼0,下面看多分類的,我們很容易想到可以用獨熱編碼解決這個問題,把所有分類二元化,但是這樣就存在一個問題,有的屬性值可能會不夠頻繁,沒辦法成為頻繁項集。
所以最好是把多分類的項根據實際情況進行分類化,不要針對每個屬性都設置獨熱編碼。

或者將不太頻繁的屬性值合並為一個稱作其他的類別。

所以面對多分類屬性,我們要做的就是:
獨熱編碼二元化-針對這些值進行一定的合並,或者分類或者並為其他 - 刪除冗餘的項 - 避免包含多個來自同一屬性的項的候選集(例如{ },被寫到了一個候選集中,但是實際上這種情況不可能發生,由於獨熱編碼進行的二元化而產生了這種情況,需要避免。)

我們也會遇到一些連續屬性,可以通過以下幾種方式處理:

這種做法有一個問題就是分類的效果取決於區間的個數和跨度,如果取不好很難得到理想的結果。

如果要驗證統計出的值是否具有統計意義,可以參考假設檢驗中針對不同比較的不同公式,這里不再舉例。

把mini-Apriori演算法中的支持度代入到Apriori演算法的支持度中即可。

舉個例子:

想要衡量模型的好與壞,肯定要有一個評估指標,我們可以根據業務實際去評價,這是主管評價,叫做 主觀興趣度度量 ,這個顯然要結合業務,所以我們要看看一些客觀指標。

指標的評價往往依賴於相依表,這個相依表有點類似於混淆矩陣:

其中A,B代表在事務中出現,!A,!B代表沒有在事務中出現,空列空行例如 代表A的支持度計數, 表示包含B但是不包含A的事務的個數。

最基本的就是置信度和支持度了,但是這兩種指標都很難做到客觀評價模型,會受到多種因素的影響。

我們可以用 興趣因子 來衡量模型:
首先我們引入 提升度 的概念,它用於計算規則置信度和 規則後件 中項集的支持度之間的比率,

對於二元變數,提升度等價於另一種稱作興趣因子的客觀度量,定義為:
其中N是事務個數。
如果

但是興趣因子有一定局限性,看上圖,{p,q}和{r,s}的興趣因子分別為1.02和4.08,雖然p和q同時出現在88%的文檔中,但是他們的興趣因子接近於1,表明他們相互獨立,另一方面,{r,s}的興趣因子閉{p,q}的高,但是r和s很少出現在一個文檔中,這種情況下,置信度要比興趣因子更可信,置信度表明p和q之間的聯系94.6%遠高於r和s之間。

另外還可以引入 相關系數 ,邏輯類似於向量的相關系數:

相關度的值從-1到1,如果變數相互獨立,則Φ=0。

他的局限性在於在食物中把同時出現和同時不出現視為同等重要,這往往不符合實際規律,同時對於傾斜的變數很難度量。

IS度量 可以用於處理非對稱二元變數,定義如下:
IS數學上等價於二元變數的餘弦度量。
但是IS取決於A和B的支持度,所以存在與置信度度量類似的問題——即使是不相關或者負相關的模式,度量值也可能相當大。

支持度,全置信度,可以應用於較大的項集,興趣因子,IS、PS、Jaccard系數等使用多維相依表中的頻率,可以擴展到多個變數。

針對大多數項具有較低或中等的頻率,但是少數項具有很高頻率的數據集。

交叉支持模式是一個項集 ,他的支持度比率是:
小於用戶指定的閾值 。

需要保證全置信度小於上面的支持度比率,而全置信度是:
其中 .

全置信度能夠確保項集中的項之間是強關聯的,例如,假定一個項集X的全置信度是80%,如果X中的一個項出現在某個事物中,則X中其他的項至少也有80%的幾率屬於同一個事務,這種強關聯模式又稱 超團模式

❹ 推薦演算法之模型協同過濾(1)-關聯規則

關聯規則是數據挖掘中的典型問題之一,又被稱為購物籃分析,這是因為傳統的關聯規則案例大多發生在超市中,例如所謂的啤酒與尿布傳說。事實上,「購物籃」這個詞也揭示了關聯規則挖掘的一個重要特點:以交易記錄為研究對象,每一個購物籃(transaction)就是一條記錄。關聯規則希望挖掘的規則就是:哪些商品會經常在同一個購物籃中出現,其中有沒有因果關系。為了描述這種「經常性」及「因果關系」,分析者定義了幾個指標,基於這些指標來篩選關聯規則,從而得到那些不平凡的規律。

(1)計算支持度
支持度計數:一個項集出現在幾個事務當中,它的支持度計數就是幾。例如{Diaper, Beer}出現在事務 002、003和004中,所以它的支持度計數是3
支持度:支持度計數除於總的事務數。例如上例中總的事務數為4,{Diaper, Beer}的支持度計數為3,所以它的支持度是3÷4=75%,說明有75%的人同時買了Diaper和Beer。

(2)計算置信度
置信度:對於規則{Diaper}→{Beer},{Diaper, Beer}的支持度計數除於{Diaper}的支持度計數,為這個規則的置信度。例如規則{Diaper}→{Beer}的置信度為3÷3=100%。說明買了Diaper的人100%也買了Beer。

一般地,關聯規則被劃分為動態推薦,而協同過濾則更多地被視為靜態推薦。
所謂動態推薦,就是推薦的基礎是且只是當前一次(最近一次)的購買或者點擊。譬如用戶在網站上看了一個啤酒,系統就找到與這個啤酒相關的關聯規則,然後根據這個規則向用戶進行推薦。而靜態推薦則是在對用戶進行了一定分析的基礎上,建立了這個用戶在一定時期內的偏好排序,然後在這段時期內持續地按照這個排序來進行推薦。由此可見,關聯規則與協同過濾的策略思路是完全不同的類型。
事實上,即便在當下很多能夠拿到用戶ID的場景,使用動態的關聯規則推薦仍然是值得考慮的一種方法(尤其是我們經常把很多推薦方法的結果綜合起來做一個混合的推薦),因為這種方法的邏輯思路跟協同過濾有著本質的不同,問題似乎僅僅在於:個人的偏好到底有多穩定,推薦到底是要迎合用戶的長期偏好還是用戶的當下需求。

挖掘關聯規則主要有Apriori演算法和FP-Growth演算法。後者解決了前者由於頻繁的掃描數據集造成的效率低下缺點。以下按照Apriori演算法來講解。

step 1: 掃描數據集生成滿足最小支持度的頻繁項集。
step 2: 計算規則的置信度,返回滿足最小置信度的規則。

如下所示,當用戶購買1商品時推薦2、3商品

閱讀全文

與購物籃分析演算法相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:962
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:142
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:732
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:484
h3c光纖全工半全工設置命令 瀏覽:141
公司法pdf下載 瀏覽:381
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163