文章目录

  • 前言
  • Apriori算法
    • 代码
  • FP-growth算法
    • 代码

前言

由于学习关联规则时没有找到比较浅显易懂的博客,于是打算自己写一篇快速了解关联规则的博客

参考的博客:
FP-growth算法
Apriori算法

关联规则挖掘是一种基于规则的机器学习算法,可以在大数据样本库中挖掘频繁项集,它的目的是利用一些度量指标来寻找数据之间存在的强规则。也就是说关联规则挖掘是用于知识发现,而非预测,所以是属于无监督的机器学习方法。

打开你的搜索引擎,打入“你好”,它会给你匹配一些和“你好”一块出现的多的词条,这其实就是去找关于“你好”的频繁项集

频繁项集:支持度大于等于最小支持度的商品组合

我们以啤酒-尿布的商场营销案例来阐述关联规则挖掘的作用

沃尔玛在分析销售记录时,发现啤酒和尿布经常一起被购买,于是他们调整了货架,把两者放在一起,结果真的提升了啤酒的销量。

原因解释:爸爸在给宝宝买尿布的时候,会顺便给自己买点啤酒?

通过上述的案例我们找到了一个关联规则:啤酒→尿布;这个规则出现的频次很高,关联性很强

我们衡量频繁项集的指标有三个

  • 支持度
    所谓支持度,就是某个商品组合出现的次数在总购买记录中出现的次数
    如:{牛奶}的支持度为45\frac{4}{5}54​,{牛奶,面包}的支持度为35\frac{3}{5}53​

  • 置信度
    置信度其实就是条件概率,表示在买了X的情况下再买Y的比例有多少,表示关联性的强弱

    例如,在上面的案例中,牛奶出现的次数为4
    牛奶和面包同时出现的次数为5
    所以{牛奶,面包}的置信度为45\frac{4}{5}54​

  • 提升度
    提升度就是商品X的出现,对商品B出现概率的提升程度

    三种情况

  • 提升度(x→y)>1:有提升

  • 提升度(x→y)=1:没有提升,也没有下降

  • 提升度(x→y)<1:有下降

Apriori算法

假设我们有4种商品:0,1,2,3
原本我们就嗯找,暴力穷举,计算每一种商品组合的支持度,然后找出支持度大于阈值的商品项集
如果商品有N种,那么就有2N -1种商品项集,直接指数爆炸

于是有个老哥找到一个Apriori算法
原理 :如果一个项集是非频繁集,那么它的所有超集也是非频繁的
就是说假如商品{1,3}是非频繁项集,那么所有包含{1,3}的项集都是非频繁项集,也就是我们一劳永逸了,只用算{1,3}的支持度就可以pass掉一堆

K项集:K个商品组成的集合,{牛奶,面包,啤酒}为3项集
最小支持度:自己设置,你设为0.5的话,所有出现频率小于0.5的商品集合就会给你筛掉
频繁项集:就是出现的多商品项集,拿去做商品推荐,假设{啤酒,尿布}为频繁项集,那如果有人买了啤酒,你就可以给他打尿布的广告

Apriori算法的流程
Step 1,K=1,计算K项集的支持度
Step 2,筛掉那些支持度小于最小支持度的商品项集
Step 3,如果筛光了,则K-1项集为最终的频繁项集,我们可以去做商品推荐了,yeah!
Step 4,否则,K=K+1,重复Step 1-3

举个栗子
这个老哥举了个不错的例子,我就不多bb了

代码

直接调包

  • from efficient_apriori import apriori
  • from mlxtend.frequent_patterns import apriori
  • from mlxtend.frequent_patterns import association_rules
from efficient_apriori import apriori
# 设置数据集
transactions = [('牛奶','面包','尿布'),('可乐','面包', '尿布', '啤酒'),('牛奶','尿布', '啤酒', '鸡蛋'),('面包', '牛奶', '尿布', '啤酒'),('面包', '牛奶', '尿布', '可乐')]
# 挖掘频繁项集和频繁规则
itemsets, rules = apriori(transactions, min_support=0.5,  min_confidence=1)
print("频繁项集:", itemsets)
print("关联规则:", rules)

输出:

频繁项集: {1: {('牛奶',): 4, ('尿布',): 5, ('面包',): 4, ('啤酒',): 3}, 2: {('尿布', '牛奶'): 4, ('尿布', '面包'): 4, ('牛奶', '面包'): 3, ('啤酒', '尿布'): 3}, 3: {('尿布', '牛奶', '面包'): 3}}关联规则: [{牛奶} -> {尿布}, {面包} -> {尿布}, {啤酒} -> {尿布}, {牛奶, 面包} -> {尿布}]

FP-growth算法

这位大佬讲的非常好,我就不在赘述了

代码

直接调包

import pyfpgrowth
transactions = [[1, 2, 5],[2, 4],[2, 3],[1, 2, 4],[1, 3],[2, 3],[1, 3],[1, 2, 3, 5],[1, 2, 3]]patterns = pyfpgrowth.find_frequent_patterns(transactions, 2)  # 频数删选  频数大于2
rules = pyfpgrowth.generate_association_rules(patterns, 0.6)  # 置信度(条件概率)删选
print(patterns)
print(rules)

输出:

# {频繁项:频数}
{(5,): 2, (1, 5): 2, (2, 5): 2, (1, 2, 5): 2, (4,): 2, (2, 4): 2, (1,): 6, (1, 2): 4, (2, 3): 4, (1, 2, 3): 2, (1, 3): 4, (2,): 7}
# {关联组合:置信度_即条件概率}
{(5,): ((1, 2), 1.0), (1, 5): ((2,), 1.0), (2, 5): ((1,), 1.0), (4,): ((2,), 1.0), (1,): ((3,), 0.6666666666666666)}

关联规则算法(Apriori算法 and FP-growth算法)相关推荐

  1. Frequent Pattern 挖掘之二(FP Growth算法)(转)

    FP树构造 FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法的代价,他不需要不断得生成候选项目队列和不断得扫描整个数据库进行比对.为了达到这样的效果,它采用了一种简洁的数据结 ...

  2. MapReduce框架下的FP Growth算法概述

    转载自:http://blog.sina.com.cn/s/blog_68ffc7a40100uebi.html 前面的博客分析了关联分析中非常重要的一个算法-FP Growth.该算法根据数据库在内 ...

  3. FP Growth算法

    转载自:http://blog.sina.com.cn/s/blog_68ffc7a40100uebg.html FP树构造 FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法 ...

  4. MapReduce框架下的FP Growth算法详解

    转载自:http://blog.sina.com.cn/s/blog_68ffc7a40100uebk.html Sharding 这一步没什么好讲的,将数据库分成连续的大小相等的几个块,放置在不同的 ...

  5. FP Growth算法详解

    看了n多资料,就这篇说的比较详细,适合初学者 FP树构造 FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法的代价,他不需要不断得生成候选项目队列和不断得扫描整个数据库进行比对 ...

  6. 从啤酒和尿布讲关联规则,大数据集处理算法Apriori以及改进的PCY算法

    本文将讲解关联规则的相关概念.处理相关规则的一般算法.改进的大数据处理关联规则的Apriori算法以及进一步优化的PCY算法. 啤酒和尿布的故事已经广为人晓.很多年轻的父亲买尿布的时候会顺便为自己买一 ...

  7. FP Tree算法原理总结(转)

    FP Tree算法原理总结 转自: https://www.cnblogs.com/zhengxingpeng/p/6679280.html 总结得太好了. FP Tree算法原理总结 在Aprior ...

  8. FP Tree算法原理

    作为一个挖掘频繁项集的算法,Apriori算法需要多次扫描数据,I/O是很大的瓶颈.为了解决这个问题,FP Tree算法(也称FP Growth算法)采用了一些技巧,无论多少数据,只需要扫描两次数据集 ...

  9. 数据分享|R语言关联规则挖掘apriori算法挖掘评估汽车性能数据

    全文链接:http://tecdat.cn/?p=32092 我们一般把一件事情发生,对另一件事情也会产生影响的关系叫做关联.而关联分析就是在大量数据中发现项集之间有趣的关联和相关联系(形如" ...

  10. python实现关联算法_关联规则算法Apriori学习及Python实现

    关联规则算法Apriori以及FP-growth学习 最近选择了关联规则算法进行学习,目标是先学习Apriori算法,再转FP-growth算法,因为Spark-mllib库支持的关联算法是FP,随笔 ...

最新文章

  1. 第十七届智能车竞赛LOGO设计
  2. telegraf输出MySQL_如何使用Telegraf拖尾远程日志文件
  3. JavaScript规范和工具 JSlint
  4. eclipse 安装vim插件
  5. 前端基础-html-表格的基本标签和相关属性
  6. 三、处理机调度与死锁
  7. 音视频技术傻瓜版解析:带你解锁RTMP
  8. 微信小程序全面开放近一年,姗姗来迟的阿里还有胜局吗?| 畅言
  9. 使用 CodeIgniter 框架快速开发 PHP 应用(四)
  10. bootstrap 常用的导航组件
  11. HP 8440P 4G内存蓝屏--内存颗粒容量支持问题
  12. 【不务正业】之前端HTML基础(二)
  13. PostgreSQL数据库概述
  14. wifi营销php,协成wifi,协成WIFI营销系统2.0,协成智慧无线源码2.0完整版
  15. 江南大学c语言课程绩点评分,江南大学无锡医学院课程考核档案管理办法
  16. python灰色预测_【数学建模】灰色预测及Python实现
  17. 要是卢安娜的飓风可以触发所有远程英雄的技能,哪些英雄最强?
  18. eval函数和repr函数
  19. 安卓课程设计之记账本_基于Android个人用户记账本系统课程设计报告
  20. 淡季累库,黑色短期高位震荡看待(20210104).PDF

热门文章

  1. Iphone隐藏键盘代码
  2. Mysql binlog数据恢复(使用mysqlbinlog_flashback逆向生成SQL语句)
  3. 渗透测试之暴力破解路由器wifi(加强安全意识)
  4. 2020再也不见,2021与你相约!
  5. 腾讯应用宝上架APP给安卓空白包签名
  6. preload linux 多个,Linux下LD_PRELOAD的简单用法
  7. csdn写文章自定义表格怎么做
  8. linux smartctl 命令,Linux smartctl命令
  9. coc-lua安装报错解决办法
  10. 基本包装类型和引用类型