十大机器学习算法(四)—— 关联算法(Apriori,FP-Growth)

关联算法

基本概念

  1. 支持度:每个商品(商品组合)在总体购物小票中的出现概率: S u p p o r t i = C o u n t s a l e s ( i ) C o u n t a l l − s a l e s Support_i = \frac{Count_{sales(i)}}{Count_{all-sales}} Supporti=CountallsalesCountsales(i)

  2. 置信度:当某一商品(商品组合) j 购买时,另一个其他商品(商品组合) i 会购买的概率: C o n f i d e n c e ( i ∣ j ) = C o u n t s a l e s ( i , j ) C o u n t s a l e s ( j ) Confidence(i|j) = \frac{Count_{sales(i, j)}}{Count_{sales(j)}} Confidence(ij)=Countsales(j)Countsales(i,j)

  3. 支持度:当某一组合 (i | j) 组合售卖时,j 的出现对 i 商品售卖的提升程度: L i f t ( i ∣ j ) = C o n f i d e n c e ( i ∣ j ) S u p p o r t ( i ) Lift(i|j) = \frac{Confidence(i|j)}{Support(i)} Lift(ij)=Support(i)Confidence(ij) ,支持度大于1,表示有提高。

最小支持度的设置

  1. 支持度表示商品(商品组合)在总体中的出现概率,总体小票数量越大,最小支持度 m i n _ s u p p o r t {min}\_ {support} min_support 应该设置的越小,以保证可以存在频繁项集。频繁项集越少时,应当调小最小支持度。

  2. 置信度表示一个商品(商品组合)的出现,另一商品(商品组合)出现的概率,总体数量越多,最小置信度应当越小。当关联规则太少时,应当调小最小置信度

目的

找到数据集的频繁项集,支持度大于最小支持度的那些集合。

Apriori

查找所有的组合(K=1,2,3…),如果 K=1 时非频繁项集,那么 K=2 包含他的组合也肯定定是非频繁项集,最后找出所有频繁项集。
在这里插入图片描述

工具

根据标签编码的格式,分为两种工具:

#接收transaction格式
from efficient_apriori import apriori

#接收one-hot编码格式
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules

FP-Growth

由于 Apriori 算法空间复杂度较大,遍历所有候选项集。
因此改用树结构节省空间,

  1. 首先将不满足最小支持度的项删除构建一个数据集,扫描一边数据集;
  2. 接着对筛选后的数据集排序,构建一棵树,根节点为 NULL;
  3. 将数据集插入到树中。

如下问题中:
在这里插入图片描述
假设最小出现次数为3,最小支持度为:0.6,构建树:
在这里插入图片描述

  1. 在树的叶子节点处开始,寻找频繁项集:将啤酒拎出来,构建剩余数据集的transaction,并将所有transaction中物品的出现次数设置为叶子节点中啤酒的出现次数。在这里插入图片描述
  2. 在新的 transaction 中的寻找频繁项集(出现次数为:3),发现只有尿布。因此包含啤酒的频繁项集为:{(啤酒),(啤酒尿布)}。
  3. 去掉啤酒,重复 4-5 ,遍历剩下的树节点。,得到所有的频繁项集。

工具

spark中提供并行 FP-growth 算法。

FP-growth源码构造方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值