python实现关联规则

参考:https://blog.csdn.net/Eastmount/article/details/53368440

参考的这位博主代码貌似有些小bug,改了一下

代码中Ci表示候选频繁i项集,Li表示符合条件的频繁i项集

# coding=utf-8
def createC1(dataSet):  # 构建所有1项候选项集的集合
    C1 = []
    for transaction in dataSet:
        for item in transaction:
            if [item] not in C1:
                C1.append([item])  # C1添加的是列表,对于每一项进行添加,[[1], [2], [3], [4], [5]]
    #print('C1:',C1)
    return list(map(frozenset, C1))  # 使用frozenset,被“冰冻”的集合,为后续建立字典key-value使用。




###由候选项集生成符合最小支持度的项集L。参数分别为数据集、候选项集列表,最小支持度
###如
###C3: [frozenset({1, 2, 3}), frozenset({1, 3, 5}), frozenset({2, 3, 5})]
###L3: [frozenset({2, 3, 5})]
def scanD(D, Ck, minSupport):
    ssCnt = {}
    for tid in D:  # 对于数据集里的每一条记录
        for can in Ck:  # 每个候选项集can
            if can.issubset(tid):  # 若是候选集can是作为记录的子集,那么其值+1,对其计数
                if not ssCnt.__contains__(can):  # ssCnt[can] = ssCnt.get(can,0)+1一句可破,没有的时候为0,加上1,有的时候用get取出,加1
                    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



###由Lk生成K项候选集Ck
###如由L2: [frozenset({3, 5}), frozenset({2, 5}), frozenset({2, 3}), frozenset({1, 3})]
###生成
###C3: [frozenset({1, 2, 3}), frozenset({1, 3, 5}), frozenset({2, 3, 5})]
def aprioriGen(Lk, k):
    retList = []
    lenLk = len(Lk)
    for i in range(lenLk):
        for j in range(i + 1,lenLk):
            if len(Lk[i] | Lk[j])==k:
                retList.append(Lk[i] | Lk[j])
    return list(set(retList))



####生成所有频繁子集
def apriori(dataSet, minSupport=0.5):
    C1 = createC1(dataSet)
    D = list(map(set, dataSet))
    L1, supportData = scanD(D, C1, minSupport)
    L = [L1]  # L将包含满足最小支持度,即经过筛选的所有频繁n项集,这里添加频繁1项集
    k = 2
    while (len(L[k - 2]) > 0):  # k=2开始,由频繁1项集生成频繁2项集,直到下一个打的项集为空
        Ck = aprioriGen(L[k - 2], k)
        Lk, supK = scanD(D, Ck, minSupport)
        supportData.update(supK)  # supportData为字典,存放每个项集的支持度,并以更新的方式加入新的supK
        L.append(Lk)
        k += 1
    return L, supportData





if __name__ == "__main__":
    dataSet = [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]
    D = list(map(set, dataSet))
    L,suppData = apriori(dataSet)
    print('L:',L)
    print('suppData:',suppData)


    '''
    C1 = createC1(dataSet)
    L1, supportData1 = scanD(D, C1, 0.5)
    print('C1:',C1)
    print('L1:',L1)
    print('supportData1:',supportData1)

    C2 = aprioriGen(L1, 2)
    L2, supportData2 = scanD(D, C2, 0.5)
    print('C2:',C2)
    print('L2:',L2)
    print('supportData2:',supportData2)


    C3 = aprioriGen(L2, 3)
    L3, supportData3 = scanD(D, C3, 0.5)
    print('C3:',C3)
    print('L3:',L3)
    print('supportData3:',supportData3)

    '''

最终得到的所有支持度大于0.5的频繁子集及其支持度如下:

        frozenset({1}): 0.5, 
        frozenset({3}): 0.75, 
        frozenset({4}): 0.25, 
        frozenset({2}): 0.75, 
        frozenset({5}): 0.75, 
        frozenset({1, 3}): 0.5, 
        frozenset({2, 3}): 0.5, 
        frozenset({2, 5}): 0.75, 
        frozenset({3, 5}): 0.5, 
        frozenset({1, 2}): 0.25, 
        frozenset({1, 5}): 0.25, 
        frozenset({2, 3, 5}): 0.5, 
        frozenset({1, 2, 3}): 0.25, 
        frozenset({1, 3, 5}): 0.25

 

数据集介绍:野生动物目标检测数据集 一、基础信息 数据集名称:野生动物目标检测数据集 片数量: - 训练集:11,787张片 - 验证集:643张片 - 测试集:431片 总计:12,861张真实场景片 分类类别: - Elephant(象):陆生大型哺乳动物,包含多种自然环境中的活动姿态。 - Bear(熊):涵盖不同种类的熊科动物,包括静态及运动状态。 - Cheetah(猎豹):强调高速运动状态下的动态捕捉样本。 - Deer(鹿):包含林地和草原环境中的鹿群及个体样本。 - Fox(狐):涵盖多种狐狸品种的多样化行为模式。 标注格式: YOLO格式,包含标准化的归一化坐标标注,可直接适配YOLOv5/v7/v8等主流检测框架。 数据特性: 涵盖航拍、地面视角等多角度拍摄的野生动物像,包含昼夜不同光照条件下的样本。 二、适用场景 生态监测系统开发: 支持构建自然保护区智能监测系统,实时检测野生动物活动轨迹并统计种群分布。 自动驾驶环境感知: 用于训练车辆视觉系统识别道路周边野生动物的能力,提升行车安全系数。 野生动物研究分析: 提供动物行为学研究的结构化数据支撑,支持物种活动模式分析与栖息地研究。 安防监控系统升级: 适用于农场、林区等场景的智能安防系统开发,精准识别潜在动物威胁。 三、数据集优势 多物种覆盖: 包含5类高关注度野生动物,覆盖陆地生态系统的关键指示物种。 场景多样性: 数据采集涵盖丛林、草原、山地等多种自然生境,增强模型泛化能力。 标注专业性: 经动物学专家校验的精准边界框标注,确保目标定位与分类准确性。 任务适配性: 原生YOLO格式支持快速迁移至目标检测、行为分析、密度估计等衍生任务。 规模优势: 超万级标注样本量,有效支撑深度神经网络的特征学习需求。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值