今日数据挖掘课学习了Apriori算法,特意总结下,因为自己是大三弱鸡,很多地方参考了下面dalao的博文

https://blog.csdn.net/baimafujinji/article/details/53456931

非常感谢!

Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集。而且算法已经被广泛的应用到商业、网络安全等各个领域。

基本概念

许多商业企业在日复一日的运营中积聚了大量的交易数据。例如,超市的收银台每天都收集大量的顾客购物数据。例如,下表给出了一个这种数据集的例子,我们通常称其为购物篮交易(market basket transaction)。表中每一行对应一个交易,包含一个唯一标识TID和特定顾客购买的商品集合。零售商对分析这些数据很感兴趣,以便了解其顾客的购买行为。可以使用这种有价值的信息来支持各种商业中的实际应用,如市场促销,库存管理和顾客关系管理等等。

令I={i1,i2,⋯,id}是购物篮数据中所有项的集合,而T={t1,t2,⋯,tN}是所有交易的集合。包含0个或多个项的集合被称为项集(itemset)。如果一个项集包含k个项,则称它为 k-项集。显然,每个交易ti包含的项集都是I的子集。

关联规则是形如X→Y的蕴涵式,其中且, X和Y分别称为关联规则的先导(antecedent或left-hand-side, LHS)和后继(consequent或right-hand-side, RHS) 。其中X和Y是不相交的项集,即 X∩Y=∅。关联规则的强度可以用它的支持度(support)和置信度(confidence)来度量。支持度确定规则可以用于给定数据集的频繁程度,而置信度确定Y在包含X的交易中出现的频繁程度。支持度(s)和置信度(c)这两种度量的形式定义如下:

例如考虑规则{Milk, Diaper}→→{Beer},则易得


基本名词概念

强规则:同时满足最小支持度阈值和最小置信度阈值的规则。

频繁项集:满足最小支持度阈值的项集。

所以一般来说,排除空集后,一个包含k个项的数据集可能产生2^k−1个频繁项集。在这发现搜索频繁项集的规模是指数级别。普通的模式匹配算法(BF)计算将非常复杂,所以下面将提及一种新的算法也就Apriori算法


Apriori算法 

Apriori算法使用频繁项集的先验知识,使用一种称作逐层搜索的迭代方法,k项集用于探索(k+1)项集。首先,通过扫描事务(交易)记录,找出所有的频繁1项集,该集合记做L1,然后利用L1找频繁2项集的集合L2,L2找L3,如此下去,直到不能再找到任何频繁k项集。最后再在所有的频繁集中找出强规则,即产生用户感兴趣的关联规则。

算法流程及伪代码

1. 单趟扫描数据库D;计算出各个1项集的支持度,得到频繁1项集的集合,即L1。

2. 从2项集开始循环,由频繁k-1项集生成频繁频繁k项集。

2.1  连接

2.2  剪枝

2.3  扫描数据库,计算2.3步中过滤后的k项集的支持度,舍弃掉支持度小于阈值的项集,生成频繁k项集。

3.  当当前生成的频繁k项集中只有一个项集时循环结束

在剪枝的步骤中采用Apriori中两个定律进行剪枝

Apriori定律1:如果一个集合是频繁项集,则它的所有子集都是频繁项集。

例如:假设一个集合{A,B}是频繁项集,即A、B同时出现在一条记录的次数大于等于最小支持度min_support,则它的子集{A},{B}出现次数必定大于等于min_support,即它的子集都是频繁项集。

Apriori定律2:如果一个集合不是频繁项集,则它的所有超集都不是频繁项集。

举例:假设集合{A}不是频繁项集,即A出现的次数小于 min_support,则它的任何超集如{A,B}出现的次数必定小于min_support,因此其超集必定也不是频繁项集。

Apriori举例(课上老师也用此经典例子讲解)

最开始数据库里有4条交易,{A、C、D},{B、C、E},{A、B、C、E},{B、E},使用min_support=2作为支持度阈值,最后我们筛选出来的频繁集为{B、C、E}

自己分析:

1.首先扫描1项集,将低于min_support的删去得到L1

2.L1的基础上进行连接操作实质形成2项集,即C2

3.在C2上做第二次扫描得到每一项的相应的支持度

4.然后做剪枝操作得到相应的L2,删除掉了{A,B},{B,E}还是因为它们的支持度小于min_support

5.在L2上做连接操作,其中只能BCE,那么为什么不能得到ABC、ACE这两个呢?其实观察ABC(含有AB)、ACE含有(AE),而AB、AE已在C2剪枝中小于min_support舍弃掉了

6.再次扫描数据库得到相应的支持度

最后我们可以根据结果写出关联规则,而根据经验将选取这些关联规则中支持度较小,可信度较高的

priori算法的缺点:

(1)由频繁k-1项集进行自连接生成的候选频繁k项集数量巨大。(2)在验证候选频繁k项集的时候要对整个数据库进行扫描,非常耗时。

priori算法改进方法:

(1)hash(2)FP-Tree(3)层次划分(即将精细的划分,进行泛化),比如将全脂牛奶等不同很精细的牛奶泛化为牛奶,全麦面包等精细的种类面包泛化为面包,当然这要考虑实际情况。

还有很多方法就不一一提及了,毕竟自己还是个弱鸡!


数据挖掘—Apriori算法相关推荐

  1. 数据挖掘Apriori算法

    数据挖掘Apriori算法 数据挖掘(Data Mining)就是从大量的.不完全的.有噪声的.模糊的.随机的实际应用数据中,提取隐含在其中的.人们事先不知道的.但又是潜在有用的信息和知识的过程.挖掘 ...

  2. java实现数据挖掘_数据挖掘Apriori算法的java实现

    对于Apriori算法,Apriori算法是一种挖掘关联规则的频繁项集算法,在很多领域中应用广泛. 它的算法思想是: 1先找到所有的小频繁项集, 2然后做连接步骤,将小频繁项集拼接作为候选集, 3然后 ...

  3. java数据挖掘算法_[转载]干货,基于Java和C++的数据挖掘Apriori算法实现

    Apriori算法实现 Apriori算法的思想还是很容易理解的,实现起来虽然麻烦,但是还是比较容易的.下面是我使用Java语言实现的Apriori算法,实现了AprioriAlgorithm 类,包 ...

  4. 数据挖掘—Apriori算法(Java实现)

    算法描述 (1)扫描全部数据,产生候选1-项集的集合C1: (2)根据最小支持度,由候选1-项集的集合C1产生频繁1-项集的集合L1: (3)对k>1,重复执行步骤(4).(5).(6): (4 ...

  5. 【数据挖掘】关联规则挖掘 Apriori 算法 ( Apriori 算法过程 | Apriori 算法示例 )

    文章目录 一. Apriori 算法过程 二. Apriori 算法示例 参考博客 : [数据挖掘]关联规则挖掘 Apriori 算法 ( 关联规则简介 | 数据集 与 事物 Transaction ...

  6. 【数据挖掘】关联规则挖掘 Apriori 算法 ( 关联规则性质 | 非频繁项集超集性质 | 频繁项集子集性质 | 项集与超集支持度性质 )

    文章目录 一. 非频繁项集超集性质 二. 频繁项集子集性质 三. 项集与超集支持度性质 参考博客 : [数据挖掘]关联规则挖掘 Apriori 算法 ( 关联规则简介 | 数据集 与 事物 Trans ...

  7. 【数据挖掘】关联规则挖掘 Apriori 算法 ( 频繁项集 | 非频繁项集 | 强关联规则 | 弱关联规则 | 发现关联规则 )

    文章目录 一. 频繁项集 二. 非频繁项集 三. 强关联规则 四. 弱关联规则 五. 发现关联规则 参考博客 : [数据挖掘]关联规则挖掘 Apriori 算法 ( 关联规则简介 | 数据集 与 事物 ...

  8. 【数据挖掘】关联规则挖掘 Apriori 算法 ( 关联规则 | 数据项支持度 | 关联规则支持度 )

    文章目录 一. 关联规则 二. 数据项支持度 三. 关联规则支持度 参考博客 : [数据挖掘]关联规则挖掘 Apriori 算法 ( 关联规则简介 | 数据集 与 事物 Transaction 概念 ...

  9. 【数据挖掘】关联规则挖掘 Apriori 算法 ( 关联规则简介 | 数据集 与 事物 Transaction 概念 | 项 Item 概念 | 项集 Item Set | 频繁项集 | 示例解析 )

    文章目录 一. 关联规则挖掘简介 二. 数据集 与 事物 ( Transaction ) 概念 三.项 ( Item ) 概念 四.项集 ( Item Set ) 概念 五.频繁项集 六.数据集.事物 ...

  10. 【数据挖掘】数据挖掘算法 组件化思想 示例分析 ( 组件化思想 | Apriori 算法 | K-means 算法 | ID3 算法 )

    文章目录 一. 数据挖掘算法组件化思想 二. Apriori 算法 ( 关联分析算法 ) 三. K-means 算法 ( 聚类分析算法 ) 四. ID3 算法 ( 决策树算法 ) 一. 数据挖掘算法组 ...

最新文章

  1. 伯克利新无监督强化学习方法:减少混沌所产生的突现行为
  2. ubuntu16.04 cuda8.0 caffe 编译 error: cublas_v2.h 没有那个文件或目录
  3. OpenCV学习笔记(3)——Scalar数据类型理解
  4. javascript动态创建可拖动、最大化、最小化的层
  5. 【Linux】一步一步学Linux——pkill命令(126)
  6. 这可能是关于Pytorch底层算子扩展最详细的总结了!
  7. 阿里一面 —— 什么是多线程?
  8. 为啥学java要看那么多东西_编程语言那么多,为啥学Java的人那么多?
  9. 有时候还逃课的视频转换
  10. ASP.NET常用代码汇总
  11. 创建loop15设备挂载镜像文件(.img)
  12. 装Windows 8 过程中遇到的问题,及解决方案
  13. DEV 实现CheckBox单选
  14. paip.提升用户体验--radio图片选择器 easyui 实现..
  15. 6. 机器人正运动学---齐次变换矩阵的三种解读
  16. youtube-dl 安装和用法
  17. 兜兜转转。最终还是选择了它——C语言学习历程
  18. C语言小案例_微信小程序开发(教学大纲) | 附视频
  19. Java小白 学习笔记(二)——2020版Java语言基础
  20. 推荐几个全网最全的程序员接私活地方法或完整攻略或常用平台以及接单的注意事项(以免被雇主坑),比如国内的程序员客栈、CODING 码市,国外的Upwork、Freelancer、Dribbble等。

热门文章

  1. APK安装流程:点击下载应用了解安装的全过程
  2. catia之车灯设计
  3. i7 9750h和i7 8750h参数对比差多少
  4. 这个 bug,硬是让我折腾了一周
  5. java+动态修改prooper_Spring Aop 权限开发(Java后台管理权限) (完整版)
  6. 好用的倒计时APP 可以同时开多个倒数计时器的便签
  7. 基于html+css房地产销售系统设计与实现-计算机毕业设计源码+LW文档
  8. 离散数学——主析取范式与主合取范式原理探究
  9. 桌面版linux装哪个版本好用,linux桌面版哪个版本好用?
  10. 详解python使用browsermobproxy获取当前网页xhr的get数据方法