【機器學習】【無監督學習】【算法01-理論1】Apiori算法-篩選頻繁集

Apriori算法

引用1
Apriori算法是一種用於進行關聯分析的算法,在Agrawal 等人提出的1993最初提出的動機是針對購物籃分析問題提出的,其目的是爲了發現交易數據庫中不同商品之間的聯繫規則。
接着,有更多的研究人員加入了關聯規則的發掘研究中來,今天先暫時介紹最經典的Apriori算法

1 引入

  1. 關聯分析:關聯分析指的是在大規模數據集和中尋找關係的任務。一般來說,數據集合中的關係分爲兩種:頻繁項集、關聯規則

    • 頻繁項集:指的是經常一起出現的iterms的集合,可以認爲是統計學上的頻次,通常是以一條記錄作爲基準進行統計工作。
    • 關聯規則:指的是兩種iterms也許會出現很強的關聯性。例如A發生一定伴隨B發生,可以理解爲統計中的伴隨發生的事件。

用一個實例來理解以上兩個概念:
在這裏插入圖片描述
可以很清楚的看到,{豆奶}是一個頻繁集。它出現在了每一條記錄當中,而{尿布,葡萄酒}則是一個支持度爲3/5的頻繁集合。支持度的概念接下來會進行講解,這裏只要理解,頻繁項集是數據集合中記錄的一個子集,而根據個人對於‘頻繁’的定義,會有不同的集合被定義爲頻繁項集。

剛剛提到,{尿布,葡萄酒}則是一個支持度爲3/5的頻繁集合,如果將其用關聯規則的定義來說,則可以說,這個數據集合中存在一條尿布->葡萄酒的關聯規則。即:如果有人買了尿布,那麼也有可能她會購買葡萄酒。即一個事件的發生,伴隨另外一件事情的發生。


2 如何定義“頻繁”?“關聯”?它們之間存在關係嗎?

首先,我們要清楚,頻繁和關聯都是一個相對的概念。10天出現7天雨天,我認爲是頻繁,但有人認爲10天中出現5天就已經非常頻繁了(寫文章時窗外正在下雨給筆者靈感了 😃 ,而關聯也是同理。每次醒來睜開眼睛就拿手機,醒來+拿手機這是一個關聯事件,但我認爲每天都發現纔算關聯,只要有一天不發生就不算,但是也許你覺得大部分時間成立就算關聯。

因此,我們需要一個可以量化的標準來定義兩個相對的概念:

  1. 支持度(support):數據集中包含該項集的記錄所佔的比例,例如前文提到的集合{尿布,葡萄酒},它出現在了三條記錄中,一共有5條記錄,那麼它的支持度爲3/5.其實對應的計算公式即爲項集{豆奶}在整個集合記錄中的頻次(概率):
    P({尿})={尿}/=3/5P( \{尿布,葡萄酒 \})=有\{尿布,葡萄酒\}出現的記錄次數/總記錄條數=3/5
    對於支持度大與規定支持度的項集,就定義爲頻繁項集。

  2. 置信度(confidence):表示兩個事件伴隨發生的概率,其實就是概率論中所學的條件概率。對於A—>B這條規則來說,置信度的計算爲:
    P(BA)=P(AB)P(A)P(B|A)={P(A \cap B ) \over P(A)}

大家不妨思考一下,置信度和支持度是否存在一定的聯繫?事實上,對於項集{尿布,葡萄酒}來說,它的支持度就是:
P(尿)P(尿布\cap葡萄酒)
即尿布和葡萄酒同時出現的概率,也因此,如果需要計算一條規則A->B的置信度,可以通過項集{A},項集{B},項集{A、B}的支持度來進行計算。


3 Apriori算法原理

引用2
Apriori原理是說如果某個項集是頻繁的,那麼它的所有子集也是頻繁的
反之,如果一個項集是非頻繁集,那麼 它的所有超集也是非頻繁的

弄清楚關聯分析中的兩個概念後,就可以接着來進一步的瞭解Apriori算法,Apriori在英文中是指的先驗的。在概率中,學習過先驗概率,指的是根據以往經驗和分析得到的概率。即在這一算法中指的是我們是根據數據庫中的以有數據,分析得到頻繁項集和關聯規則(筆者自行理解,未經過權威認證,若有不對歡迎指正

3.1 頻繁項集獲取

上文提到,我們若是需要獲取一個數據集合中的關聯規則,即一種伴隨關係。我們必須先獲得其所在的頻繁項集,因此,我們先來討論如何獲取頻繁項集:

不妨假設一個情景:對於4種商品:0,1,2,3.客戶隨機的購買的條件下,應該是這四種商品的隨機組合。(聲明:不關心購買重複類商品,例如0,0,或者四件商品1)只關心買一種或者多種的情況。那麼應該有如下的購買種類方式:
在這裏插入圖片描述
思考:如果數據庫中,每種購買情況都存在一次,那麼一共有15條記錄。這時,我們想要計算{1}出現了幾次,那麼需要對數據庫進行遍歷搜索15次,後計數。

隨着商品數量的增多,查找一個項集,並計算支持度。 所耗費的時間也就越多,如果需要在一個超市的系統中應用此關聯算法,計算量將會變得十分龐大。因此,有學者提出Apriori算法來試圖減少這一查找的過程。也就是本節開頭的引用2部分:

如何理解這一算法?
對應下圖我們討論:
在這裏插入圖片描述
`如果,項集{2,3}是非頻繁項集,那麼,根據Apriori算法,{0,2,3}、{1,2,3}和{0,1,2,3}也是非頻繁的。因爲這三個集合,都是項集{2.3}的超集。這樣,就可以在計算的過程中,直接刪去那些不是頻繁集的和它的超集,就可以大大縮短計算時間。

3.1.1 原理的量化解釋

俗話說的話,知其然,也要知其所以然。爲什麼非頻繁的項集,它的超集就一定不是頻繁集呢?
不妨從一個例子來看:

假設有一項集{A,B}其支持度爲0.4,其超集爲{A,B,C},規定大於0.5的項集爲頻繁項集,即標準支持度s=0.5
有:
P(AB)=Support({A,B})=0.4<sP(A\cap B)=Support(\{A,B\})=0.4<s
即項集{A,B}非頻繁,則一定有:
P(ABC)=Support({A,B,C})<0.4<sP(A\cap B \cap C)=Support(\{A,B,C\})<0.4<s
成立,也因此,對於任意一個非頻繁集,其超集都的支持度都不會大於標準支持度,也不會是頻繁集。

因此,接下來的一章,我們會按照Apriori算法的原理,對一個數據集合中的頻繁項集進行篩選。並使用代碼實現。
【機器學習】【無監督學習】【算法01-代碼實現】Apiori算法-篩選頻繁集

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章