【干貨】AI機器學習-Apriori算法
在數(shù)據科學的世界中,Apriori算法以其在挖掘關聯(lián)規(guī)則方面的強大能力而聞名。這篇文章將帶你深入探索Apriori算法的精髓,從其基本原理到關鍵術語,再到算法的具體計算過程。
一、什么是Apriori算法
Apriori算法是關聯(lián)規(guī)則挖掘算法,也是最經典的算法。它的進階算法有FpGrowth算法。
Apriori算法是為了發(fā)現(xiàn)事物之間的關聯(lián)關系,比如我們熟知的“猜你喜歡”,當你瀏覽一件商品之后,會推薦你一些相關的商品,從而促進商品銷量。
這么一說,這個算法的原理想必你也能馬上get到了,沒錯,它就是認為物品之間是存在關聯(lián)關系的,當這些物品組合出現(xiàn)越多,那么它的關聯(lián)越強。
比如一個超市在一段時間里一共來了100個客戶,其中有90個客戶都同時買了雞蛋和面條,那么超市銷售就可以認為雞蛋和面條是有強關聯(lián)的,以后就可以把雞蛋和面條放在一處售賣。
二、幾個重點名詞
在深入學習Apriori算法之前,我們先來學習幾個名詞。
以下面的菜市場銷售清單為例:
訂單編號代表交易流水號,商品組合代表一個顧客一次購買的全部商品。根據這個清單,我們引入以下名詞:
- 事務:每一條訂單稱為一個事務。例如,在這個例子中包含了5個事務。
- 項:訂單的每一個物品稱為一個項,例如面條、雞蛋等。
- 項集:包含零個或者多個項的集合叫做項集,例如 {水餃,豬肉}。
- k-項集:包含k個項的項集叫做k-項集。例如 {面條} 叫做1-項集,{面條,雞蛋,韭菜} 叫做3-項集。
- 前件和后件:對于規(guī)則{面條}→{雞蛋},{面條} 叫做前件,{雞蛋} 叫做后件。
三、Apriori的原理
接下來開始敲黑板了,我們要深入學習Apriori算法了。
剛剛我們有說到,我們認為經常一起出現(xiàn)的物品越多,它們之間的關系越強。這種經常一起出現(xiàn)地物品組合被稱為頻繁項集。那么問題就來了:
第一,當數(shù)據量非常大的時候,我們無法憑肉眼找出經常出現(xiàn)在一起的物品,這就催生了關聯(lián)規(guī)則挖掘算法,比如 Apriori、Pre?xSpan、CBA 等。
第二,我們缺乏一個頻繁項集的標準。比如10條記錄,里面A和B同時出現(xiàn)了三次,那么我們能不能說A和B一起構成頻繁項集呢?因此我們需要一個評估頻繁項集的標準。常用的頻繁項集的評估標準有支持度、置信度和提升度三個。
1. 支持度
支持度就是幾個關聯(lián)的數(shù)據在數(shù)據集中出現(xiàn)的次數(shù)占總數(shù)據集的比重。如果我們有兩個想分析關聯(lián)性的數(shù)據X和Y,則對應的支持度為:
比如上面例子中,在5條交易記錄中{面條, 雞蛋}總共出現(xiàn)了3次,所以:
以此類推,如果我們有三個想分析關聯(lián)性的數(shù)據X,Y和Z,則對應的支持度為:
一般來說,支持度高的數(shù)據不一定構成頻繁項集,但是支持度太低的數(shù)據肯定不構成頻繁項集。另外,支持度是針對項集來說的,因此,可以定義一個最小支持度,而只保留滿足最小支持度的項集,起到一個項集過濾的作用。
2. 置信度
置信度體現(xiàn)了一個數(shù)據出現(xiàn)后,另一個數(shù)據出現(xiàn)的概率,或者說數(shù)據的條件概率。如果我們有兩個想分析關聯(lián)性的數(shù) 據X和Y,X對Y的置信度為:
比如上面例子中,面條對雞蛋的置信度=雞蛋和面條同時出現(xiàn)的概率/面條出現(xiàn)的概率,則有:
也可以以此類推到多個數(shù)據的關聯(lián)置信度,比如對于三個數(shù)據X,Y,Z,則Y和Z對于X的置信度為:
3. 提升度
通過對支持度和置信度的解釋,我們應該知道支持度越高的組合出現(xiàn)地肯定越頻繁。置信度更能從條件概率上去確保這種頻繁程度的可信性。
然而,這兩個指標還有一些缺陷:
?持度的缺點在于許多潛在的有意義的模式由于包含?持度小的項而被刪去,置信度的缺點更加微妙,用下面的例子最適于說明:
可以使?表中給出的信息來評估關聯(lián)規(guī)則{面條}→{雞蛋}。猛?看,似乎買面條的?也喜歡買雞蛋,因為該規(guī)則的支持度(15%)和置信度(75%)都相當?shù)母摺?/p>
這個推論也許是可以接受的,但是所有的?中,不管他是否買面條,買雞蛋的?的比例為80%,?買了面條又買雞蛋的人卻只占75%。也就是說,?個人如果買了面條,則他買雞蛋的可能性由80%減到了75%。因此,盡管規(guī)則{面條}→{雞蛋}有很高的置信度,但是它卻是?個誤導。所以說,置信度的缺陷在于該度量忽略了規(guī)則后件中項集的?持度。
為解決這個問題,我們引入另一個度量指標:提升度(lift)
提升度大于1則是有效的強關聯(lián)規(guī)則, 提升度小于等于1則是無效的強關聯(lián)規(guī)則 。
明確了上面三個指標之后,我們還需要引入一個原理:
如果一個項集是頻繁的,則它的所有子集一定也是頻繁的。
這很容易理解,例如對于我們設定一個組合出現(xiàn)了3次以上,那么它的子集出現(xiàn)地次數(shù)肯定更多:
然后我們對上面的原理求反可得:
當一個子集不是頻繁項集,則它的超集也不是頻繁項集。
這兩條原理的用處是什么呢?
它可以減少我們去檢索的范圍,比如我知道了0和1的組合不頻繁,那么我就不需要再去找含0和1更多項的組合了。
四、Apriori的計算過程
關聯(lián)分析的目的包括兩項:發(fā)現(xiàn)頻繁項集和發(fā)現(xiàn)關聯(lián)規(guī)則。
首先需要找到頻繁項集,然后才能獲得關聯(lián)規(guī)則。
Apriori 算法過程
- C1,C2,…,Ck分別表示1-項集,2-項集,…,k-項集;
- L1,L2,…,Lk分別表示有k個數(shù)據項的頻繁項集。
- Scan表示數(shù)據集掃描函數(shù)。該函數(shù)起到的作用是支持度過濾,滿足最小支持度的項集才留下,不滿足最小支持度的項集直接舍掉。
那么我們可以將上圖所描述的計算過程總結為:
(1)掃描全部數(shù)據,產生候選1-項集的集合C1;
(2)根據最小支持度,由候選1-項集的集合C1產生頻繁1-項集的集合L;
(3)對k>1,重復執(zhí)行步驟(4)、(5)、(6);
(4)由Lk執(zhí)行連接和剪枝操作,產生候選(k+1)-項集的集合C(k+1)。
(5)根據最小支持度,由候選(k+1)-項集的集合C(k+1),產生頻繁(k+1)-項集的集合L(k+1);
(6)若L≠Ф,則k=k+1,跳往步驟(4);否則往下執(zhí)行;
(7)根據最小置信度,由頻繁項集產生強關聯(lián)規(guī)則,程序結束。
上述就是對于Apriori算法的全部解析。當然了,對于產品經理來說,我們只需要了解算法原理和它的應用即可。
另外,這套算法的實現(xiàn)是開源的,下次遇到開發(fā)說實現(xiàn)不了就拿這篇文章狠狠錘他哦。
作者:阿宅的產品筆記;公眾號:產品宅
本文由 @阿宅的產品筆記 原創(chuàng)發(fā)布于人人都是產品經理。未經許可,禁止轉載。
題圖來自Unsplash,基于CC0協(xié)議。
該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務
- 目前還沒評論,等你發(fā)揮!