关联分析算法(一)——Apriori(先验算法)

算法思路简介

Apriori根据原始的销售表:

  1. 第一步:列出所有元素,所有元素独立组成一个集合,计算每个集合的支持度。然后根据最小支持度的阈值剔除掉小的支持度的集合。
  2. 第二步:每个集合都增加一个与原有集合中没有的元素,构成多个新的集合,计算每个集合的支持度。然后根据最小支持度的阈值剔除掉小的支持度的集合。
  3. 依次循环,直到所有计算支持度的集合都被阈值卡掉。

详细的可以参考这个比较形象的描述:Apriori Algorithm

案例

使用mlxtend计算Apriori
github地址:https://github.com/rasbt/mlxtend
Mlxtend Doc:https://rasbt.github.io/mlxtend/

import pandas as pd
from mlxtend.preprocessing import TransactionEncoder  # 传入模型的数据需要满足特定的格式,可以用这种方法来转换为bool值,也可以用函数转换为0、1
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules

shopping_list = [['豆奶', '莴苣'],
                 ['莴苣', '尿布', '葡萄酒', '甜菜'],
                 ['豆奶', '尿布', '葡萄酒', '橙汁'],
                 ['莴苣', '豆奶', '尿布', '葡萄酒'],
                 ['莴苣', '豆奶', '尿布', '橙汁']]

shopping_df = pd.DataFrame(shopping_list)

df_arr = shopping_df.stack().groupby(level=0).apply(list).tolist()

te = TransactionEncoder()  # 定义模型
df_tf = te.fit_transform(df_arr)
df = pd.DataFrame(df_tf, columns=te.columns_)

# 求频繁项集:
frequent_itemsets = apriori(df, min_support=0.05, use_colnames=True)  # use_colnames=True 表示使用元素名字,默认的False使用列名代表元素
frequent_itemsets.sort_values(by='support', ascending=False, inplace=True)  # 频繁项集可以按支持度排序
print(frequent_itemsets[frequent_itemsets.itemsets.apply(lambda x: len(x)) >= 2])  # 选择长度 >=2 的频繁项集

# 求关联规则:
association_rule = association_rules(frequent_itemsets, metric='confidence',
                                     min_threshold=0.9)  # metric可以有很多的度量选项,返回的表列名都可以作为参数
association_rule.sort_values(by='leverage', ascending=False, inplace=True)  # 关联规则可以按leverage排序
print(association_rule)

参考资料

Apriori算法原理总结:https://www.cnblogs.com/pinard/p/6293298.html
WikiMapia Association rule learning:https://en.wikipedia.org/wiki/Association_rule_learning
一步步教你轻松学关联规则Apriori算法:https://bainingchao.github.io/2018/09/27/%E4%B8%80%E6%AD%A5%E6%AD%A5%E6%95%99%E4%BD%A0%E8%BD%BB%E6%9D%BE%E5%AD%A6%E5%85%B3%E8%81%94%E8%A7%84%E5%88%99Apriori%E7%AE%97%E6%B3%95/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值