购物篮模型&Apriori算法
一、频繁项集
若I是一个项集,I的支持度指包含I的购物篮数目,若I的支持度>=S,则称I是频繁项集。其中,S是支持度阈值。
1、应用
- “尿布和啤酒”
- 关联概念:寻找多篇文章中共同的词汇集合。项->词,购物篮->文档
- 文档抄袭:寻找多个购物篮中共同出现的项对,同一个项对出现在越多的购物篮中,其相似度越高。项->文档,购物篮->句子
2、关联规则
I->j 如果I中所有项出现在某个购物篮的话,那么j“有可能”也出现在这一购物篮中。
I->j的可行度:集合I与{j}补集的支持度与I的支持度的比值。
在实际应用中,购物篮规模和频繁项集太大,故任何算法的主要开销时间都集中在将购物篮从磁盘读入内存这个过程。
- 对n个项集组成的购物篮而言,大小为k的所有子集的生成时间约为n(k)/k!(最终该时间会超过数据从磁盘传输的时间).
- 通常只需要较小的频繁项集,所以k永远不会超过2或者3。
- 当确实需要一个更大的k的项集时,往往可以去掉每个购物篮中不太可能会成为频繁项的那些项,从而保证k增长的同时n却下降。
3、项集计数中内存使用
若项集是字符串或其他,可以以从1到n的连续整数来表示,整数码与项一一对应:用一个哈希表将项的表现形式换成整数。即每次在文件中看到一个项,就对它进行哈希。若该项存在,则可以获得其整数码;若不存在,就将下一个可用的数字赋给它,并将项极其整数码放入哈希表中。
4、三角矩阵方法
假设i<j,且仅使用二维数组a中的元素a[i,j]来存放计数结果,这种策略会使数组的一半元素都没有用,故使用一个一维的三角数组。此时,{i,j}对应元素a[k],其中1<=i<=j<=n,k=(i-1)(n-i/2)+j-i.
5、三元组方法
将计数值以三元组[i,j,c]的方式来存储,即{i,j}对的计数值为c(其中i<j).可以采用类似哈希表的数据结构,其中i和j是搜索键值,以此确定对于给定的i和j是否存在对应的三元组。
- 若某个项对的计数值为0,则三元组方式不一定需要存储某个值。
- 三元组方式对每个出现在购物篮中的项对都会存储三个而不是一个整数。
如果在所有可能出现的项对中至少有1/3出现在购物篮的情况下,三角矩阵方式更优;而若出现的比例显著小于1/3,就要考虑使用三元组方式。
6、项集的单调性
- 如果项集I是频繁的,那么其所有的子集都是频繁的;
- 如果一个项集的超集不再是频繁的,则称该项集最大(这里的最大频繁项集不是指所含项个数最多的频繁项集,不要弄错了,最大频繁项集不是唯一的,可能有很多个)。
- 最大频繁项集的所有子集都是频繁的;
- 除最大频繁项集的子集之外,其它集合都是不频繁的。
二、A-Priori算法
A-Priori相关算法:避免对所有的三元组或更大的集合计数,集中考虑计算频繁二元组的算法。A-Priori算法通过对数据做两遍扫描来减少必须计数的项对数目。
1、第一遍扫描
- 建立两张表:第一张表将项的名称转换为1到n之间的整数;另一张表则是一个计数数组,第i个数组元素是上述第i个项的出现次数,初始值为0.
- 读取购物篮时,检查购物篮中的每个项并将其名称转换为一个整数,将改整数作为计数数组的下标找到对应的数组元素,最后,对该数组元素加1.
2、两遍扫描之间的处理
只给频繁项重新编号,编号范围是1到m.此时的表格是一个下标为1到n的数组,如果第i项不频繁,则对应的第i个数组元素为0,否则为1到m之间一个唯一的整数。该表格称为频繁项集表格。
3、第二遍扫描
在第二遍扫描之后,对两个频繁项组成的所有项对计数。
- 第二遍扫描所需的空间是2m*m字节。
- 如果要使用一个大小正确的三角矩阵,那要注意只对频繁项进行重新编号处理。
第二遍扫描具体细节如下:
1、对每个购物篮,在频繁项集表中检查哪些项是频繁的;
2、通过一个双重循环生成所有的频繁项对;
3、对某个频繁项对,在存储计数值的数据结构中相应的计数值上加1;
最后,在第二遍扫描结束时,检查计数值结构以确定哪些项对是频繁项对。
三、所有频繁项集上的A-Priori算法
从某个集合大小k到下一个大小k+1的转移模式:
对于每个集合大小k,存在两个频繁项集的集合:
- Ck大小为k的候选项集集合,即必须要通过计算来确定到底是否真正频繁的项集组成的集合。
- Lk大小为k的真正频繁的项集集合。
![image](/Users/wust_zxl/Desktop/屏幕快照 2016-10-31 下午9.44.11.png)
购物篮模型&Apriori算法的更多相关文章
- Apriori算法在购物篮分析中的运用
购物篮分析是一个很经典的数据挖掘案例,运用到了Apriori算法.下面从网上下载的一超市某月份的数据库,利用Apriori算法进行管理分析.例子使用Python+MongoDB 处理过程1 数据建模( ...
- 数据挖掘算法之-关联规则挖掘(Association Rule)(购物篮分析)
在各种数据挖掘算法中,关联规则挖掘算是比較重要的一种,尤其是受购物篮分析的影响,关联规则被应用到非常多实际业务中,本文对关联规则挖掘做一个小的总结. 首先,和聚类算法一样,关联规则挖掘属于无监督学习方 ...
- 关联规则之Aprior算法(购物篮分析)
0.支持度与置信度 <mahout实战>与<机器学习实战>一起该买的记录数占所有商品记录总数的比例——支持度(整体) 买了<mahout实战>与<机器学习实战 ...
- 购物篮算法的理解-基于R的应用
是无监督机器学习方法,用于知识发现,而非预测,无需事先对训练数据进行打标签,因为无监督学习没有训练这个步骤.缺点是很难对关联规则学习器进行模型评估,一般都可以通过肉眼观测结果是否合理. 一,概念术语 ...
- 数据算法 --hadoop/spark数据处理技巧 --(5.移动平均 6. 数据挖掘之购物篮分析MBA)
五.移动平均 多个连续周期的时间序列数据平均值(按相同时间间隔得到的观察值,如每小时一次或每天一次)称为移动平均.之所以称之为移动,是因为随着新的时间序列数据的到来,要不断重新计算这个平均值,由于会删 ...
- 基于Hadoop的改进Apriori算法
一.Apriori算法性质 性质一: 候选的k元组集合Ck中,任意k-1个项组成的集合都来自于Lk. 性质二: 若k维数据项目集X={i1,i2,-,ik}中至少存在一个j∈X,使得|L(k-1)(j ...
- 关联规则挖掘算法之Apriori算法
Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集. 关于这个算法有一个非常有名的故事:"尿布和啤酒".故事是 ...
- 数据挖掘:关联规则的apriori算法在weka的源码分析
相对于机器学习,关联规则的apriori算法更偏向于数据挖掘. 1) 测试文档中调用weka的关联规则apriori算法,如下 try { File file = new File("F:\ ...
- Apriori算法的原理与python 实现。
前言:这是一个老故事, 但每次看总是能从中想到点什么.在一家超市里,有一个有趣的现象:尿布和啤酒赫然摆在一起出售.但是这个奇怪的举措却使尿布和啤酒的销量双双增加了.这不是一个笑话,而是发生在美国沃尔玛 ...
随机推荐
- C#中的协变OUT和逆变
泛型接口和泛型委托中经常使用可变性 in 逆变,out 协变 从 list<string>转到list<object> 称为协变 (string 从object 派生,那么 ...
- highcharts设置Y轴范围及根据Y轴范围设置不同颜色
yAxis : { title : { text : '数据' }, plotLines : [ { value : 0, width : 1, color : '#808080' } ], min: ...
- App外包开发周期一般多长?
很多人问我,开发一个app要用多长时间.事实上开发一款app没有固定周期的,得因产品而论,你软件的功能需求决定了app外包开发的周期.但是除了app本身以外,人为因素往往对开发周期也有一定的影响.例如 ...
- 【Xilinx-LVDS读写功能实现】-00-开始
最近用到了一款LVDS接口的摄像头,640*480灰度图像,数据速率为600Mbps,位宽10bit,DDR双边沿采样. 实现数据的采集需要用到FPGA内的SERDES模块,现在已经仿真通过了,等到上 ...
- 电商网站垮IDC数据备份,MySql主从同步,图片及其它数据文件的同步
原文网址:http://www.bzfshop.net/article/180.html 对一个电子商务网站而言,最宝贵的资源就是数据.服务器是很廉价的东西,即使烧了好几个也问题不大,但是用户数据如果 ...
- Java中间件:淘宝网系统高性能利器(转)
淘宝网是亚太最大的网络零售商圈,其知名度毋庸置疑,吸引着越来越多的消费者从街头移步这里,成为其忠实粉丝.如此多的用户和交易量,也意味着海量的信息处理,其背后的IT架构的稳定性.可靠性也显得尤为重要.那 ...
- iOS 之 线程和进程
进程是系统调度单位,拥有自己的资源 线程是CPU调度的基本单位 进程的同步机制: 原子操作.信号量机制.自旋锁.分布式系统
- log4net的分类型输出文件的配置
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSe ...
- IM比较SipDroid/IMSDroid/CSipsimple/Linphone/Webrtc
一) sipdroid1)架构sip协议栈使用JAVA实现,音频Codec使用skype的silk(Silk编解码是Skype向第三方开发人员和硬件制造商提供免版税认证(RF)的Silk宽带音频编码器 ...
- aix下java程序运行问题
CLASSPATH=/track.jar:/standalone.jar export CLASSPATH nohup /usr/java6_64/bin/java com.TrackMain > ...