做電子商務(wù)系統(tǒng)網(wǎng)站建設(shè)怎么推廣產(chǎn)品最有效
1.理論知識
Apriori是一種常用的數(shù)據(jù)關(guān)聯(lián)規(guī)則挖掘方法,它可以用來找出數(shù)據(jù)集中頻繁出現(xiàn)的數(shù)據(jù)集合。該算法第一次實(shí)現(xiàn)在大數(shù)據(jù)集上的可行的關(guān)聯(lián)規(guī)則提取,其核心思想是通過連接產(chǎn)生候選項(xiàng)及其支持度,然后通過剪枝生成頻繁項(xiàng)集。
Apriori算法的主要思想是找出存在于事務(wù)數(shù)據(jù)集中最大的頻繁項(xiàng)集,再利用得到的最大頻繁項(xiàng)集與預(yù)先設(shè)定的最小置信度閾值生成強(qiáng)關(guān)聯(lián)規(guī)則。
圖1.1關(guān)鍵名詞解釋
2.算法流程圖
3.實(shí)現(xiàn)代碼
def item(dataset): # 求第一次掃描數(shù)據(jù)庫后的 候選集c1 = [] # 存放候選集元素for x in dataset: # 求這個數(shù)據(jù)庫中出現(xiàn)了幾個元素,然后返回for y in x:if [y] not in c1:c1.append([y])c1.sort()return c1# 計算支持度
def get_frequent_item(dataset, c, min_support):cut_branch = {} # 用來存放所有項(xiàng)集的支持度的字典for x in c:for y in dataset:if set(x).issubset(set(y)):cut_branch[tuple(x)] = cut_branch.get(tuple(x),0) + 1Fk = [] # 支持度大于最小支持度的項(xiàng)集, 即頻繁項(xiàng)集sup_dataK = {} # 用來存放所有 頻繁 項(xiàng)集的支持度的字典for i in cut_branch:if cut_branch[i] >= min_support:Fk.append(list(i))sup_dataK[i] = cut_branch[i]return Fk, sup_dataK# 計算候選集
def get_candidate(Fk, K): # 求第k次候選集ck = [] # 存放產(chǎn)生候選集for i in range(len(Fk)):for j in range(i + 1, len(Fk)):L1 = list(Fk[i])[:K - 2].sort()L2 = list(Fk[j])[:K - 2].sort()if L1 == L2:if K > 2:new = list(set(Fk[i]) ^ set(Fk[j]))else:new = set()for x in Fk:if set(new).issubset(set(x)) and list(set(Fk[i]) | set(Fk[j])) not in ck:ck.append(list(set(Fk[i]) | set(Fk[j])))return ck# Apriori算法
def Apriori(dataset, min_support=2):c1 = item(dataset)f1, sup_1 = get_frequent_item(dataset, c1, min_support)F = [f1]sup_data = sup_1K = 2while len(F[K - 2]) > 1:ck = get_candidate(F[K - 2], K) # 求第k次候選集fk, sup_k = get_frequent_item(dataset, ck, min_support)F.append(fk) # 把新產(chǎn)生的候選集假如Fsup_data.update(sup_k) # 字典更新,加入新得出的數(shù)據(jù)K += 1return F, sup_data # 返回所有頻繁項(xiàng)集, 以及存放頻繁項(xiàng)集支持度的字典"""
Apriori算法
定義A 1, B 2, C 3, D 4, E 51 [A C D] 1 3 4
2 [B C E] 2 3 5
3 [A B C E] 1 2 3 5
4 [B E] 2 5min_support = 2
"""
# 主函數(shù)
if __name__ == '__main__':# 數(shù)據(jù)dataset = [[1, 3, 4],[2, 3, 5],[1, 2, 3, 5],[2, 5]]# 最小支持度設(shè)置為2min_support = 2F, sup_data = Apriori(dataset, min_support)print("最小支持度為:\n ", min_support)print('------------------------------------------------------')print("已知關(guān)系:\n ", dataset)print('------------------------------------------------------')print("所有的頻繁項(xiàng)為:\n {}".format(F))print('------------------------------------------------------')print("對應(yīng)的支持度為:\n {}".format(sup_data))
4.實(shí)驗(yàn)結(jié)果
測試數(shù)據(jù)
表1?Apriori算法輸入的數(shù)據(jù) (最小支持度設(shè)置為2)
序號 | 數(shù)據(jù)項(xiàng) | 替換 |
1 | [A?C?D] | 1?3?4 |
2 | [B?C?E] | 2?3?5 |
3 | [A?B?C?E] | 1?2?3?5 |
4 | [B?E] | 2?5 |
實(shí)驗(yàn)結(jié)果與分析
圖 1.2 Apriori關(guān)聯(lián)規(guī)則算法實(shí)驗(yàn)結(jié)果
算法優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
- Aprioi算法采用逐層搜索的迭代方法,算法簡單易于實(shí)現(xiàn)。
- 數(shù)據(jù)采用水平組織方式
- 采用Apriori 優(yōu)化方法
- 適合事務(wù)數(shù)據(jù)庫的關(guān)聯(lián)規(guī)則挖掘。
- 適合稀疏數(shù)據(jù)集:根據(jù)以往的研究,該算法只能適合稀疏數(shù)據(jù)集的關(guān)聯(lián)規(guī)則挖掘,也就是頻繁項(xiàng)目集的長度稍小的數(shù)據(jù)集。
缺點(diǎn):
- 對數(shù)據(jù)庫的掃描次數(shù)過多。
- Apion算法可能產(chǎn)生大量的候選項(xiàng)集。
- 在頻繁項(xiàng)目集長度變大的情況下,運(yùn)算時間顯著增加。
- 采用唯一支持度,沒有考慮各個屬性重要程度的不同。
- 算法的適應(yīng)面窄。
?其他實(shí)驗(yàn)(我是芒果醬點(diǎn)一個關(guān)注吧(σ′▽‵)′▽‵)σ)
- k-Means聚類算法 HNUST【數(shù)據(jù)分析技術(shù)】(2024)-CSDN博客
- PageRank Web頁面分級算法 HNUST【數(shù)據(jù)分析技術(shù)】(2024)-CSDN博客
- KNN分類算法 HNUST【數(shù)據(jù)分析技術(shù)】(2024)-CSDN博客
- Apriori關(guān)聯(lián)規(guī)則算法 HNUST【數(shù)據(jù)分析技術(shù)】(2024)-CSDN博客