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

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

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

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

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

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

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

s u p p o r t = f r e q ( A , B ) n u m ( A l l S a m p l e s ) support = \frac{freq(A,B)}{num(AllSamples)} support=num(AllSamples)freq(A,B)

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

「置信度」:因为购买了A所以购买了B的概率。计算公式:同时购买A和B订单数 / 购买A的订单数,即:
c o n f i d e n c e = f r e q ( A , B ) f r e q ( 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次数/总购买订单数) ),即:

l i f t = S u p p o r t S u p p o r t ( A ) × S u p p o r t ( 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为最大频繁项集。例如 S 1 = { a b c } S_1 = \{abc\} S1={abc} S 2 = { b c } S_2=\{bc\} S2={bc}均是频繁项,但由于 S 1 S_1 S1 S 2 S_2 S2的父集,故 S 2 S_2 S2并非最大频繁项。

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

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

2.2 Apriori算法

摘自文章:Apriori算法的介绍

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

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

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

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

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

TIDItems
001Cola, Egg, Ham
002Cola, Diaper, Beer
003Cola, Diaper, Beer, Ham
004Diaper, 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-项集作为频繁项列表 L L L
  • 逐条扫描事务,构建FP-Tree:将每条事务的项按照 L L L排序,将每个项逐个添加到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算法,整个过程分为如下几个步骤:

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

三、关联分类算法

3.1 CBA算法

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

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

CBA算法步骤:

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

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

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

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

RidAgeIncomeStudentCreditRatingBuysComputer
1147911
21471011
3247912
4357912

挖掘得到如下频繁项集:

频繁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法等。
  • 文本的向量表示:将文本表示为特征空间中的一个向量,其中 w i , j w_{i,j} wi,j表示第 i i i个特征词在第 j j j篇文本中的权重(即词频)。
    [ w 1 , 1 . . . . . . . . . . . . . . . . . . . . . w i j ] \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. ↩︎

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值