【干貨】AI機器學習-Apriori算法

0 評論 867 瀏覽 3 收藏 11 分鐘

在數(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é)議。

該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!