【机器学习】【Apriori算法-1】Apriori算法原理详解 + 示例展示数学求解过程
1.Apriori算法原理詳解
Apriori算法是經典的挖掘頻繁項集和關聯規則的數據挖掘算法。A priori在拉丁語中指"來自以前"。當定義問題時,通常會使用先驗知識或者假設,這被稱作"一個先驗"(a priori)。Apriori算法的名字正是基于這樣的事實:算法使用頻繁項集性質的先驗性質,即頻繁項集的所有非空子集也一定是頻繁的。Apriori算法使用一種稱為逐層搜索的迭代方法,其中k項集用于探索(k+1)項集。首先,通過掃描數據庫,累計每個項的計數,并收集滿足最小支持度的項,找出頻繁1項集的集合。該集合記為L1。然后,使用L1找出頻繁2項集的集合L2,使用L2找出L3,如此下去,直到不能再找到頻繁k項集。每找出一個Lk需要一次數據庫的完整掃描。Apriori算法使用頻繁項集的先驗性質來壓縮搜索空間。
2.數學示例求解過程
給個整體求解手稿:
下面以商品交易為例介紹數學求解過程,展示Apriori算法的思路。
注:手稿中由于[1,2,3,5]在交易中出現1次,導致最后支持數據集為[],所以為了很好展示Apriori算法思路,下面在商品交易列表中出現了2次[1,2,3,5]交易記錄,會讓最后求得的支持數據集不為空~
自定義最小支持度為0.2,即minSupport=0.2,即小于最小支持度的頻繁項不會添加到支持數據集中~
商品交易記錄列表goods:
? ? goods = np.array([[1, 2, 5],[2, 4],[2, 3],[1, 2, 4],[1, 3],[2, 3],[1, 3],[1, 2, 3, 5],[1, 2, 3, 5],[1, 2, 3]])第一步:求初始化數據集
說明:[[1], 7],其中[1]是一個頻繁項,7是此頻繁項對應的支持項,表示頻繁項[1]在商品交易記錄列表中出現7次
supportData:
[[[1], 7], [[2], 8], [[3], 7], [[4], 2], [[5], 3]]第二步:支持項過濾
自定義最小支持度為minSupport = 0.2,則最小支持項=0.2*N=0.2*10=2
則由于每個支持項都不小于最小支持項,則每個頻繁項都不被丟棄
第三步:發現新的支持數據集+支持度過濾
發現規則:根據已有的支持數據集supportData,然后按照下面步驟產生新的支持數據集
說明:頻繁項如何生成,支持度如何得到,如何進行支持度過濾?
supportData中第一個繁瑣項是[1]則和其后面的頻繁項[2], [3], [4], [5]依次按照下面規則生成頻繁項。舉例[1]和[2]的過程,其他一模一樣。
頻繁項:[1]和[2],合并得到[1, 2],[1, 2]就是由舊的頻繁項[1]和[2]組合成的新的頻繁項
支持項:新的頻繁項[1, 2]在商品交易列表中出現的次數,查一查發現出現過5次,則頻繁項[1, 2]的支持項為5
支持度:5次/交易總次數=5/10=0.5
支持度過濾:因為0.5 > 最小支持度0.2,經過支持度過濾,增加[[1, 2], 5.0]到新的支持數據集~
下面的求解步驟中,頻繁項[1, 4]的支持度0.1 < 最小支持度0.2,所以丟棄[[1, 4], 1],不增加到新的支持數據集中。
[1] go to 發現新的頻繁項: [1] 和 [2] 組合成頻繁項: [1, 2] 支持度: 0.5 經過支持度過濾,增加此項: [[1, 2] 5.0] [1] 和 [3] 組合成頻繁項: [1, 3] 支持度: 0.5 經過支持度過濾,增加此項: [[1, 3] 5.0] [1] 和 [4] 組合成頻繁項: [1, 4] 支持度: 0.1 經過支持度過濾,丟棄此項: [[1, 4] 1.0] [1] 和 [5] 組合成繁瑣項: [1, 5] 支持度: 0.3 經過支持度過濾,增加此項: [[1, 5] 3.0] [2] go to 發現新的頻繁項: [2] 和 [3] 組合成頻繁項: [2, 3] 支持度: 0.5 經過支持度過濾,增加此項: [[2, 3] 5.0] [2] 和 [4] 組合成頻繁項: [2, 4] 支持度: 0.2 經過支持度過濾,增加此項: [[2, 4] 2.0] [2] 和 [5] 組合成頻繁項: [2, 5] 支持度: 0.3 經過支持度過濾,增加此項: [[2, 5] 3.0] [3] go to 發現新的頻繁項: [3] 和 [4] 組合成頻繁項: [3, 4] 支持度: 0.0 經過支持度過濾,丟棄此項: [[3, 4] 0.0] [3] 和 [5] 組合成頻繁項: [3, 5] 支持度: 0.2 經過支持度過濾,增加此項: [[3, 5] 2.0] [4] go to 發現新的頻繁項: [4] 和 [5] 組合成頻繁項: [4, 5] 支持度: 0.0 經過支持度過濾,丟棄此項: [[4, 5] 0.0] [5] go to 發現新的頻繁項: new_supportData: [[[1, 2] 5.0] [[1, 3] 5.0] [[1, 5] 3.0] [[2, 3] 5.0] [[2, 4] 2.0] [[2, 5] 3.0] [[3, 5] 2.0]]上面的new_supportData就是最新的經過支持度過濾的支持數據集。
第四步:重復第三步--->發現新的支持數據集+支持度過濾
繼續的原因是,現已supportData中的頻繁項比如[1, 2]長度為2, 而商品交易記錄中的記錄項最長為4,如[1,2,3,5]
所以需要繼續發現新的支持數據集,直到支持的頻繁項長度達到交易記錄項的最長長度4。
1)“ [1, 2]和[1, 3]無法組合生成新的頻繁項”的思路:因為[1, 2]的最后一個商品2在[1, 3]中沒有出現,所以無新頻繁項產生
2)“[1, 3]和[2, 3]無法組合生成新的頻繁項”的思路:因為[1,3]的最后一個商品3在[1,3]中是最后一個出現,所以無新頻繁項產生,因為不能組合生成[1, 3, 3]
[1, 2] go to 發現新的頻繁項: [1, 2] 和 [1, 3] 無法組合成新的頻繁項. [1, 2] 和 [1, 5] 無法組合成新的頻繁項. [1, 2] 和 [2, 3] 組合成頻繁項: [1, 2, 3] 支持度: 0.3 經過支持度過濾,增加此項: [[1, 2, 3] 3.0] [1, 2] 和 [2, 4] 組合成頻繁項: [1, 2, 4] 支持度: 0.1 經過支持度過濾,丟棄此項: [[1, 2, 4] 1.0] [1, 2] 和 [2, 5] 組合成頻繁項: [1, 2, 5] 支持度: 0.3 經過支持度過濾,增加此項: [[1, 2, 5] 3.0] [1, 2] 和 [3, 5] 無法組合成新的頻繁項. [1, 3] go to 發現新的頻繁項: [1, 3] 和 [1, 5] 無法組合成新的頻繁項. [1, 3] 和 [2, 3] 無法組合成新的頻繁項. [1, 3] 和 [2, 4] 無法組合成新的頻繁項. [1, 3] 和 [2, 5] 無法組合成新的頻繁項. [1, 3] 和 [3, 5] 組合成頻繁項: [1, 3, 5] 支持度: 0.2 經過支持度過濾,增加此項: [[1, 3, 5] 2.0] [1, 5] go to 發現新的頻繁項: [1, 5] 和 [2, 3] 無法組合成新的頻繁項. [1, 5] 和 [2, 4] 無法組合成新的頻繁項. [1, 5] 和 [2, 5] 無法組合成新的頻繁項. [1, 5] 和 [3, 5] 無法組合成新的頻繁項. [2, 3] go to 發現新的頻繁項: [2, 3] 和 [2, 4] 無法組合成新的頻繁項. [2, 3] 和 [2, 5] 無法組合成新的頻繁項. [2, 3] 和 [3, 5] 組合成頻繁項: [2, 3, 5] 支持度: 0.2 經過支持度過濾,增加此項: [[2, 3, 5] 2.0] [2, 4] go to 發現新的頻繁項: [2, 4] 和 [2, 5] 無法組合成新的頻繁項. [2, 4] 和 [3, 5] 無法組合成新的頻繁項. [2, 5] go to 發現新的頻繁項: [2, 5] 和 [3, 5] 無法組合成新的頻繁項. [3, 5] go to 發現新的頻繁項: new_supportData: [[[1, 2, 3] 3.0] [[1, 2, 5] 3.0] [[1, 3, 5] 2.0] [[2, 3, 5] 2.0]]第五步:重復第三步--->發現新的支持數據集+支持度過濾
繼續原因是,現有支持頻繁項長度是3,如[1,2,3],小于交易記錄項的最長長度4。
[1, 2, 3] go to 發現新的頻繁項: [1, 2, 3] 和 [1, 2, 5] 無法組合成新的繁瑣項. [1, 2, 3] 和 [1, 3, 5] 組合成繁瑣項: [1, 2, 3, 5] 支持度: 0.2 經過支持度過濾,增加此頻繁項: [[1, 2, 3, 5] 2.0] [1, 2, 3] 和 [2, 3, 5] 組合成繁瑣項: [1, 2, 3, 5] 支持度: 0.2 經過支持度過濾,增加此頻繁項: [[1, 2, 3, 5] 2.0] [1, 2, 5] go to 發現新的頻繁項: [1, 2, 5] 和 [1, 3, 5] 無法組合成新的繁瑣項. [1, 2, 5] 和 [2, 3, 5] 無法組合成新的繁瑣項. [1, 3, 5] go to 發現新的頻繁項: [1, 3, 5] 和 [2, 3, 5] 無法組合成新的繁瑣項. [2, 3, 5] go to 發現新的頻繁項: new_supportData: [[[1, 2, 3, 5] 2.0] [[1, 2, 3, 5] 2.0]] Apriori over, supportData: [[[1, 2, 3, 5] 2.0]本次新的支持數據集中頻繁項長度為4 等于 交易記錄項的最長長度4,所以結束Apriori算法的迭代計算,至此目標支持數據集已經生成:
Apriori over, supportData: [[[1, 2, 3, 5] 2.0]算法結果應用:
如果商店拿到此支持數據集結果,可以將1,2,3,5商品擺放的鄰近一些,或者搞活動時,這幾個一起搞活動,按照算法結果一起買1,2,3,5的情況會很容易出現~,就是很容易出現一起買1,2,3,5商品的情況
上面就是數學求解過程展示Apriori算法的思路,此算法比較簡單,用心捋一捋就會掌握算法的求解過程和算法細想。
參考文獻
[1]Apriori算法介紹(Python實現)
(end)
總結
以上是生活随笔為你收集整理的【机器学习】【Apriori算法-1】Apriori算法原理详解 + 示例展示数学求解过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: echarts制作中国地图
- 下一篇: ELK Logstash 自定义正则模式