博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【机器学习】--关联规则算法从初识到应用
阅读量:6572 次
发布时间:2019-06-24

本文共 1805 字,大约阅读时间需要 6 分钟。

一、前述

  关联规则的目的在于在一个数据集中找出项之间的关系,也称之为购物蓝分析 (market basket analysis)。例如,购买鞋的顾客,有10%的可能也会买袜子,60%的买面包的顾客,也会买牛奶。这其中最有名的例子就是"尿布和啤酒"的故事了。

二、相关概念

交易集:包含所有数据的一个数据集合,数据集合中的每条数据都是一笔交易

关联分析在大规模数据集中寻找有趣关系的任务。这些关系可以有两种形式:频繁项集或者关联规则。
关联关系:(association rules)暗示两种物品之间可能存在很强的关系。
项:交易集中的每个商品被成为一个项

模式/项集(ItemSet):项组合被成为模式/项集

支持度(Support):个项集在在整个交易集中出现的次数/出现的频度,比如:Support({A,C})=2表示A和C同时出现的次数是2次

最小支持度:交易次数达到最小支持度的情况下,该项集才会被计算
频繁项集:如果项集的支持度大于等于最小支持度,那么改项集被成为频繁项集,即出现的比较频繁。

置信度(Confidence):关联规则左件和右件同时出现的频繁程度,该值越大,表示同时出现的几率越大。

关联规则:LHS --- RHS(confidence) -----> 如果客户购买了左件(LHS),也可能购买右件(RHS),购买的置信度为confidence

比如上面的{尿布,葡萄酒}就频繁出现,他们之间可能存在一些关系,辣么,如何来确定是否是频繁项集呢?主要是依靠支持度和可信度。

首先我们来看,什么是规则?规则形如"如果…那么…(If…Then…)",前者为条件,后者为结果。例如一个顾客,如果买了可乐,那么他也会购买果汁。

如何来度量一个规则是否够好?有两个量,置信度(Confidence)和支持度(Support)

假设有如下表的购买记录。

整理后如图:

上表中横栏和纵栏的数字表示同时购买这两种商品的交易条数。如购买有Orange的交易数为4,而同时购买Orange和Coke的交易数为2。

 

置信度表示了这条规则有多大程度上值得可信设条件的项的集合为A,结果的集合为B。置信度计算在A中,同时也含有B的概率。即Confidence(A==>B)=P(B|A)。例 如计算"如果Orange则Coke"的置信度。由于在含有Orange的4条交易中,仅有2条交易含有Coke.其置信度为0.5。

 

支持度计算在所有的交易集中,既有A又有B的概率。例如在5条记录中,既有Orange又有Coke的记录有2条。则此条规则的支持度为2/5=0.4。现在这条规则可表述为,如果一个顾客购买了Orange,则有50%的可能购买Coke。而这样的情况(即买了Orange会再买Coke)会有40%的可能发生。支持度是针对项集来说的,因此可以定义一个最小支持度,而只保留满足最小支持度的项集

关联规则要求项集必须满足的最小支持阈值,称为项集的最小支持度(Minimum Support),记为supmin支持度大于或等于supmin的项集称为频繁项集,简称频繁集,反之则称为非频繁集。通常k-项集如果满足supmin,称为k-频繁集,记作Lk。关联规则的最小置信度(Minimum Confidence)记为confmin,它表示关联规则需要满足的最低可靠性。

三、Apriori算法

1、原理

 

如果某个项集是频繁的,那么它的所有子集也是频繁的。该定理的逆反定理为:如果某一个项集是非频繁的,那么它的所有超集(包含该集合的集合)也是非频繁的。Apriori原理的出现,可以在得知某些项集是非频繁之后,不需要计算该集合的超集,有效地避免项集数目的指数增长,从而在合理时间内计算出频繁项集。
2、实现
Apriori算法是发现频繁项集的一种方法。Apriori算法的
两个输入参数分别是最小支持度和数据集。该算法首先会生成所有单个物品的项集列表->接着扫描交易记录来查看哪些项集满足最小支持度要求,其中不满足最小支持度的集合会被去掉->然后对剩下的集合进行组合以生成包含两个数据集的项集->接着重新扫描交易记录,去掉不满足最小支持度的项集->该过程重复进行直到所有项集都被滤掉。

 

转载于:https://www.cnblogs.com/LHWorldBlog/p/8734191.html

你可能感兴趣的文章
JQuery的ajaxFileUpload的使用
查看>>
Java分享笔记:使用keySet方法获取Map集合中的元素
查看>>
Java面向对象练习题之人员信息
查看>>
关于Integer类中parseInt()和valueOf()方法的区别以及int和String类性的转换.以及String类valueOf()方法...
查看>>
ios 控制器的生命周期
查看>>
C#动态代理
查看>>
使用 sessionStorage 创建一个本地存储的 name/value
查看>>
POJ2127 LICS模板
查看>>
Python笔记8----DataFrame(二维)
查看>>
JavaScript 特殊效果代码
查看>>
【?】codeforces721E Road to Home(DP+单调队列)
查看>>
MySQL 仅保留7天、一个月数据
查看>>
OGG 11g Checkpoint 详解
查看>>
PHP中使用socket通信响应速度慢的原因与解决办法
查看>>
Win7下安装Mysql(解压缩版)
查看>>
UVA 11992 Fast Matrix Operations (降维)
查看>>
Asp.net core Identity + identity server + angular 学习笔记 (第一篇)
查看>>
暂时不想读研的几点理由
查看>>
增加临时表空间组Oracle11g单实例
查看>>
Diff Two Arrays
查看>>