关联规则挖掘算法_数据挖掘 | 关联规则分析
1 Introduction
1.1 Problem
頻繁模式是頻繁出現在數據集中的模式,對于數據分類、聚類、和其他數據挖掘任務有極大的幫助,頻繁模式的挖掘成為了一項重要的數據挖掘任務和數據挖掘關注的主題。本次實驗應用不同的頻繁模式挖掘的算法(Apriori, FP-Growth, Dummy)對于購物數據以及用戶計算機使用數據進行挖掘,以期發現其中有趣的關聯規則。
1.2 Dataset
本次實驗有兩個數據集。第一個數據集為某雜貨店一個月內的交易記錄,每一行為一條交易內容,總共包含了9835條記錄和169件商品;第二個數據集為在UNIX系統上的9個命令行集合,其中僅保留了命令名、信號、元字符這三項,在會話的首尾分別插入SOF和EOF作為標記,數據已按照時間和令牌順序拼接,不含時間戳。
2 Methods
2.0 Basic Concepts
數據挖掘任務中頻繁模式可以用關聯規則的形式表示,
,規則的支持度( ?)和置信度(? ),反映所發現規則的有用性和確定性。項的集合稱為項集,包含k個項的集合稱為k-項集,如果項集?相對支持度滿足預定義的最小支持度閾值,則?是頻繁項集。?
關聯規則的挖掘分為以下兩步
(1)找出所有的頻繁項集:每個出現次數至少為最小支持度計數(?
)(2)由頻繁項集產生強關聯規則:必須滿足最小支持度和最小置信度的規則
2.1 Dummy Algorithm
輸入:事務集T,最小支持度min_sup
輸出:所有頻繁項集?
Dummy算法即為暴力搜索算法,不考慮任何其他情況下,總能找到問題的解答,但是消耗代價較大,假設事務集長度為n,其中最長事務長度為m,考慮平均時間復雜度,為
?,由于事務集中事務長度通常長度遠小于不同事務元素總數,所以這種算法比起在總的空間內搜索較優。2.2 Apriori Algorithm
輸入:事務集T,最小支持度min_sup
輸出:所有頻繁項集?
Apriori算法采用逐層搜索的迭代方法,其中k項集用于探索(k+1)項集。首先,通過掃描數據庫,累計每個項的計數,并收集滿足最小支持度的項,找出頻繁1項集的集合。該集合記為
?,然后,使用? 找出頻繁2項集的集合? ,使用? 找出 ?,直到不能找到頻繁k項集。先驗性質頻繁項集的所有非空子集也一定是頻繁的用于提高頻繁項集逐層產生的效率。2.3 FP-Growth Algorithm
輸入:D:事務數據庫 min_sup:最小支持度閾值
輸出:頻繁模式的完全集
(a)掃描事務數據庫D一次,收集頻繁項的集合F和它們的支持度計數。對F按支持度計數降序排序,結果為頻繁項列表L。
(b)創建FP樹的根結點,以"null"標記。對于D中每個事務Trans,執行:
選擇Trans中的頻繁項,并將L中的次序排序,。設Trans排序后的頻繁項列數為 ?,其中 ?是第一個元素,而? 是剩余元素的列表。調用? 。該過程執行情況如下。如果T有子女N使得 ?,則N的計數增加1;否則,創建一個新結點N,將其計數設置為1,鏈接到它的父結點T,并且通過結點鏈結構將其鏈接到具有相同?的結點 。如果?非空,則遞歸地調用?
procedure ?
(1)if ? 包含單個路徑? then:
(2) for 路徑?中結點的每個組合(記作?):
(3) 產生模式 ?,其支持度計數 ?等于?中結點的最小支持度計數
(4)else for ? 的頭表中的每個 ?:
(5) 產生一個模式? ,其支持度計數 ?
(6) 構造?的條件模式基,然后構造? 的條件FP樹?
(7) if ? then:
(8) 調用?
FP-growth方法將發現長頻繁模式的問題轉換成在較小的條件數據庫中遞歸地搜索一些較短模式,然后連接后綴。它使用最不頻繁的項作后綴,提供了較好的選擇性。該方法顯著地降低了搜索開銷。
3 Experience
對于本次實驗的兩個數據集,分別采用了三種方法多種不同指標進行評測。對于雜貨店商品銷售數據集,有9835條記錄,將所有的事務存儲成事務集列表后,調用暴力解法、Apriori方法、FP-growth方法,并且設置最小支持度為0.01,最小置信度為0.5,能夠挖掘適合數量的頻繁項集從而生成強關聯規則(最小支持度設置為0.05以上最小置信度難以設置以挖掘強關聯規則)。對于用戶UNIX系統的命令行記錄,按照?和?切分為單個事務段,整體形成一個事務集列表,UNIX0和UNIX1中的數據為同一個用戶記錄,有1082條事務段,對其進行設置最小支持度為0.3,最小置信度為0.9,挖掘該用戶的行為記錄;對于整體8位用戶,形成事務集列表后有11113條事務段,設置最小支持度為0.2,最小置信度為0.8.
實驗條件為Windows 10系統,python3.8,實驗所用到主要模塊為mlxtend, pyfpgrowth。實驗中作為baseline的暴力算法自行完成,Apriori算法和FP-growth算法分別調用了mlxtend模塊中的apriori方法和pyfpgrowth中的方法。
4 Result
以下為分別對貨品銷售數據集、單個用戶UNIX命令行記錄、8位用戶UNIX命令行記錄進行挖掘其中的頻繁項集和強關聯規則所得到的結果,并對其進行可視化分析。
?圖1 貨物銷售記錄頻繁項(min_sup=0.01)前20條
?
?
從結果上可以看出購買whole milk的人最多,其后是other vegetables和rollsbuns,從強關聯規則上可以看出,大部分人在購買了其他商品后,會選擇購買whole milk,另有一部分人會選擇購買other vegetables, 從結果上可以發現大家對于購買whole milk有著特殊的偏愛。(或許牛奶就在前臺處,離開時促銷打折等等有趣的規則)
?圖3 1號用戶UNIX命令行操作記錄頻繁項(min_sup=0.3)
?
?
?
?
通過對第一位用戶命令行操作的記錄和多位用戶的命令行操作分析,我們可以發現用戶最常用的命令集中在對于文件的操作上,主要為文件夾的查看,切換,文件vim下的編輯,退出等常見操作;通過對所有用戶的常用命令進行挖掘和分析,可以發現不同用戶的習慣相近,并且大多數用戶的最常用命令為文件夾的查看,切換進入子目錄,進行文件的編輯,并且這些操作常常是組合使用,符合一般用戶的習慣。
?圖7 不同方法運行時間開銷和內存占用
?
?
在本次實驗中,調用了不同的方法,其中暴力搜素無法在有限時間內運行結束,所以記錄只對比了Apriori算法和FP-growth算法,其中在兩個數據集上可以清楚地發現在數據集較小的時候,時間開銷上FP-growth算法并不具備優勢,因為FP-growth算法在進行挖掘之前會花費額外的開銷去構建FP-tree,但是在數據集較大的時候其會為后續挖掘任務節省很大一筆時間。并且我們可以從圖中發現,當min_sup設置的越來越多時,兩個算法的運行時逐漸接近,可知當最小支持度增大到一定值時,第一輪掃描即可獲得幾乎所有結果的頻繁項集,于是運行時開銷都變小。
從兩個算法的理論上也可知道,apriori算法多次掃描交易數據庫,每次利用候選頻繁集產生頻繁集;而FP-growth則利用樹形結構,無需產生候選頻繁集而是直接得到頻繁集,大大減少掃描交易數據庫的次數,從而提高了算法的效率,但是需要一定的額外內存。
5 Conclusion
本次實驗通過在不同數據集上運行這兩種算法,獲得了不同數據集上的頻繁項集和強關聯規則以及一些有趣的信息,并且在設置不同的最小支持度來對比分析兩種算法的運行時間開銷,進而對理論進行深入的探討。
Apriori算法最大的優點就是原理簡單,采用逐層搜索的方法,利用Apriori的兩大先驗知識不斷地迭代執行連接和剪枝步驟,大大壓縮了數據集,省略了許多不必要的步驟,使得算法更加高效。而且的擴展性比價好,可應用于并行計算等領域。Apriori的缺點是決定該算法效率的兩大重要因素,(1)需要不斷地掃描事務數據庫,高頻率的IO操作大大降低了算法的執行速率;(2)在算法迭代時,生成了許多候選集,執行連接步驟后得到的候選k項集可能會迅速上升,嚴重影響了算法效率。
Fp-growth算法最大的優點就是它執行速率快,而且要比Apriori算法快一個數量級。整個算法過程只需要掃描兩次數據庫,可以不用產生候選項集而直接生成頻繁項集,這樣就節約了很大的內存資源,降低了空間復雜度。創建Fp-tree的時候,采用哈夫曼原理,從而大大壓縮了存儲空間。但是Fp-growth算法并不能所有的數據集上都取得良好的效果,如果在一個稀疏的數據集上執行此算法,由于數據之間的交集很小,可以合并的元素少,創建的Fp-tree包含特別多的子孫節點,將這樣的樹保存在內存中絲毫沒有起到壓縮效果,反而影響算法的效率。而且該算法在構造條件Fp樹時使用了遞歸策略,空間復雜度相對較高,內存開銷較大,這在實驗中也得到了驗證。
作為最經典、應用最廣泛的數據挖掘算法,Apriori和FP-growth被應用于眾多領域,在實際任務中,我們需要根據不同的數據、不同的要求,選擇最為合適的算法,并能夠基于此不斷改進和提升。
6 Reference
[1] J. Han, M. Kamber and J. Pei. Data Mining: Concepts and Techniques, 3rd edition, Morgan Kaufmann, 2011.
[2] Agrawal R, Srikant R. Fast algorithms for mining association rules[C]//Proc. 20th int. conf. very large data bases, VLDB. 1994, 1215: 487-499.
[3] Han J, Pei J, Yin Y. Mining frequent patterns without candidate generation[J]. ACM sigmod record, 2000, 29(2): 1-12.
總結
以上是生活随笔為你收集整理的关联规则挖掘算法_数据挖掘 | 关联规则分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ssh协议是tcp还是udp_DNS 支
- 下一篇: todo文件说明已停止工作_番茄ToDo