Aprior算法

应用

用于挖掘频繁项集及关联规则
可用于推荐系统, 通过不同顾客购物车的商品,分析顾客的习惯,从而对不同顾客进行商品推荐等

概念通俗理解

  • 项集及K项集
    将商品作为项;
    每个顾客的购物车的商品集就是一个项集;
    若顾客购物车有k项商品,则称这个项集为k项集。
  • 支持度计数
    用来表示项集出现的频繁次数;
    整个统计数据中,顾客购物车的商品集相同的次数,即多少顾客的购物车的商品集相同;
    (牛奶,面包)在整个数据集中出现的次数
  • 关联规则
    大致可以描述为用来衡量商品之间的相关性;
    如,面包->牛奶 :顾客购买面包,同时购买牛奶的概率大小等
    • 衡量关联规则强度的两个参数
      支持度:包含(面包,牛奶)的购物车数量 / 系统中所有购物车数量
      置信度:包含(面包,牛奶)的购物车数量 / 包含面包的购物车数量
      支持度用来衡量项集的频繁程度,置信度用来衡量规则的强弱。
  • 频繁项集:支持度大于给定阈值的项集,如(面包,牛奶)的支持度大于规定的支持度阈值,则成(面包, 牛奶)为频繁项集,即出现足够频繁的项集称频繁项集。
  • 到此回归Aprior算法的应用:用于寻找频繁项集及关联规则
  • 项集性质:
    频繁项集的非空子集也是频繁的,如(面包,牛奶)为频繁项集,则(面包)及(牛奶)均为频繁项集。
    因此可知非频繁项集的超集也是非频繁的,如(面包)为非频繁项集,则(面包,牛奶)为非频繁项集 。
    原因:项集包含项数越多,则项集的支持度越小,如(牛奶,面包)出现次数一定小于(牛奶)及(面包)痴线次数。

Aprior算法原理

主要分两部:连接;剪枝
首先寻找1-项集中所有频繁项集,然后通过连接1-项集得到2-项集,在通过剪枝删除2-项集中的非频繁项集,从而得到2项集中所有的频繁项集;再通过连接得到3-项集,再通过剪枝得到3-项集中的频繁项集,… ,直至得到k-项集为空集,停止寻找。

  • 连接:
    定义Lk为k-项集中所有的频繁项集集合,Ck为所有的k-项集集合。首先要由Lk得到Ck+1,将Lk中只有一项不相同的项集进行求并集,从而得到k+1-项集。已知Lk,Lk集合中每个项集均包含k项,即Lk_i = {i1, i2, …, ik},假设项集中的元素(项)按顺序排列(如牛奶是第一项,面包第二项,不会出现面包出现在牛奶前的项集)。当两个k-项集中的前k-1项相同,最后一项不相同时,将此两个项集求并集,进而得出一个k+1项集。

    实现:

# 程序只是实现的大体流程
# k为项集包含的项数
 def combination(Lk, k):  
    Ckp1 = []
    for i in range(len(Lk)):  
        for j in range(i+1, len(Lk)):  
            if Lk[i][:k-2] == Lk[j][:k-2]:  
                ckp1.append(list(Lk[i]|Lk[j])) 
    return ckp1
  • 剪枝
    由连接得到Ck+1,即k+1项集的集合,其中包含了频繁项集和非频繁项集,剪枝操作就是去除Ck+1中左右的非频繁项集,从而得到Lk+1。
    判断项集是非频繁项集的标准:
    1,判断其子集中是否存在非频繁项集;
    2,计算其支持度是否小于阈值
    其中标准1,求取Ck+1每个项集的所有子k-项集,遍历Lk,若有子项集不存在Lk中,则Ck+1中的该项集为非频繁项集,因此删除该项集。
    对剩余Ck+1的项集进行支持度计算,去除置信度小于阈值的项集
    关于为什么使用1,本人想法,因为计算置信度需要统计整个数据集中单个项集发生的次数,数据集很大,以至于遍历需要的时间复杂度很高,因此采用第一步,能够去除很大一部分非频繁项集,从而提高效率。

参考文献

https://blog.csdn.net/hjimce/article/details/45438507
https://blog.csdn.net/zhazhayaonuli/article/details/53322541?locationNum=15&fps=1

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值