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