這周學習了資料探勘中計算頻繁項集的aprioir演算法,
老師讓用python實現一下,自己按照《資料探勘概念與技術》第六章上面講解的過程實現
如果有大佬發現問題,歡迎提出意見
"""
aprioir演算法
@author: liuyinxin
"""# 設定支援度為2
support =
2def
load_data()
:"""
:return: 載入資料
"""data =
with
open
('test_data.txt'
,'r'
)as f:
while
true
: line = f.readline()if
not line:
break
[int
(_)for _ in line.split()]
)return data
deffreq_1_items
(data, sup=2)
:"""
找到1頻繁項集
:param
:return:
"""l =
for item in data:
for i in item:
if i not
in l:
l[i]=1
else
: l[i]+=1
return
sorted([
[k]for k, v in l.items(
)if v >= sup]
)def
check_join
(a, b, k)
:"""
檢查是否可以鏈結, 前n-1項相同 並且 第n項不相同
:param a:
:param b:
:param k:
:return:
"""k -=
1for i in
range(0
, k)
:if a[i]
!= b[i]
:return
false
return a[k]
< b[k]
defiscut
(l, c)
:"""
剪枝函式, 當c的真子集不在l中時,剪去c
:param l:
:param c:
:return:
"""c_s =
set(c)
for l in l:
ifnot l.issubset(c_s)
:return
false
return
true
defaprioir_gen
(l, k)
: ck =
lens =
len(l)
set_l =
list
(map
(set
, l)
)for i in
range
(lens)
:for j in
range
(i +
1, lens)
: a, b = l[i]
, l[j]
if check_join(a, b, k)
: c =
[_ for _ in a]-1
])ifnot iscut(set_l, c)
:return ck
defaprioir
(data, min_sup)
:"""
aprioir演算法
:param data:
:param min_sup:
:return:
"""lk =
[freq_1_items(data, min_sup)
] dataset =
list
(map
(set
, data)
) k =
1while
len(lk[k-1]
)>0:
l = lk[k-1]
c = aprioir_gen(l, k)
# 統計,除去支援度低的
c_list =
[(i, c)
for i, c in
enumerate
(map
(set
, c))]
count_dic =
for d in dataset:
for i, c in c_list:
if c.issubset(d)
:if count_dic.get(i,
none)is
none
: count_dic[i]=1
else
: count_dic[i]+=1
ck =
[c[k]
for k, v in count_dic.items(
)if v >= min_sup]
ck.sort(
) k +=
1return lk
l = aprioir(load_data(),
2)for i, l in
enumerate
(l):
print
('i = '
, i +1,
' l='
, l)
就是k頻繁項集合
i = 1 l= [[1], [2], [3], [4], [5]]
i = 2 l= [[1, 2], [1, 3], [1, 5], [2, 3], [2, 4], [2, 5]]
i = 3 l= [[1, 2, 3], [1, 2, 5]]
i = 4 l=
aprioir演算法 關聯規則
關聯規則 評定規則的標準 支援度 規則前項lhs和規則後項rhs所包括的商品都同時出現的概率,lhs和rhs商品的交易次數 總交易次數。置信度 在所有的購買了左邊商品的交易中,同時又購買了右邊商品的交易機率,包含規則兩邊商品的交易次數 包括規則左邊商品的交易次數。提公升度 有這個規則和沒有這個規則是...
資料探勘演算法
apriori演算法學習資料的關聯規則 association rules 適用於包含大量事務 transcation 的資料庫。關聯規則學習是學習資料庫中不同變數中的相互關係的一種資料探勘技術。你可能會對 apriori 演算法如何工作有疑問,在進入演算法本質和細節之前,得先明確3件事情 第一是你...
資料探勘演算法
include include define d 9 d數事務的個數 define minsupcount 2 最小事務支援度數 void main char b 20 d 100 t,b2 100 10 b21 100 10 int i,j,k,x 0,flag 1,c 20 x1 0,i1 0,...