目录

  • 一、关联挖掘基本概念——从购物篮分析说起
  • 二、关联规则经典算法[^1]
    • 2.1 相关术语
    • 2.2 Apriori算法
    • 2.3 FP-Growth算法
      • FP-Tree的构造
      • 从FP-Tree中提取频繁项集
    • 2.4 应用:自动推荐
  • 三、关联分类算法
    • 3.1 CBA算法
    • 3.2 应用:文本分类[^2]

一、关联挖掘基本概念——从购物篮分析说起

摘自文章:购物篮分析模型实例——数据分析必备模型

关联挖掘起源于“购物篮分析”,据说沃尔玛的超市管理人‎‎员分析销售数据时发现:婴儿纸尿裤和啤酒放通常会出现在一个订单里,原因似乎是买尿不湿的家长以父亲居多,如果他们在买尿不湿的同时恰好看到了啤酒,就会有很大的概率购买,从而就能提高啤酒的销售量。

这种这种通过研究用户消费数据,将不同商品之间进行关联,并挖掘二者之间联系的分析方法,就叫做商品关联分析法,即购物篮分析模型。

如何判断商品之间的关联程度呢?我们有以下三个经典的指标:

「支持度」:A商品和B商品同时被购买的概率,显然支持度越大,商品间关联性越强。计算公式:同时购买A和B订单数 / 总购买订单数,即:

support=freq(A,B)num(AllSamples)support = \frac{freq(A,B)}{num(AllSamples)} support=num(AllSamples)freq(A,B)​

今天共有10笔订单,其中同时购买可乐和薯片的次数是7次,那么可乐+薯片组合的支持度就是7/10=70%。

「置信度」:因为购买了A所以购买了B的概率。计算公式:同时购买A和B订单数 / 购买A的订单数,即:
confidence=freq(A,B)freq(A)confidence = \frac{freq(A,B)}{freq(A)} confidence=freq(A)freq(A,B)​

今天共有10笔订单,其中购买可乐的次数是4,同时购买可乐和薯片的次数是3,则其置信度是3/4=75%

「提升度」:先购买A对购买B的提升作用,用来判断商品组合方式是否具有实际价值,大于1说明该组合方式有效,小于1则说明无效。计算公式:支持度 / ( (购买A次数/总购买订单数)*(购买B次数/总购买订单数) ),即:

lift=SupportSupport(A)×Support(B)lift = \frac{Support}{Support(A)\times Support(B)} lift=Support(A)×Support(B)Support​

今天共有10笔订单,购买可乐的次数是8,购买薯片的次数是6,购买可乐+薯片的次数是6,那么提升度是0.6 /(0.8*0.6)>1,因此可乐+薯片的组合方式是有效的。

关联分析,即找到一定的关联规则,使得支持度、置信度或提升度能够满足规定的阈值。


二、关联规则经典算法1

2.1 相关术语

1、事务(Transaction Data Itemset, TI):每一条交易称为一个事务,对应表格中的行。

2、项(Item):交易的每一个物品称为一个项,例如Cola、Egg等。

3、项集(Itemset):包含零个或多个项的集合叫做项集,例如{Cola, Egg, Ham}。

4、k−项集:包含k个项的项集叫做k-项集,例如{Cola}叫做1-项集,{Cola, Egg}叫做2-项集。

5、支持度计数:一个项集出现在几个事务当中,它的支持度计数就是几。例如{Diaper, Beer}出现在事务002、003和004中,所以它的支持度计数是3。

6、频繁项集(Frequent Itemset):支持度大于或等于某个阈值的项集就叫做频繁项集。例如阈值设为50%时,因为{Diaper, Beer}的支持度是75%,所以它是频繁项集。

7、最大频繁项(Max Frequent Itemset):如果频繁项集L的所有超集都是非频繁项集,那么称L为最大频繁项集。例如S1={abc}S_1 = \{abc\}S1​={abc}和S2={bc}S_2=\{bc\}S2​={bc}均是频繁项,但由于S1S_1S1​是S2S_2S2​的父集,故S2S_2S2​并非最大频繁项。

8、前件(LHS)和后件(RHS):对于规则{Diaper}→{Beer},{Diaper}叫做前件,{Beer}叫做后件。

9、强关联规则:大于或等于最小支持度阈值和最小置信度阈值的规则叫做强关联规则。关联分析的最终目标就是要找出强关联规则。

2.2 Apriori算法

摘自文章:Apriori算法的介绍

这是一个采用支持度作为指标的算法,使用简单的递归思想。该算法基于一个先验定理:

  • 如果某个项集是频繁的,那么它的所有子集也是频繁的;
  • 如果一个集合不是频繁项集,则它的所有父集(超集)都不是频繁项集。

通过这些定理,可以提升算法的效率。

Apriori算法流程: 由频繁(k-1)-项集生成候选k-项集,然后根据最小支持度判断该候选k-项集是否是频繁k-项集。

使用以下购物篮信息举例说明:

TID Items
001 Cola, Egg, Ham
002 Cola, Diaper, Beer
003 Cola, Diaper, Beer, Ham
004 Diaper, Beer

若将最小支持度阈值设为50%,则对于表中的购物篮信息,
其频繁1-项集为:
{Cola} 3
{Diaper} 3
{Beer} 3
{Ham} 2

频繁2-项集为:
{Cola, Diaper} 2
{Cola, Beer} 2
{Cola,Ham} 2
{Diaper, Beer} 3

频繁3-项集为:
{Cola, Diaper, Beer} 2

这样,就可以找到商品的最佳组合。

我们可以看到,Apriori算法是通过频繁(k-1)-项集找到频繁k-项集的,虽然可以通过去除非频繁项集的父集来减少运算,但还是需要不断地扫描数据集,求解候选项集的支持度计数从而判断它是否是频繁项集。如果数据集较大,算法的低效问题就会凸显出来。由此便出现了基于树结构的FP-growth算法:

2.3 FP-Growth算法

摘自文章:FP-Growth算法的介绍

这是一个基于树的算法,思路是把数据集中的事务映射到一棵FP-Tree上面,再根据这棵树找出频繁项集。

FP-Tree的构造

对于2.2中的数据,目标是构造出如下的树:

具体步骤为:

  • 统计项数,构建频繁项列表:将项按照支持度计数递减排序,仅考虑满足支持度阈值的节点,得到频繁1-项集作为频繁项列表LLL;
  • 逐条扫描事务,构建FP-Tree:将每条事务的项按照LLL排序,将每个项逐个添加到FP-Tree的分枝上去。遇到共用的头结点时,共用节点计数值+1+1+1并增添相应的子树节点。

从FP-Tree中提取频繁项集

对于2.2中的数据,目标是提取出频繁项集。为此,需要先构造各个频繁项的条件FP-Tree

求以“Ham”为后缀的频繁项集步骤如下

  • 根据头结点表找出“Ham”结尾的路径及出现的次数计数:<Cola:3, Ham:1> 和<Cola:3, Diaper:2, Beer:2, Ham:1>。
  • “Ham”的两个前缀路径{(Cola:1), (Cola Diaper Beer:1)}构成了“Ham”的条件模式基,注意条件模式基的计数都定义为了“Ham”的计数。
  • 根据条件模式基构建“Ham”的条件FP-树:因为在Ham的条件模式基中 Diaper、Beer 只出现了一次,Coal 出现了两次,所以 Diaper、Beer 是非频繁项,不包含在Ham的条件FP-树中。
  • “Ham”的条件FP-树只有一个分支< Cola:2 >,得到条件频繁项集 {Cola:2}。
  • 条件频繁项集 {Cola:2} 和后缀模式“Ham”合并,得到频繁项集 {Cola Ham:2}。

在某些场景中,我们只需要获得“最大频繁项”。因此,出现了仅专注于最大频繁项的FP-MAX算法。

2.4 应用:自动推荐

摘自文章:数据挖掘怎么做关联性分析呢?

关联分析可以通过提取商品、视频、文章数据的频繁项集,从而实现新闻资讯、短视频、微博等应用的自动推荐。

以豌豆DM分析订单数据为例,该系统采用经典Apriori和FP-Tree算法,整个过程分为如下几个步骤:

#mermaid-svg-GW4QHCLEgF6Dwvcb {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GW4QHCLEgF6Dwvcb .error-icon{fill:#552222;}#mermaid-svg-GW4QHCLEgF6Dwvcb .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GW4QHCLEgF6Dwvcb .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-GW4QHCLEgF6Dwvcb .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GW4QHCLEgF6Dwvcb .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GW4QHCLEgF6Dwvcb .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GW4QHCLEgF6Dwvcb .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GW4QHCLEgF6Dwvcb .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GW4QHCLEgF6Dwvcb .marker.cross{stroke:#333333;}#mermaid-svg-GW4QHCLEgF6Dwvcb svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GW4QHCLEgF6Dwvcb .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-GW4QHCLEgF6Dwvcb .cluster-label text{fill:#333;}#mermaid-svg-GW4QHCLEgF6Dwvcb .cluster-label span{color:#333;}#mermaid-svg-GW4QHCLEgF6Dwvcb .label text,#mermaid-svg-GW4QHCLEgF6Dwvcb span{fill:#333;color:#333;}#mermaid-svg-GW4QHCLEgF6Dwvcb .node rect,#mermaid-svg-GW4QHCLEgF6Dwvcb .node circle,#mermaid-svg-GW4QHCLEgF6Dwvcb .node ellipse,#mermaid-svg-GW4QHCLEgF6Dwvcb .node polygon,#mermaid-svg-GW4QHCLEgF6Dwvcb .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-GW4QHCLEgF6Dwvcb .node .label{text-align:center;}#mermaid-svg-GW4QHCLEgF6Dwvcb .node.clickable{cursor:pointer;}#mermaid-svg-GW4QHCLEgF6Dwvcb .arrowheadPath{fill:#333333;}#mermaid-svg-GW4QHCLEgF6Dwvcb .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-GW4QHCLEgF6Dwvcb .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-GW4QHCLEgF6Dwvcb .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-GW4QHCLEgF6Dwvcb .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-GW4QHCLEgF6Dwvcb .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-GW4QHCLEgF6Dwvcb .cluster text{fill:#333;}#mermaid-svg-GW4QHCLEgF6Dwvcb .cluster span{color:#333;}#mermaid-svg-GW4QHCLEgF6Dwvcb div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-GW4QHCLEgF6Dwvcb :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

创建数据集
数据预处理
构建模型
模型应用
  • 创建数据集: 收集用户订单,将商品进行分类命名,获得类似表2.2中购物篮信息的数据集。
  • 数据预处理: 查看数据是否存在缺失值,剔除缺失的数据。而对于此案例中商品的重复值是有意义的,不需要剔除。关于数据预处理的更多方法可见【待补充】
  • 构建模型: 选择适合的算法训练模型,设置并调整支持度和可信度阈值,获得关联规则,如啤酒+苏打->饼干
  • 模型应用 为关联规则构建应用接口,当用户购买了啤酒、苏打时,系统就会应用该规则,为用户自动推荐饼干。

三、关联分类算法

3.1 CBA算法

摘自文章:关联规则挖掘算法_关联规则的挖掘与应用——Apriori和CBA算法

CBA算法,即Classification Based on Association,是基于关联规则进行分类的算法。该算法引入了一个概念称为类别关联规则(CAR),这一规则在原来的基础上给蕴含式的后件(RHS)添加了限制条件,限制每个规则的后件只包含一个项以对应一个分类标签。

CBA算法步骤:

  • 通过Apriori算法挖掘CARs;
  • 对得到的CARs进行剪枝、排序;
  • 第一条能匹配上的类别规则即为对应分类。

在第二步中,对于可能出现过多的CARs,CBA算法对优先级高的规则定义为:

  • 置信度较高者;
  • 置信度相等情况下支持度较高者;
  • 两者都相等的情况下,包含的项数较少者。

比如对于如下的数据(原始标签已对应成数字):

Rid Age Income Student CreditRating BuysComputer
1 1 4 7 9 11
2 1 4 7 10 11
3 2 4 7 9 12
4 3 5 7 9 12

挖掘得到如下频繁项集:

频繁1项集:
{1,},{2,},{3,},{4,},{5,},{6,},{7,},{8,},{9,},{10,},{11,},{12,},
频繁2项集:
{1,7,},{1,9,},{1,11,},{2,12,},{3,5,},{3,8,},{3,9,},{3,12,},{4,7,},{4,9,},
{5,7,},{5,9,},{5,10,},{5,12,},{6,8,},{6,12,},{7,9,},{7,10,},{7,11,},
{7,12,},{8,9,},{8,10,},{8,12,},{9,12,},{10,11,},{10,12,},
频繁3项集:
{1,7,11,},{3,9,12,},{6,8,12,},{8,9,12,},

则Age=3, CreditRating=9的关联分类结果为12.

数据来源:CBA算法—基于关联规则进行分类的算法


3.2 应用:文本分类2

基于关联规则的分类文本分类中,将文本视作事务,特征词视作项,通过发现特征词之间的关联关系来确定当一个文本包含某些特征词时,其可能属于某一类或某几类。

典型的分类规则算法包括CBA(基于Apriori算法)、CMAR(基于FP-Tree算法)等。在生成关联规则后,分类关联算法还需要对关联规则进行剪枝,获得尽可能少的高优先级规则,构造一个分类器

以文章为例,具体包括以下步骤:

  • 文本预处理:分词、删除停用词
  • 特征选择:对分词结果进行筛选,使用一定的评估函数,选出前N个最具代表性的特征。特征的评估函数主要有信息增益、互信息、χ2\chi^2χ2统计、TF-IDF法等。
  • 文本的向量表示:将文本表示为特征空间中的一个向量,其中wi,jw_{i,j}wi,j​表示第iii个特征词在第jjj篇文本中的权重(即词频)。
    [w1,1.....................wij]\left[ \begin{matrix} w_{1,1} & ... & ...\\ ... & ... & ... \\ ... & ... & w_{ij} \end{matrix} \right] ⎣⎡​w1,1​......​.........​......wij​​⎦⎤​
  • 关联规则产生:将文本视作事务,特征词视作项,获得最大频繁项集,表示当一个文本包含什么样的特征词时,可能会被分类在同一类中。例如一个频繁项集S养生S_{养生}S养生​的规则中包括{水果,蔬菜,枸杞}\{水果,蔬菜,枸杞\}{水果,蔬菜,枸杞},则当一个文本同时出现这三个词时,更可能会被归到这一类中;
  • 构建分类器:采用一定的标准对关联规则对训练数据进行排序,选取优先级较高的关联规则作为分类器;
  • 测试数据:使用分类器分类测试数据,对结果计算召回率、准确率、F1值,评估分类器的效果。

此外,关联分析的应用还包括入侵检测、隐私保护数据挖掘等,待补充……


  1. 崔妍,包志强.关联规则挖掘综述[J].计算机应用研究,2016,33(02):330-334. ↩︎

  2. 赵耀. 基于关联规则的文本分类研究[D].河北大学,2010. ↩︎

关联挖掘算法及其应用(1)相关推荐

  1. [机器学习]关联挖掘算法Apriori和FP-Growth以及基于Spark 实例

    目录 Apriori 算法 FP-Growth算法 算法原理 步骤1 统计各个商品被购买的频次 步骤2 构建FP树 步骤3 频繁项的挖掘 阅读本文需要了解关联挖掘的基本知识,了解关联挖掘的基本原理,参 ...

  2. 关联挖掘算法Apriori和FP-Tree学习

    http://blog.csdn.net/sealyao/article/details/6460578 Apriori算法和FPTree算法都是数据挖掘中的关联规则挖掘算法,处理的都是最简单的单层单 ...

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

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

  4. python --深入浅出Apriori关联分析算法Apriori关联...

     一.基础知识 上次我们介绍了几个关联分析的概念,支持度,置信度,提升度.这次我们重点回顾一下置信度和提升度: 置信度(Confidence):置信度是指如果购买物品A,有较大可能购买物品B.计算方式 ...

  5. python关联规则apriori算法_Python --深入浅出Apriori关联分析算法(二) Apriori关联规则实战...

    上一篇我们讲了关联分析的几个概念,支持度,置信度,提升度.以及如何利用Apriori算法高效地根据物品的支持度找出所有物品的频繁项集. 这次呢,我们会在上次的基础上,讲讲如何分析物品的关联规则得出关联 ...

  6. WEKA使用(基础配置+垃圾邮件过滤+聚类分析+关联挖掘)

    声明: 1)本文由我bitpeach原创撰写,转载时请注明出处,侵权必究. 2)本小实验工作环境为Windows系统下的WEKA,实验内容主要有三部分,第一是分类挖掘(垃圾邮件过滤),第二是聚类分析, ...

  7. 如何告别“人工运维”,借助算法进行告警关联挖掘分析?

    背景 近年来互联网技术高速发展,接入监控告警的设备和业务也越来越多,不断增新的设备和业务使得告警的量级也逐级递加.各种软硬件模块每天会产生大量的告警信息,这些告警中有表象告警,有冗余告警,也有根因告警 ...

  8. 频繁项集挖掘算法在告警关联中的应用

    # 技术黑板报 # 第十期 推荐阅读时长:15min 在上一篇技术黑板报中,我们介绍了频繁项集挖掘这一问题,并讲解了Apriori算法与FP-Growth算法的技术原理.本期技术黑板报我们将主要围绕频 ...

  9. 关联规则挖掘算法_关联规则的挖掘与应用——Apriori和CBA算法

    文|光大科技大数据部  魏乐 卢格润 1  关联规则 1.1 关联规则基本概念 1.2 Apriori算法基本思路 2  关联分类 2.1  CBA关联分类算法思路 2.2  CBA算法实现 总结 关 ...

最新文章

  1. 如何保证MySQL和Redis的数据一致性?
  2. 河南计算机程序大赛,我院成功举办河南省第十一届ACM大学生程序设计竞赛
  3. Dubbo-go 源码笔记(二)客户端调用过程
  4. ubuntu各版本代号(更新至15.04)及各版本下载地址等
  5. python2默认编码_解决Python2.x编码之殇
  6. apache httpd mysql_Centos7安装配置Apache(httpd)+php+mysql+phpMyAdmin
  7. 【Python】利用pip下载Django超时失败的解决方法
  8. 基于CentOs的Hadoop集群全分布式部署
  9. html隐藏域 js,JS实现“隐藏与显示”功能(多种方法)
  10. 用动态规划解决最长公共子序列
  11. 项目管理笔记(观念)
  12. python 删除文件_lt;python笔记gt;点击工具架,删除filechache的文件
  13. Mac终端打开VsCode
  14. 爬取男神or女神图片(爬虫案例二)
  15. 基于PYTHON的艺术签名设置
  16. 人工智能让你更美 来自美图影像实验室发布会实录
  17. 问题 G: 学号识别
  18. 基于TIA博途的一阶滞后滤波+中位值滤波+堆栈平均值滤波算法SCL语言程序(封装FB库)
  19. MySQLdb._exceptions.OperationalError: (1045, “Access denied for user ‘root‘@‘localhost‘ (using passw
  20. Pinyin4J使用方法

热门文章

  1. 设计行业内部多类型图纸文档安全加密如何实现?选择加密方案需要注意哪些?
  2. 【论文阅读】Drift with Devil
  3. 碳交易机制下考虑需求响应的综合能源系统优化运行论文复现——附代码
  4. vue3.2使用vue-wechat-title及路由导航守卫实现浏览器动态标题、替换浏览器的vue小图标
  5. 项目小经验: 杀鸡用了牛刀
  6. PortTunnel(转)
  7. HC小区管理系统宝塔方式安装
  8. Origin使用技巧(5),Origin科研绘图软件2021中文版下载安装
  9. Firebug安装与使用详解
  10. SiTime硅晶振相位噪声测量指南