設minsupport=0.4,利用apriori演算法求出所有的頻繁項集,指出最大頻繁項集。
資料集:
**實現:
# 設minsupport=
40%,利用apriori演算法求出所有的頻繁專案集,指出其中的最大頻繁專案集。
import pandas as pd
def get_d()
:d= pd.
read_csv
("work1.csv"
,index_col=
'tid')d
=d['itemset'
].values.
tolist()
for i in
range
(len(d
)):d
[i]=
d[i]
.split
(','
)return
ddef get_c1(d
):c1=
for index ind:
for item in index:
if not [item]
inc1:c1
.([item])c1
.sort()
return
list
(map
(frozenset,c1)
)def scand(d
,ck,minsupport)
: sscnt =
for index in
d: # 遍歷行
for can in
ck: # 遍歷ck
if can.
issubset
(index)
:if not can in sscnt: # 計數
sscnt[can]=1
else
: sscnt[can]+=1
numitems =
float
(len(d
))retlist =
supportdata=
for key in sscnt:
support = sscnt[key]
/numitems
if support>=minsupport:
retlist.
insert(0
,key)
supportdata[key]
=support
return retlist,supportdata
#頻繁項集兩兩組合
def apriorigen
(lk,k)
: retlist=
lenlk =
len(lk)
for i in
range
(lenlk)
:for j in
range
(i+1
,lenlk):l1
=list
(lk[i])[
:k-2];
l2=list
(lk[j])[
:k-2]l1
.sort()
;l2.sort()
ifl1
==l2
: retlist.
(lk[i]
|lk[j]
)return retlist
def apriori(d
,minsupport=
0.4):c1
=get_c1(d
)d=list
(map
(set,d
))l1,supportdata =
scand(d
,c1,minsupport)l=
[l1] k=
2while
(len(l
[k-2])
>0)
:ck=apriorigen(l
[k-2
],k)
lk,supk =
scand(d
,ck,minsupport)
supportdata.
update
(supk)l.
(lk)
k+=1return
l,supportdata
if __name__==
'__main__':d
=get_d()
l,supportdata=
apriori(d
)l.pop()
print
("所有的頻繁專案集為:"
)for i in
range
(len(l
)):print
("l{}"
.format
(i+1),
l[i]
)print
("所有頻繁專案集對應的支援度為:"
)print
(supportdata)
print
("最大頻繁專案集為:",l
[len(l
)-1]
)
執行結果:
資料探勘 Apriori演算法
今日資料探勘課學習了apriori演算法,特意總結下,因為自己是大三弱雞,很多地方參考了下面dalao的博文 非常感謝!apriori演算法是一種挖掘關聯規則的頻繁項集演算法,其核心思想是通過候選集生成和情節的向下封閉檢測兩個階段來挖掘頻繁項集。而且演算法已經被廣泛的應用到商業 網路安全等各個領域。...
資料探勘演算法 Apriori演算法
apriori演算法 所以做如下補充 關聯規則 形如x y的蘊涵式,其中,x和y分別稱為關聯規則的先導 antecedent或left hand side,lhs 和後繼 consequent或right hand side,rhs 其中,關聯規則xy,存在支援度和信任度。置信度 在所有的購買了左邊...
資料探勘演算法之 apriori
關聯規則之 apriori演算法 實現 2006年5月 include include typedef struct d node 資料庫d typedef struct c node 候選集 typedef struct l node 頻繁集 c node c 100 100 l node l 1...