數(shù)據(jù)挖掘十大經(jīng)典算法之Apriori

一、介紹

Apriori算法是一種最有影響的挖掘布爾關(guān)聯(lián)規(guī)則頻繁項(xiàng)集的算法,它用來找出數(shù)據(jù)值中頻繁出現(xiàn)的數(shù)據(jù)集合,找出這些集合的模式有助于我們做一些決策。比如在常見的超市購物數(shù)據(jù)集,或者電商的網(wǎng)購數(shù)據(jù)集中,如果我們找到了頻繁出現(xiàn)的數(shù)據(jù)集,那么對于超市,我們可以優(yōu)化產(chǎn)品的位置擺放,對于電商,我們可以優(yōu)化商品所在的倉庫位置,達(dá)到節(jié)約成本,增加經(jīng)濟(jì)效益的目的。

二、Apriori算法思想

1. 基本概念

頻繁項(xiàng)集:經(jīng)常出現(xiàn)在一塊的物品的集合

關(guān)聯(lián)規(guī)則:暗示兩種物品之間可能存在很強(qiáng)的關(guān)系

支持度(Support):一個(gè)項(xiàng)集的支持度被定義為數(shù)據(jù)集中包含該項(xiàng)集的記錄所占的比例。公式為:支持度 = (包含物品A的記錄數(shù)量) / (總的記錄數(shù)量)。

置信度(Confidence):指如果購買物品A,有較大可能購買物品B。公式為:置信度( A -> B) = (包含物品A和B的記錄數(shù)量) / (包含 A 的記錄數(shù)量)

提升度(Lift):提升度指當(dāng)銷售一個(gè)物品時(shí),另一個(gè)物品銷售率會(huì)增加多少。公式為:提升度( A -> B) = 置信度( A -> B) / (支持度 A)。

2. Apriori算法的基本思想

關(guān)聯(lián)規(guī)則挖掘的步驟分兩步:1.找所有的頻繁項(xiàng)集;2.根據(jù)頻繁項(xiàng)集生產(chǎn)強(qiáng)關(guān)聯(lián)規(guī)則。

頻繁項(xiàng)集產(chǎn)生:其目標(biāo)是發(fā)現(xiàn)滿足最小支持度閾值的所有項(xiàng)集,這些項(xiàng)集稱作頻繁項(xiàng)集(frequent itemset)。

規(guī)則的產(chǎn)生:其目標(biāo)是從上一步發(fā)現(xiàn)的頻繁項(xiàng)集中提取所有高置信度的規(guī)則,這些規(guī)則稱作強(qiáng)規(guī)則(strong rule)。

既然都知道了支持度的計(jì)算公式,那直接遍歷所有組合計(jì)算它們的支持度不就可以了嗎?是的,沒錯(cuò)。確實(shí)可以通過遍歷所有組合就能找出所有頻繁項(xiàng)集。但問題是遍歷所有組合花的時(shí)間太多,效率太低,假設(shè)有N個(gè)物品,那么一共需要計(jì)算2^N-1次。每增加一個(gè)物品,數(shù)量級是成指數(shù)增長。

通常,頻繁項(xiàng)集產(chǎn)生所需的計(jì)算開銷遠(yuǎn)大于產(chǎn)生規(guī)則所需的計(jì)算開銷。

Apriori就是一種找出頻繁項(xiàng)集的高效算法。

Apriori定律1:如果一個(gè)集合是頻繁項(xiàng)集,則它的所有子集都是頻繁項(xiàng)集。

Apriori定律2:如果一個(gè)集合不是頻繁項(xiàng)集,則它的所有超集都不是頻繁項(xiàng)集。

Apriori算法的核心是基于兩階段頻集思想的遞推算法。該關(guān)聯(lián)規(guī)則在分類上屬于單維、單層、布爾關(guān)聯(lián)規(guī)則。

在Apriori算法中,尋找最大項(xiàng)目集(頻繁項(xiàng)集)的基本思想是:算法需要對數(shù)據(jù)集進(jìn)行多步處理。第一步,簡單統(tǒng)計(jì)所有含一個(gè)元素項(xiàng)目集出現(xiàn)的頻數(shù),并找出那些不小于最小支持度的項(xiàng)目集,即一維最大項(xiàng)目集。從第二步開始循環(huán)處理直到再?zèng)]有最大項(xiàng)目集生成。循環(huán)過程是:第k步中,根據(jù)第k-1步生成的(k-1)維最大項(xiàng)目集產(chǎn)生k維侯選項(xiàng)目集,然后對數(shù)據(jù)庫進(jìn)行搜索,得到侯選項(xiàng)目集的項(xiàng)集支持度,與最小支持度進(jìn)行比較,從而找到k維最大項(xiàng)目集。

算法舉例:https://www.cnblogs.com/pinard/p/6293298.html

3.?Apriori算法流程總結(jié)

輸入:數(shù)據(jù)集合D,支持度閾值α

輸出:最大的頻繁k項(xiàng)集

  1)掃描整個(gè)數(shù)據(jù)集,得到所有出現(xiàn)過的數(shù)據(jù),作為候選頻繁1項(xiàng)集。k=1,頻繁0項(xiàng)集為空集。

  2)挖掘頻繁k項(xiàng)集

    a) 掃描數(shù)據(jù)計(jì)算候選頻繁k項(xiàng)集的支持度

    b) 去除候選頻繁k項(xiàng)集中支持度低于閾值的數(shù)據(jù)集,得到頻繁k項(xiàng)集。如果得到的頻繁k項(xiàng)集為空,則直接返回頻繁k-1項(xiàng)集的集合作為算法結(jié)果,算法結(jié)束。如果得到的頻繁k項(xiàng)集只有一項(xiàng),則直接返回頻繁k項(xiàng)集的集合作為算法結(jié)果,算法結(jié)束。

    c) 基于頻繁k項(xiàng)集,連接生成候選頻繁k+1項(xiàng)集。

  3) 令k=k+1,轉(zhuǎn)入步驟2。

    從算法的步驟可以看出,Aprior算法每輪迭代都要掃描數(shù)據(jù)集,因此在數(shù)據(jù)集很大,數(shù)據(jù)種類很多的時(shí)候,算法效率很低。

四、Apriori算法的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

簡單、易理解、數(shù)據(jù)要求低

缺點(diǎn):

(1)在每一步產(chǎn)生侯選項(xiàng)目集時(shí)循環(huán)產(chǎn)生的組合過多,沒有排除不應(yīng)該參與組合的元素;

(2)每次計(jì)算項(xiàng)集的支持度時(shí),都對數(shù)據(jù)庫D中的全部記錄進(jìn)行了一遍掃描比較,如果是一個(gè)大型的數(shù)據(jù)庫的話,這種掃描比較會(huì)大大增加計(jì)算機(jī)系統(tǒng)的I/O開銷。而這種代價(jià)是隨著數(shù)據(jù)庫的記錄的增加呈現(xiàn)出幾何級數(shù)的增加。因此人們開始尋求更好性能的算法,如F-P算法。

五、Apriori算法的參數(shù)說明

from apyori import apriori

apriori(df, min_support=0.5,

? ? ? ? ? ? use_colnames=False,

? ? ? ? ? ? max_len=None)

參數(shù)說明

df:數(shù)據(jù)集。

min_support:給定的最小支持度。

use_colnames:默認(rèn)False,則返回的物品組合用編號顯示,為True的話直接顯示物品名稱。

max_len:最大物品組合數(shù),默認(rèn)是None,不做限制。如果只需要計(jì)算兩個(gè)物品組合的話,便將這個(gè)值設(shè)置為2。

參考:

https://blog.csdn.net/u011067360/article/details/24368085

https://www.cnblogs.com/listenfwind/p/10280392.html

https://www.cnblogs.com/pinard/p/6293298.html

https://blog.csdn.net/qq_36523839/article/details/82191677

http://www.itdecent.cn/p/ff82fb98855d

https://blog.csdn.net/huihuisd/article/details/86489810?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容