【机器学习】【关联分析】【Apriori】

关联分析

关联规则(association rules)是常用的无监督学习算法,目标是 发 掘 数 据 内 在 结 构 特 征 之 间 的 关 联 性 \color{red}{发掘数据内在结构特征之间的关联性}

一句话简介:找到特征之间有意义的关系,构建有用的特征和对应的应用。

关联规则通常分两类:一是简单关联(事物之间的普通关系),二是序列关联(考虑事物普通关系同时关注时间先后顺序)

简单关联规则

事务:我们的分析对象,可理解为一种行为,由事务标识TID和项目集合组成
项集:事务中一组项目的集合, I I I是项目全体。通常指具体的东西,如一种商品
在这里插入图片描述
按照实图理解,上图有4个事务, I I I有5个项目,第一个事务有三个项目,称为X是一个3-项集

关联规则一般表现形式:

X → Y ( S = s % , C = c % ) X \to Y (S = s\%,C=c\%) XY(S=s%,C=c%)

  • X叫前项(项目和项集),Y叫后项(结论或事实)
  • S = s % S = s\% S=s%表示规则支持度 s % s\% s% C = c % C=c\% C=c%表示规则置信度 c % c\% c%
有效性判断

我们可以探索到很多关联规则,但不是都是有效的,有些是令人信服的程度不高,所以我们需要有指标去度量该关联规则是否有效。置信度和支持度

  • 规则置信度(Confidence)
    对规则的准确度的测量,事务中包含项目A同时也包含项目B的概率:
    C o n f i d e n c e ( A → B ) = P ( B ∣ A ) = P ( A B ) P ( A ) Confidence(A \to B)=P(B|A)=\frac{P(AB)}{P(A)} Confidence(AB)=P(BA)=P(A)P(AB)
  • 规则支持度(Support)
    对应用的普适性的测量,项目A和B同时出现概率:
    S u p p o r t ( A → B ) = P ( B ∩ A ) = P ( A B ) Support(A \to B) = P(B\cap A)=P(A B) Support(AB)=P(BA)=P(AB)

一 个 有 效 的 关 联 规 则 必 须 要 有 较 高 的 置 信 度 和 支 持 度 , 我 们 通 常 会 设 定 \color{blue}一个有效的关联规则必须要有较高的置信度和支持度,我们通常会设定
最 小 置 信 度 和 最 小 支 持 度 , 只 要 同 时 大 于 这 两 个 值 的 规 则 , 就 是 有 效 的 \color{blue}最小置信度和最小支持度,只要同时大于这两个值的规则,就是有效的

实用性判断

有些规则或许是有效的,但不一定实用,例如“怀孕->女性”没啥实用价值,同时我们还要考虑这个规则是否有指导意义,帮我们在现有基础上做出有价值的优化。为了避免出现AtoB置信度很高是因为本身B的支持度很高,而实际与A没关系。

  • 规则提升度(Lift),置信度与后项支持度之比:
    L i f t ( A → B ) = C o n f i d e n c e ( A → B ) P ( B ) = P ( A B ) P ( A ) P ( B ) Lift(A \to B)=\frac{Confidence(A \to B)}{P(B)}=\frac{P(AB)}{P(A)P(B)} Lift(AB)=P(B)Confidence(AB)=P(A)P(B)P(AB)

提升度可以反映A的出现对B出现的影响程度,若A不影响B的出现,代表A与B相互独立,那么P(AB)=P(A)P(B),提升度为1. 若提升度大于1,则A对B有促进作用

Apriori算法

核心目的:解决海量数据中快速找到关联规则

频繁项集

指的是大于等于最小支持度的项集,包含k个项目,叫频繁k-项集, L k L_k Lk

两大性质

  1. 频繁项集的子集必为频繁项集。{A,C} → \to {A},{C}
  2. 非频繁集的超集一定也是非频繁的。{D} → \to {A,D},{C,D}

L k L_k Lk的所有超集都是频繁项集,可称其为最大频繁k-项集,有它可以知道得到的关联规则具有较高普适性。

寻找频繁项集

这一步是apriori的核心,目的就是为了提高寻找规则的效率

采用的方法是迭代寻找超集,并在超集中发现最大频繁项集. 具体流程:

  1. K=1,计算 K 项集的支持度;
  2. 筛选掉小于最小支持度的项集;
  3. 如果项集为空,则对应 K-1 项集的结果为最终结果。
  4. 否则 K=K+1,重复 1-3 步。
在最大频繁项集中产生简单关联规则

计算所有非空子集 L ∗ L^* L的置信度:
C L ∗ → L − L ∗ = P ( L ) P ( L ∗ ) C_{L^*} \to {L-L^*}=\frac{P(L)}{P(L^*)} CLLL=P(L)P(L)

例如{A,B,C}有子集,{A}{B}{C}{A,B}{A,C}{B,C}

置信度达到最低要求,就是有效的~

FP-Growth算法

根据上面的方法,我们可以想到,如果项目特别多,不断的做排列组合,还要多次重复扫描数据集去计算支持度,是非常计算资源的,所以有人提出了FP-Growth算法

特点:
  • 用一个FP树存储频繁项集,在创建前把不满足最小支持度的项都删除,减少存储空间
  • 整个生成过程只遍历数据集两次,大大减少计算量
步骤:
  1. 创建项头表(item header table)
    这个表的作用是帮助构建FP树,同时提供频繁项集的索引。
    先扫描一遍数据集,删除不满足最小支持度的单个项,不满足最小支持度的单项的超集都要剔除,然后按照支持度从高到低排序,形状如下:
    在这里插入图片描述
    链表指的是该项在FP树中的链表,初始时为空。

  2. 构建FP树
    根节点为NULL,再次扫描筛选后的数据集上的每一条数据,若节点存在就计数+1,如果不存在就创建,此时会更新项投表的链表。类似于下图:
    在这里插入图片描述

  3. 通过FP树去挖掘频繁项集
    用到一个概念叫“条件模式基”,意思是以要挖掘的节点作为叶子节点,从底部向上求出子树,将子树的祖先节点设置为叶子节点之和。【这个解释不好理解,其实就是把属于该节点的子树凑在一起】,请看实例解释:

  • F的条件模式基为{A:2,C:2,E:2,B:2},最大的频繁项集就是{A:2,C:2,E:2,B:2,F:2},其实还有2项集和3项集就不写了。
  • 我们可以看看D,D有两条路,条件模式基为{A:2,C:2,E:1,G:1},在条件模式基下,E和G的支持度都低于阈值,故删除,最后得到最大频繁项集{A:2,C:2,D:1}

这样就可以求得我们想看的单项的频繁项集了


FP-growth参考文章

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值