機器學習之Apriori

2021-07-30 14:39:54 字數 2337 閱讀 2349

1 幾個概念:

(1)關聯分析:一種在大規模資料中尋找有趣關係的任務。這種有趣關係一般有兩種形式:頻繁項集或者關聯規則。

(2)頻繁項集:經常,頻繁出現在一起的物品集合,通常用一對{}來表示。

(3)關聯規則:兩種物品之間存在的關聯關係,通常用「

(4)支援度:這是用來衡量頻繁項集的因子。乙個項集的支援度即為乙個資料集中包含該項集的記錄所佔的比例。

(5)可信度(置信度):這是用來衡量關聯規則的因子。

比如:乙個商店的交易清單,這裡只有豆奶,萵苣,尿布和葡萄酒這四種商品:

上表中,等就是乙個頻繁項集, 「尿布

2 apriori原理

以下是4種商品所有可能的項集組合:

apriori的目的就是找到頻繁項集,因為只有先找到頻繁項集才能進一步從中挖掘關聯規則,最終才能得到大規模資料中有趣的關係。

尋找頻繁項集就是去掉一些支援度小的項集。

比如上圖中,如果這個項集我們算出它的支援度很小,屬於非頻繁項集,那麼顯然,所有包括項集的項集也是非頻繁的,那麼也就不用再計算他們的支援度,減少計算量。所以,上圖中的,,這三種項集可以去掉。

3 實現

1)生成所有的頻繁項集

偽**:

實現:

def

scand

(dataset, ck, minsupport):

d=map(set,dataset)

sscnt = {}

#記錄整個資料集中每個元素出現的次數

#for tid in d: #遍歷每條資料列表

for can in ck: #遍歷每個資料元素

if can.issubset(tid):

ifnot sscnt.has_key(can): sscnt[can]=1

else: sscnt[can] += 1

numitems = float(len(d)) #4

retlist =

supportdata = {}

for key in sscnt: #為每乙個sscnt字典裡的元素計算支援度support

support = sscnt[key]/numitems

if support >= minsupport: #將小於支援度閾值的項集去掉,剩下的當做頻繁項集

retlist.insert(0,key)

supportdata[key] = support

#retlist=[frozenset([1]), frozenset([3]), frozenset([2]), frozenset([5])]

#supportdata=

# return retlist, supportdata

2)組織完整的apriori演算法

根據支援度,找到頻繁項集

偽**:

實現:

def

apriori

(dataset, minsupport = 0.5):

c1 = createc1(dataset) #資料集中所有大小為1的項集集合

d = map(set, dataset)

#l1為所有大小為1的頻繁項集集合

#supportdata為所有大小為1的項集支援度

l1, supportdata = scand(d, c1, minsupport)

l = [l1]

k = 2

while (len(l[k-2]) > 0):

ck = apriorigen(l[k-2], k) #由上一層頻繁項集,建立下一層所有可能項集組合的集合ck

lk, supk = scand(d, ck, minsupport)#選擇符合支援度的頻繁項集lk

supportdata.update(supk)

k += 1

return l, supportdata

3)根據可信度,挖掘關聯規

機器學習演算法 之Apriori

apriori演算法不同於以前接觸過的機器學習演算法,這種演算法用於在資料集中尋找有趣的關係。這些關係可以有兩種形式 頻繁項集或者關聯規則。關於演算法的詳細介紹參見 def apriori dataset,minsupport 0.5 c1 createc1 dataset d map set,da...

機器學習之Apriori演算法python實現

coding utf 8 created on sun dec 23 15 50 25 2018 author muli from future import print function import pandas as pd 自定義連線函式,用於實現l 到c k的連線 def connect s...

機器學習 演算法 Apriori

參考 很多人都喜歡用 啤酒跟尿布 這個例子來比喻機器學習,主要就是想說明apriori在挖掘物件關聯的重要作用,這個演算法很簡單,沒有涉及複雜的數學知識,一點邏輯而已,還有改進的apriori演算法,有時間我也會實現一下 簡單實現了一下apriori,直接上python 和結果 coding utf...