• 【数据挖掘】十大算法之Apriori关联算法


    1 相关概念

    交易号码商品
    1豆奶,莴苣
    2莴苣,尿布,葡萄酒,甜菜
    3豆奶,尿布,葡萄酒,橙汁
    4莴苣,豆奶,尿布,葡萄酒
    5莴苣,豆奶,尿布,橙汁

    频繁项集: 经常出现在一块的物品的集合,是指那些经常出现在一起的物品,例如的{葡萄酒、尿布、豆奶},从上面的数据集中也可以找到尿布->葡萄酒的关联规则,这意味着有人买了尿布,那很有可能他也会购买葡萄酒。

    关联规则: 暗示两种物品之间可能存在很强的关系

    支持度: 一个项集的支持度被定义为数据集中包含该项集的记录所占的比例,上图中,豆奶的支持度为4/5,(豆奶、尿布)为3/5。支持度是针对项集来说的,因此可以定义一个最小支持度,只保留最小支持度的项集。

    支持度 = (包含物品A的记录数量) / (总的记录数量)

    置信度: 针对如{尿布}->{葡萄酒}这样的关联规则来定义的。计算为 支持度{尿布,葡萄酒}/支持度{尿布},其中{尿布,葡萄酒}的支持度为3/5,{尿布}的支持度为4/5,所以“尿布->葡萄酒”的可行度为3/4=0.75,这意味着尿布的记录中,我们的规则有75%都适用。

    置信度( A -> B) = (包含物品A和B的记录数量) / (包含 A 的记录数量)

    2 算法思想和步骤

    (1)算法思想
    如果某个项集是频繁项集,那么它所有的子集也是频繁的,即如果 {0,1} 是频繁的,那么 {0}, {1} 也一定是频繁的。反之。
    在这里插入图片描述

    在图中,已知阴影项集{2,3}是非频繁的。利用这个知识,我们就知道项集{0,2,3},{1,2,3}以及{0,1,2,3}也是非频繁的。也就是说,一旦计算出了{2,3}的支持度,知道它是非频繁的后,就可以紧接着排除{0,2,3}、{1,2,3}和{0,1,2,3}。
    (2)算法步骤
    提供两个参数,数据集和最小支持度。
    先遍历1个物品组合的情况,剔除掉支持度低于最小支持度的数据项,然后用剩下的物品进行组合。遍历2个物品组合的情况,再剔除不满足条件的组合。不断递归下去,直到不再有物品可以组合。

    3 Python案例解析

    def apriori(df, min_support=0.5, use_colnames=False, max_len=None)

    参数如下:

    • df:数据集。
    • min_support:给定的最小支持度。
    • use_colnames:默认False,则返回的物品组合用编号显示,为True的话直接显示物品名称。
    • max_len:最大物品组合数,默认是None,不做限制。如果只需要计算两个物品组合的话,便将这个值设置为2。
    
    import pandas as pd
    from mlxtend.preprocessing import TransactionEncoder
    from mlxtend.frequent_patterns import apriori
    #设置数据集
    dataset = [['牛奶','洋葱','肉豆蔻','芸豆','鸡蛋','酸奶'],
            ['莳萝','洋葱','肉豆蔻','芸豆','鸡蛋','酸奶'],
            ['牛奶','苹果','芸豆','鸡蛋'],
            ['牛奶','独角兽','玉米','芸豆','酸奶'],
            ['玉米','洋葱','洋葱','芸豆','冰淇淋','鸡蛋']]
            
    te = TransactionEncoder()
    #one-hot 编码
    te_ary = te.fit(records).transform(records)
    df = pd.DataFrame(te_ary, columns=te.columns_)
    #利用 Apriori 找出频繁项集
    freq = apriori(df, min_support=0.05, use_colnames=True)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    我们设定的最小支持度是0.6,那么只有支持度大于0.6的物品集合才是频繁项集,最终结果如下:

    support itemsets
    0.6 (洋葱)
    0.6 (牛奶)
    1.0 (芸豆)
    0.6 (酸奶)
    0.8 (鸡蛋)
    0.6 (芸豆, 洋葱)
    0.6 (洋葱, 鸡蛋)
    0.6 (牛奶, 芸豆)
    0.6 (酸奶, 芸豆)
    0.8 (芸豆, 鸡蛋)
    0.6 (芸豆, 洋葱, 鸡蛋)

  • 相关阅读:
    [MySQL远程备份策略举例]
    [CM311-1A]-安卓设备视频分辨率 DPI 以及刷新率问题
    Jmeter性能测试步骤
    ubuntu安装tensorflow(cpu版)教程
    systemverilog中输入输出系统任务和函数(三)——Memory 加载和下载任务
    【Python】基本数据类型(一)数字类型
    计算机网络 --- 网络编程
    微信小程序配置
    oracle 日期
    数据库整理
  • 原文地址:https://blog.csdn.net/weixin_43935696/article/details/124904000