一、 Apriori关联分析概述

选择物品之间的关联规则也就是要找出物品之间的关系,要找到这种关系有两步

  1. 找出频繁一起出现的物品集的集合,我们称之为频繁项集,比如一个超市的频繁项集可能有{{啤酒,尿布}{鸡蛋,牛奶}{香蕉,苹果}}
  2. 在频繁项集的基础上,使用关联规则算法找出其中的关联结果

    也就是先找到频繁项集,再根据关联规则再找出关联物品

二、 关联分析的几个概念

这里有一份交易记录

编号 0 1 2 3 4 5

购买商品集合 {牛奶,洋葱,豆蔻, 芸豆,鸡蛋, 酸奶} ,{菠萝,洋葱,豆蔻,芸豆,鸡蛋,酸奶},{牛奶,独角兽,玉米,酸奶},{玉米,洋葱,洋葱,鸡蛋}

2.1 关键概念

支持度 :支持度可以理解为商品的流行程度

支持度 = (包含物品A的记录数) / (总的记录数)

用上面的例子举例,一共有5次交易,牛奶出现在3次交易中,故牛奶的支持度3/5

置信度 置信度是指如果购买A,则有较大可能性购买B

置信度 (A>B) = (包含物品A和B的记录数量)/(包含A的数量)

举例:我们已经知道, (牛奶, 鸡蛋)一起购买的次数是两次, 鸡蛋购买次数是4次,那么confidence(牛奶> 鸡蛋)的记录就是2/4

提升度:提升度指当销售一个物品时,另一个物品的销售率会增加多少,计算方式是:

提升度(A>B) = 置信度 (A>B)/支持度A

当提升度大于1的时候,表示A卖的越多,B也会卖的越多。提升度等于1表示产品A和B没有关联。最后提升度小于1则意味着购买A 反而会减少B的购买

举例:上面我们说的牛奶和鸡蛋的置信度是2/4, 牛奶的支持度是3/5,那么就能计算出牛奶和鸡蛋的支持度0.83

2.2 关联规则

如果一个关联结果的置信度低,那么所有超集的置信度也低

Apriori算法介绍

支持度越高,物品越受欢迎,那么支持度是怎么决定的呢,这个是我们主观决定的,我们会给Apriori提供一个最小支持度参数,然后Apriori会返回比这个最小支持度高的那些频繁项集

利用一个思想加速运算:如果一个项集子集是不频繁的,那么他的超集也都是不频繁的,例如如果发现项集{A,B}是非频繁的, 那么他所组成的超集也是非频繁的{A, B, C}, {A, B, D} 等等我们就可以去忽略不计了

三、 Apriori算法流程

要用Apriori算法,我们需要提供两个参数:数据集和最小支持度,Aprori算法会通过递归遍历所有的数据集组合,先遍历一个物品组合的情况,剔除掉支持度低于最小支持度的数据项,然后用剩下的物品进行组合,遍历两个物品组合的情况,再剔除不满足条件的组合。不断递归下去,直到不再有物品可以递归组合。

# def apriori(df, min_support=0.5,use_colnames=False, max_len=None)
# df 数据集
# min_support 给定的最小支持度
# use_colnames 默认为false,返回物品编号的组合显示,为True的话直接显示物品名称
# max_len 最大物品组合数,默认为NOne,不做限制。如果只想返回两个物品组合的话,便将这个设置为2
import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori
# 设置数据集
dataset = [['牛奶','洋葱','肉豆蔻','芸豆','鸡蛋','酸奶'],
['莳萝','洋葱','肉豆蔻','芸豆','鸡蛋','酸奶'],
['牛奶','苹果','芸豆','鸡蛋'],
['牛奶','独角兽','玉米','芸豆','酸奶'],
['玉米','洋葱','洋葱','芸豆','冰淇淋','鸡蛋']]
te = TransactionEncoder()
# 进行onehot编码
te_any = te.fit(dataset).transform(dataset)
df = pd.DataFrame(te_any, columns= te.columns_)
df
# 利用Aprori算法找出频繁项集
freq = apriori(df, min_support=0.6, use_colnames=True)
from mlxtend.frequent_patterns import association_rules
result = association_rules(freq, metric='confidence',min_threshold=0.6)
result.sort_values(by='confidence',ascending=False).head(10)

Apriori关联分析详解的更多相关文章

  1. Apriori 关联分析算法原理分析与代码实现

    前言 想必大家都听过数据挖掘领域那个经典的故事 - "啤酒与尿布" 的故事. 那么,具体是怎么从海量销售信息中挖掘出啤酒和尿布之间的关系呢? 这就是关联分析所要完成的任务了. 本文 ...

  2. Memcache的使用和协议分析详解

    Memcache的使用和协议分析详解 作者:heiyeluren博客:http://blog.csdn.NET/heiyeshuwu时间:2006-11-12关键字:PHP Memcache Linu ...

  3. wav文件格式分析详解

    wav文件格式分析详解 文章转载自:http://blog.csdn.net/BlueSoal/article/details/932395 一.综述    WAVE文件作为多媒体中使用的声波文件格式 ...

  4. 线程组ThreadGroup分析详解 多线程中篇(三)

    线程组,顾名思义,就是线程的组,逻辑类似项目组,用于管理项目成员,线程组就是用来管理线程. 每个线程都会有一个线程组,如果没有设置将会有些默认的初始化设置 而在java中线程组则是使用类ThreadG ...

  5. HanLP中人名识别分析详解

    HanLP中人名识别分析详解 在看源码之前,先看几遍论文<基于角色标注的中国人名自动识别研究> 关于命名识别的一些问题,可参考下列一些issue: l ·名字识别的问题 #387 l ·机 ...

  6. 第十四篇:Apriori 关联分析算法原理分析与代码实现

    前言 想必大家都听过数据挖掘领域那个经典的故事 - "啤酒与尿布" 的故事. 那么,具体是怎么从海量销售信息中挖掘出啤酒和尿布之间的关系呢? 这就是关联分析所要完成的任务了. 本文 ...

  7. 深入浅出Apriori关联分析算法(一)

    在美国有这样一家奇怪的超市,它将啤酒与尿布这样两个奇怪的东西放在一起进行销售,并且最终让啤酒与尿布这两个看起来没有关联的东西的销量双双增加.这家超市的名字叫做沃尔玛. 你会不会觉得有些不可思议?虽然事 ...

  8. Python --深入浅出Apriori关联分析算法(二) Apriori关联规则实战

    上一篇我们讲了关联分析的几个概念,支持度,置信度,提升度.以及如何利用Apriori算法高效地根据物品的支持度找出所有物品的频繁项集. Python --深入浅出Apriori关联分析算法(一) 这次 ...

  9. GC日志分析详解

    点击返回上层目录 原创声明:作者:Arnold.zhao 博客园地址:https://www.cnblogs.com/zh94 GC日志分析详解 以ParallelGC为例,YoungGC日志解释如下 ...

随机推荐

  1. js-03-if条件判断

    一.swich case判断语句eg <script> swich( exp){ case 值1: 执行的代码段: break; case 值2: 执行的代码段: break; ..... ...

  2. Dynamics 365 Customer Engagement的标准导入不支持并行导入了吗?

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  3. QGIS 3.4 3.6 另存栅格图层到GeoPackage出现覆盖问题 解决方案

    转载请声明:博客园 @秋意正寒 升级你的QGIS到3.8或以上 这在3.4.x和3.6.x都存在同样的问题.在老版本QGIS重,如果新建一个GeoPackage,先存入栅格数据就没有这个问题,但是如果 ...

  4. springboot之jpa的支持

    1.springboot之jpa支持 2.Springboot+bootstrap界面版之增删改查及图片上传 springboot之jpa支持 导入相关pom依赖 <dependency> ...

  5. dp习题

    仅收录有意思的题目 数的划分 导弹拦截 : LIS的两种优化 教主的花园:将不同的情况分类,最后取max 午餐 & 挂饰: 需要排序 挂饰:0-1背包处理负数体积 投资的最大效益 : 完全背包 ...

  6. git 分布式控制版本管理器(上)

    git的作用: 1.更方便的存储版本 2.恢复之前的版本 3.更方便的对比 4.协同合作 下载地址git官网: https://git-scm.com/ 可自选自己电脑的操作系统 安装: 一路next ...

  7. 荧屏弹幕_新增h5requestAnimationFrame实现

    所有的页面逻辑也是比较简单,用原生js实现,封装也是比较简单!要让页面效果更为炫酷,则可去引入相应的css,背景图片自己去img/下下载引入喔! HTML页面 <!doctype html> ...

  8. 我眼中的 RPC

    目录 什么是 RPC ? 什么情况下使用 RPC ? RPC 框架原理 RPC 调用过程 RPC 优点 RPC 缺点 PHP RPC 有哪些? 小结 推荐阅读 什么是 RPC ? RPC 是一种框架或 ...

  9. javascript截取字符串的最后几个字符

    在JavaScript中截取字符串一般是使用内置的substring()方法和substr()方法,这两个方法功能都很强大,也都能实现截取字符串中的最后几个字符. substring()方法 Java ...

  10. Blazor入坑指南

    一 为什么用Blazor 原本就是后端程序员, 技术栈基于C#, 懂一点前端jQuery/Html 不管是webAssembly还是ServerSide, 就是想方便地做单页应用, 能wasm自然更好 ...