购物篮模型&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的真正频繁的项集集合。

购物篮模型&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 实现。
前言:这是一个老故事, 但每次看总是能从中想到点什么.在一家超市里,有一个有趣的现象:尿布和啤酒赫然摆在一起出售.但是这个奇怪的举措却使尿布和啤酒的销量双双增加了.这不是一个笑话,而是发生在美国沃尔玛 ...
随机推荐
- 二级横向菜单实现——ListView
实现类似于大众点评客户端的横向listview二级列表 这种横向的listview二级列表在手机软件上还不太常见,但是使用过平板的都应该知道,在平板上市比较常见的.可能是因为平板屏幕比较大,而且也能展 ...
- PHP 递归实现层级树状展现数据
<?php $db = mysql_connect('localhost', 'root', 'root') or die('Can\'t connect to database'); mysq ...
- Delphi流的操作
一.流的概念 流简单说是建立在面向对象基础上的一种抽象的处理数据的工具,它定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员只需掌握对流进行操作,而不用关心流的另一头数据的真正流向.其实,流 ...
- Adapter接口及实现类
Adapter本身只是一个接口,它派生了ListAdapter和SpinnerAdapter两个子接口,其中ListAdapter为AbsListView提供列表项,而SpinnerAdapter为A ...
- 在ASP.NET MVC中使用 Bootstrap table插件
Bootstrap table: http://bootstrap-table.wenzhixin.net.cn/zh-cn/getting-started/ 1. 控制器代码: using Syst ...
- Android的文件存储
//文件的写入 String content1 = edt_file.getText().toString(); //用于文件的写操作 FileOutputStream fos=null; //缓冲输 ...
- 如何改变xls中的单元格左上角的图标
点绿色小三角的是文本型数字,是不能参与加减运算的.首先选中含有绿色小三角的单元格,右击鼠标选择,设置单元格格式, 数字选项卡,选择常规
- 基于ASIO的协程库orchid简介
什么是orchid? orchid是一个构建于boost库基础上的C++库,类似于python下的gevent/eventlet,为用户提供基于协程的并发模型. 什么是协程: 协程,即协作式程序,其思 ...
- HDU2063(二分图最大匹配)
过山车 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU1394(线段树||树状数组)
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...