頻繁項集挖掘Apriori演算法及其Python實現
Apriori演算法是通過限制候選產生髮現頻繁項集。
Apriori演算法使用一種稱為逐層搜尋的迭代方法,其中k項集用於探索(k+1)項集。首先,通過掃描資料庫,累計每個項的計數,並收集滿足最小支援度的項,找出頻繁1項集的集合,記為L1。然後,使用L1找出頻繁2項集的集合L2,使用L2找出L3,如此下去,直到不能再找到頻繁k項集。
為了提高頻繁項集逐層產生的效率,一種稱為先驗性質(Apriori property)的重要性質用於壓縮搜尋空間。
先驗性質:頻繁項集的所有非空子集也一定是頻繁的。
具體過程如下圖所示:
Python實現:
我們的期望:
輸入:資料庫中資料和最小支援度
輸出:頻繁項集
例:
輸入:資料,[[‘A’,’B’,’C’,’D’],[‘B’,’C’,’E’],[‘A’,’B’,’C’,’E’],[‘B’,’D’,’E’],[‘A’,’B’,’C’,’D’]];最小支援度:0.7
輸出:[[‘B’], [‘C’], [‘B’, ‘C’]]
實現如下:
#coding=utf-8 # 全文utf-8編碼
import sys
def apriori(D, minSup):
'''頻繁項集用keys表示,
key表示項集中的某一項,
cutKeys表示經過剪枝步的某k項集。
C表示某k項集的每一項在事務資料庫D中的支援計數
'''
C1 = {}
for T in D:
for I in T:
if I in C1:
C1[I] += 1
else :
C1[I] = 1
print C1
_keys1 = C1.keys()
keys1 = []
for i in _keys1:
keys1.append([i])
n = len(D)
cutKeys1 = []
for k in keys1[:]:
if C1[k[0]]*1.0/n >= minSup:
cutKeys1.append(k)
cutKeys1.sort()
keys = cutKeys1
all_keys = []
while keys != []:
C = getC(D, keys)
cutKeys = getCutKeys(keys, C, minSup, len(D))
for key in cutKeys:
all_keys.append(key)
keys = aproiri_gen(cutKeys)
return all_keys
def getC(D, keys):
'''對keys中的每一個key進行計數'''
C = []
for key in keys:
c = 0
for T in D:
have = True
for k in key:
if k not in T:
have = False
if have:
c += 1
C.append(c)
return C
def getCutKeys(keys, C, minSup, length):
'''剪枝步'''
for i, key in enumerate(keys):
if float(C[i]) / length < minSup:
keys.remove(key)
return keys
def keyInT(key, T):
'''判斷項key是否在資料庫中某一元組T中'''
for k in key:
if k not in T: # 只要有一個不匹配,就返回False
return False
return True
def aproiri_gen(keys1):
'''連線步'''
keys2 = []
for k1 in keys1:
for k2 in keys1:
if k1 != k2:
key = []
for k in k1:
if k not in key:
key.append(k)
for k in k2:
if k not in key:
key.append(k)
key.sort()
if key not in keys2:
keys2.append(key)
return keys2
D = [['A','B','C','D'],['B','C','E'],['A','B','C','E'],['B','D','E'],['A','B','C','D']]
F = apriori(D, 0.7)
print '\nfrequent itemset:\n', F
相關推薦
頻繁項集挖掘Apriori演算法及其Python實現
Apriori演算法是通過限制候選產生髮現頻繁項集。 Apriori演算法使用一種稱為逐層搜尋的迭代方法,其中k項集用於探索(k+1)項集。首先,通過掃描資料庫,累計每個項的計數,並收集滿足最小支援度的項,找出頻繁1項集的集合,記為L1。然後,使用L1找出頻繁
資料探勘---頻繁項集挖掘Apriori演算法的C++實現
1 準備 2 作業粗糙翻譯內容 2.1 前言 程式設計作業可能比書面作業花費更多的時間,而這也算是你最後成績的10%,所以請提前開始; 這是個人作業,你可以與你的同學或者老師交流,但是不能夠共享程式碼和抄襲; 類似的庫或頻繁模式挖掘演算
海量資料探勘MMDS week2: 頻繁項集挖掘 Apriori演算法的改進:基於hash的方法
海量資料探勘Mining Massive Datasets(MMDs) -Jure Leskovec courses學習筆記之關聯規則Apriori演算法的改進:基於hash的方法:PCY演算法, Multistage演算法, Multihash演算法 Apriori演
海量資料探勘MMDS week2: 頻繁項集挖掘 Apriori演算法的改進:非hash方法
海量資料探勘Mining Massive Datasets(MMDs) -Jure Leskovec courses學習筆記之關聯規則Apriori演算法的改進:非hash方法 - 大資料集下的頻繁項集:挖掘隨機取樣演算法、SON演算法、Toivonen演算法 Apri
獲取頻繁項集和關聯規則的Python實現【先驗演算法】
# -*- coding: utf-8 -*- #引數設定 data_file = 'F:\\user_match_stat\\itemset.txt' #檔案格式csv,形如:item1,item2,item3 #每個事務佔一行 frequent_itemsets_sav
頻繁項集挖掘演算法——Apriori演算法
前言 關聯規則就是在給定訓練項集上頻繁出現的項集與項集之間的一種緊密的聯絡。其中“頻繁”是由人為設定的一個閾值即支援度 (support)來衡量,“緊密”也是由人為設定的一個關聯閾值即置信度(confidence)來衡量的。這兩種度量標準是頻繁項集挖掘中兩個至關
頻繁項集挖掘之apriori和fp-growth
Apriori和fp-growth是頻繁項集(frequent itemset mining)挖掘中的兩個經典演算法,主要的區別在於一個是廣度優先的方式,另一個是深度優先的方式,後一種是基於前一種效率較低的背景下提出來的,雖然都是十幾年前的,但是理解這兩個演算法對資料探勘
頻繁項集挖掘演算法——Eclat演算法
前面介紹過的Apriori演算法和FP-growth演算法都是從TID項集格式(即{TID:itemset})的事務集中挖掘頻繁模式,其中TID是事務識別符號,而itemset是事務TID中購買的商品。這種資料格式稱為水平資料格式。或者,資料也可以用項-TID
R語言包arules進行頻繁項集挖掘的最簡單例子
arules是進行頻繁項集挖掘(frequent itemset mining)的有效工具,不過我在使用的時候發現網上很多例子都比較繁瑣,這裡總結一下其中apriori方法的最簡單使用方法,這裡首先給出程式碼:files_change<-read.transaction
海量資料探勘MMDS week2: Association Rules關聯規則與頻繁項集挖掘
海量資料探勘Mining Massive Datasets(MMDs) -Jure Leskovec courses學習筆記之association rules關聯規則與頻繁項集挖掘 {Frequent Itemsets: Often called "associatio
關聯規則(頻繁項集)——Apriori
1.該問題最初是對“購物籃”提出來的,著名例子是“尿布與啤酒”。 2.相關概念: 關聯規則的支援度:Support(A,B)=包含A和B的事務數/事務總數 關聯規則的置信度:Confidence(A,B)= 包含A和B的事務數/包含A事務數 頻繁項集:項集的頻率大於等
關聯規則,Apriori演算法及python實現
1 關聯規則 關聯分析一個典型的例子是購物籃分析,廣泛應用於零售業,通過檢視那些商品經常在一起購買,可以幫助商店瞭解使用者的購買行為。一個最有名的例子是“尿布與啤酒”,據報道,美國中西部的一家連鎖店發現,男人們會在週四購買尿布和啤酒,這樣商家實際上就可以將尿布
經典查詢演算法及其Python實現
寫在前面上一篇介紹了幾大排序演算法,從基本原理解釋到Python程式碼實現,平時有空的話還需要經常翻出來複習複習。今天就主要來看看另外一大類演算法:經典查詢演算法。本篇相關python程式碼已上傳至Github:使勁兒點!1.基本概念查詢就是根據給定的某個值,在查詢表中確定一
資料結構與演算法:常見排序演算法及其python實現
0、 綜合分析 0.1 排序演算法的種類及時間限制 常見排序演算法一般分為非線性時間比較類排序和線性時間非比較類排序。 比較類排序演算法時間複雜度的下限為O(nlogn)O(n\log n)O(nlogn),非比較類排序演算法不受比較式排序演算法的時間下
SMOTE演算法及其python實現
SMOTE(Synthetic Minority Oversampling Technique),合成少數類過取樣技術.它是基於隨機過取樣演算法的一種改進方案,由於隨機過取樣採取簡單複製樣本的策略來增加少數類樣本,這樣容易產生模型過擬合的問題,即使得模型學習到的
關聯分析——Apriori演算法以及Python實現
Aprior演算法是比較經典的關聯規則挖掘演算法。 核心思想 核心就是先驗原理,即頻繁項集的子集必定是頻繁項集。反之,若子集非頻繁,則超集必定非頻繁。 演算法簡介 基本概念 購物籃事務(transaction):一位顧客一次購買商品的記錄就
機器學習之深入理解神經網路理論基礎、BP演算法及其Python實現
人工神經網路(Artificial Neural Networks,ANN)系統是 20 世紀 40 年代後出現的。它是由眾多的神經元可調的連線權值連線而成,具有大規模並行處理、分散式信 息儲存、良
高斯判別分析演算法及其python實現
高斯判別分析演算法(Gaussian discriminat analysis) 高斯判別演算法是一個典型的生成學習演算法(關於生成學習演算法可以參考我的另外一篇部落格)。在這個演算法中,我們假設p(x|y)服從多元正態分佈。 注:在判別學習演算法中,
【機器學習】【Apriori演算法-2】Apriori演算法的Python實現 + 程式碼講解
1.Apriori演算法原理詳解2.Python實現Apriori演算法2.1演算法的重要Python操作知識點實現Apriori演算法時,重要Python知識點:1)如何實現二維list 轉化為set2)如何判斷list A是list B的子集 此處A和B是一維序列;
R_Studio(關聯)Apriori演算法尋找頻繁項集的方法
使用Apriori演算法尋找頻繁項集 #匯入arules包 install.packages("arules") library ( arules ) setwd('D:\\data') Gary<-