算法详解-《Apriori关联分析》
概述
在日常生活中,我们都可能会在商店看到一些相关联的商品放在一起,例如牙刷配置毛巾牙膏。
这些相关联的关系如何被确定。我们可以通过消费者购买的商品记录进行一个分析。对数据进行挖掘【采用某些算法】,得到商品之间是否存在联系
1. 一些相关术语
这里采用的案例的数据如下
支持度: 数据集中包含该项集的记录的比例,如A在5条数据中出现了4次 support(A)=4/5 同理support(B) = 4/5 support(F) = 1/5
置信度:表示使用包含A的事务中同时包含B事务的比例,即同时包含A和B的事务占包含A事务的比例。公式表达:Confidence=P(A&B)/P(A) 如Confidence(A&B,A)=3/5 / 4/5 = 3/4 说明有买A的客户有3/4的几率会买B
频繁项集:指几个商品的组合经常出现的项集
最小置信度阈值和最小支持度阈值:我们会提供最小置信度,如果置信度/支持度低于我们所需要的最小的置信度/支持度 抛弃 。用于筛选目标的条件
2. 普通算法计算商品关联
对于普通的计算就是将所有的组合都算一遍
- 如下 以ABCD为例子 【可以将上面的案例中的EF去掉 因为太多项太乱了 而且上图的EF也是不符合项 不影响我们分析】
每个节点都要算一遍
support[C(A...D)]
那么如果是大数据量那么怎么计算,就需要用到Apriori定义
3. Apriori算法
针对于普通方法 Apriori算法可以对一些数据计算进行剪枝,通过支持度 和置信度的比较,来对数据剪枝,下面会用数据逐步介绍。
非频繁项集的超集一定是非频繁的,即如果X是非频繁项集,如果Y包含X,则Y是X的超集也是非频繁项集
假设X={a} X的超级就是{a,b},{a,c},{a,b,c}等频繁项集的所有非空子集都必须是频繁的。如果{a,b},{a,c},{a,b,c}不等于空,则{a},{b,c}都是频繁项集
重点:也是证明上述的性质:假设项集I的支持度小于最小支持度的阈值,则I不是频繁项集,I的非空子集也不可能是频繁项集
I的支持度大于最小支持度的阈值,则I是频繁项集,I的非空子集一定是频繁项集。{a,b} 的非空子集{a}跟{b} support({a,b})<=support({a})或者support({b})
对上面案例进行详细计算
决策图仅画出A~D 从项集剩下ABCD开始画 我们也可以参照频繁项集的性质对计算进行剪枝!!! 节约计算成本
最后通过计算置信度 上图ABCD 可以求出关联规则可靠性
如{a,c} {a,b}都是关联规则 如果用户买a 我们应该推荐b还是c更好呢 也就是置信度的目的,看谁更可靠。
另外买c【房子】推荐a【家具】 跟 买a【家具】推荐c【房子】, 两者的置信度不一定相等。
推荐时置信度大于我们规定的 就推荐!!!
缺点:
- 遍历太多次了 不断组合判断 效率低
- 对于大数据量,还是有所消耗
资料
数据挖掘-Apriori算法讲解
使用Apriori算法进行关联分析 - 理论
简单关联规则Apriori算法的例题讲解
使用Apriori算法进行关联分析
购物车里商机挖掘——apriori算法
记录自己所学到的Python学习笔记