学习笔记5-Apriori算法关联分析

Apriori算法是一种经典的关联规则学习算法,主要用于从交易数据中发现频繁项集和关联规则。算法流程包括数据收集、数据准备、分析、训练、测试和使用。核心步骤涉及构建候选项集,通过扫描数据集验证支持度,以及递归地生成更频繁的项集。通过伪代码描述了数据集扫描和整个Apriori算法的工作原理。
摘要由CSDN通过智能技术生成

Apriori算法的一般流程

(1)收集数据:可以使用任何方法收集数据
(2)准备数据:任何数据类型都可以,因为我们只保存集合
(3)分析数据: 使用任意方法
(4)训练算法:使用Apriori算法来找到频繁项
(5)测试算法:不需要测试过程
(6)使用算法:可以用于发现频繁项集以及物品之间的关联规则

数据集扫描的伪代码

对数据集中的每条交易记录tran
对每个候选相集can:
  检查一下can是否是tran的子集:
   如果是,则增加can的计数值:
   对每个候选项集:
      如果其支持度不低于最小值,则保留该项集
      返回所有频繁项集列表
程序清单11-1 Apriori算法中的辅助函数
def loadDataSet():
    return [[1,3,4], [2,3,5], [1,2,3,5], [2,5]]
"""
函数说明:生成大小为1的所有候选项集的集合C1
Parameters:
    dataSet:数据集
Returns:
    项集C1的列表
"""
def createC1(dataSet):
    C1 = []  #初始化C1
    for transaction in dataSet:  #循环数据集中的每项交易
        for item in transaction:  #循环交易中的每项
            if not [item] in C1:
                C1.append([item])
    C1.sort()
    return list(map(frozenset, C1))   #C1中的每项构建一个被"冰冻"的集合,用户不能修改他们
#map(frozenset, C1)的语义是将C1由Python列表转换为不变集合(frozenset,Python中的数据结构)。
def scanD(D, Ck, minSupport):
    """
    scanD(计算候选数据集 CK 在数据集 D 中的支持度,并返回支持度大于最小支持度 minSupport 的数据)
    Args:
        D 数据集
        Ck 候选项集列表
        minSupport 最小支持度
    Returns:
        retList 支持度大于 minSupport 的集合
        supportData 候选项集支持度数据
    """
     #对数据集中的每个样本,对候选项集中的每个集合,
    #如果该集合为样本子集,那么对应计数+1(注意使用了字典,这个时候frozenset就起到用处了,不然会报错)
    #ssCnt 临时存放选数据集 Ck 的频率. 例如: a->10, b->5, c->8
    ssCnt = {
   }
    for tid in D:
        for can in Ck:
            if can.issubset(tid):  #s.issubset(t)  测试是否 s 中的每一个元素都在 t 中
                if can not in ssCnt:
                    ssCnt[can] = 1
                else:
                    ssCnt[can] += 1
    numItems = float(len(D))
    retList = []
    supportData = {
   }
    #遍历ssCnt字典,找出满足最小支持度的候选项集,将其添加到retList中,
    #并且将项集的支持度保存在supportData字典中,之后求关联关系的时候会用到
    for key in ssCnt:
        support = ssCnt[key]/numItems   #计算支持度, 支持度 = 候选项(key)出现的次数 / 所有数据集的数量
        if support >= minSupport:   #将满足最小支持度的项集保存
            retList.insert(0, key) #retList.insert(0, key)一行将频繁项集插入返回列表的首部
        supportData[key] = support  #添加到字典supportData中,存储所有的候选项(key)和对应的支持度(support)
    return retList, supportData
dataSet = loadDataSet()
dataSet
[[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]
C1=createC1(dataSet)
D = list(map(set,dataSet))  #原因是python3.6的map函数计算长度len()函数会报错,需要将其转换为List
D
[{1, 3, 4}, {2, 3, 5}, {1, 2, 3, 5}, {2, 5}]
L1,suppData0 = scanD(D,C1,0.5)
L1
[frozenset({5}), frozenset({2}), frozenset({3}), frozenset({1})]
#https://www.cnblogs.com/DOLFAMINGO/p/9521941.html   该贴中 案例图描述很清楚
</
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值