1.理论知识
Apriori是一种常用的数据关联规则挖掘方法,它可以用来找出数据集中频繁出现的数据集合。该算法第一次实现在大数据集上的可行的关联规则提取,其核心思想是通过连接产生候选项及其支持度,然后通过剪枝生成频繁项集。
Apriori算法的主要思想是找出存在于事务数据集中最大的频繁项集,再利用得到的最大频繁项集与预先设定的最小置信度阈值生成强关联规则。

图1.1关键名词解释
2.算法流程图

3.实现代码
def item(dataset):  # 求第一次扫描数据库后的 候选集
    c1 = []  # 存放候选集元素
    for x in dataset:  # 求这个数据库中出现了几个元素,然后返回
        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 = {}  # 用来存放所有项集的支持度的字典
    for x in c:
        for y in dataset:
            if set(x).issubset(set(y)):
                cut_branch[tuple(x)] = cut_branch.get(tuple(x),
                                                      0) + 1
    Fk = []  # 支持度大于最小支持度的项集,  即频繁项集
    sup_dataK = {}  # 用来存放所有 频繁 项集的支持度的字典
    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 = []  # 存放产生候选集
    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_1
    K = 2
    while 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)  # 把新产生的候选集假如F
        sup_data.update(sup_k)  # 字典更新,加入新得出的数据
        K += 1
    return F, sup_data  # 返回所有频繁项集, 以及存放频繁项集支持度的字典
"""
Apriori算法
定义A 1,   B 2,   C 3,   D 4,   E 5
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
min_support = 2 
"""
# 主函数
if __name__ == '__main__':
    # 数据
    dataset = [
        [1, 3, 4],
        [2, 3, 5],
        [1, 2, 3, 5],
        [2, 5]
    ]
    # 最小支持度设置为2
    min_support = 2
    F, sup_data = Apriori(dataset, min_support)
    print("最小支持度为:\n ", min_support)
    print('------------------------------------------------------')
    print("已知关系:\n ", dataset)
    print('------------------------------------------------------')
    print("所有的频繁项为:\n {}".format(F))
    print('------------------------------------------------------')
    print("对应的支持度为:\n {}".format(sup_data))
 
4.实验结果
测试数据
表1 Apriori算法输入的数据 (最小支持度设置为2)
|   序号  |   数据项  |   替换  | 
|   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  | 
实验结果与分析

图 1.2 Apriori关联规则算法实验结果
算法优缺点
优点:
- Aprioi算法采用逐层搜索的迭代方法,算法简单易于实现。
 - 数据采用水平组织方式
 - 采用Apriori 优化方法
 - 适合事务数据库的关联规则挖掘。
 - 适合稀疏数据集:根据以往的研究,该算法只能适合稀疏数据集的关联规则挖掘,也就是频繁项目集的长度稍小的数据集。
 
缺点:
- 对数据库的扫描次数过多。
 - Apion算法可能产生大量的候选项集。
 - 在频繁项目集长度变大的情况下,运算时间显著增加。
 - 采用唯一支持度,没有考虑各个属性重要程度的不同。
 - 算法的适应面窄。
 
其他实验(我是芒果酱点一个关注吧(σ′▽‵)′▽‵)σ)
- k-Means聚类算法 HNUST【数据分析技术】(2024)-CSDN博客
 - PageRank Web页面分级算法 HNUST【数据分析技术】(2024)-CSDN博客
 - KNN分类算法 HNUST【数据分析技术】(2024)-CSDN博客
 - Apriori关联规则算法 HNUST【数据分析技术】(2024)-CSDN博客
 



















