Apriori算法通俗讲解
一、Apriori算法簡介
? ? ? ?Apriori算法用于解決大規模數據集的關聯分析問題。關聯分析(association analysis)或關聯規則學習(association rule learning)是從大規模數據集中尋找物品間的隱含關系。但是,尋找物品的不同組合是一項十分耗時的任務,計算代價高,蠻力搜索并不能解決問題,所以需要更智能的方法在合理時間范圍內找到頻繁項集。Apriori算法就是解決這個問題的。
二、關聯分析
? ? ? ?關聯分析是一種在大規模數據集中尋找有趣關系的任務。這些關系可以有兩種形式:(1)頻繁項集,(2)關聯規則。
(1)頻繁項集
頻繁項集:是經常出現在一塊的物品的集合。
量化方法:支持度(support)。支持度是數據集中包含該項集的記錄所占的比例。例如數據集[[1, 3, 4], [2, 3, 5], [1, 2, 3], [2, 5]]中,項集{2}的支持度為3/4,項集{2,3}的支持度為1/2。
(2)關聯規則
關聯規則:暗示兩種物品之間可能存在很強的關系。
量化計算:可信度或置信度(confidence)。可信度是針對一條關聯規則(如{2}-->{3})來定義的。{2}-->{3}這條規則的可信度為“支持度{2,3}/支持度{2}”,即2/3,意味著包含{2}的所有記錄中2/3符合規則包含{2,3}。
三、Apriori原理
? ? ? ?無論頻繁項集還是關聯規則都需要計算支持度。如果數據量小,計算一個項集的支持度可以針對每個項集掃描所有數據,然后統計該項集出現的總數除以總的交易記錄數,就可以得到支持度。但是對于N個物品的數據集共有2N-1中項集組合,即使4個物品也需要遍歷數據集15次,100種物品有中可能的項集組合,對現代計算機而言,需要很長的時間才能完成運算,何況事實上,商店都會有上百上千種商品。
? ? ? ?Apriori算法可以降低計算時間,減少可能感興趣的項集。
? ? ? ?Apriori原理:如果某個項集是頻繁的,那么它的所有子集也是頻繁的。如若{2,3}是頻繁的,那么{0}、{1}也一定是頻繁的。反過來同樣,如果一個項集是非頻繁集,那么它的所有超集也是非頻繁的。如若{2,3}是非頻繁的,那么{0,2,3}、{1,2,3}、{0,1,2,3}也是非頻繁項。所以如果計算出{2,3}的支持度是非頻繁的,那么{0,2,3}、{1,2,3}、{0,1,2,3}的支持度就不用計算了。
Apriori原理可以避免項集數目的指數增長,從而在合理時間內計算出頻繁項集。
四、Apriori算法發現頻繁項集
Apriori算法流程:
1)首先,基于數據集生成個數為1的項集的列表C1;
2)根據頻繁項集函數,計算C1中各元素的支持度,去掉不滿足最小支持度的元素,生成滿足最小支持度的頻繁項集列表L1;
3)根據創建候選項集函數,基于L1生成k=2的候選項集列表C2;
4)根據頻繁項集函數,基于C2生成滿足最小支持度的k=2的頻繁項集列表L2;
5)增加k的值,重復3)、4)生成Lk,直到Lk為空時,返回L列表,L包含L1、L2、L3...
? ? ? ?以下是創建候選項集函數及解釋。
? ? ? ?至于為什么是比較前k-2個元素呢,一般初始項集個數為1,由k=1的項集生成k=2的項集。所以k的初始值也為2。如果要生成個數為k的項集,則比較前k-2項,如果相等合并,正好比較的項各剩下1個不相等的元素,這樣合并后個數就為k-2+1+1=k項。(以下是舉例推導過程,忽略C2經過濾后生成L2,直接將C2視為L2,相當于支持度為0)
? ? ? ?比較前k-2個元素,可以減少遍歷列表的次數。比如想利用{0,1}、{0,2}、{1,2}來創建三元素項集,如果將每兩個集合合并,就會得到{0,1,2}、{0,1,2}、{0,1,2}。同樣的結果結合會重復3次,還需要處理以得到非重復結果。現在只比較第k-2=1個元素,第1個元素相同才合并集合,得到{0,1,2},只有一次操作,這樣就不需要遍歷列表來尋找非重復值。
五、從頻繁項集中挖掘關聯規則
? ? ? ?首先從一個頻繁項集開始,接著創建一個規則列表,其中規則右部只包含一個元素,然后對這些規則進行測試。接下來合并所有剩余規則來創建一個新的規則列表,其中規則右部包含兩個元素。這種方法也被稱作分級法。【待續】
總結
以上是生活随笔為你收集整理的Apriori算法通俗讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用opencv和python读取医学图片
- 下一篇: android: 禁止多点触控