购物篮模型&Apriori算法

摘要:
在实际应用中,购物篮大小和频繁项目集太大,因此任何算法的主要花费时间都集中在将购物篮从磁盘读取到内存的过程中。三重模式将为购物篮中出现的每对商品存储三个商品,而不是一个整数。A-Priority算法减少了必须通过两次扫描数据来计数的项目对的数量。

一、频繁项集

	若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)

免责声明:文章转载自《购物篮模型&amp;amp;Apriori算法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Kali学习笔记39:SQL手工注入(1)【转发】Cookie存储的值大小限制和个数问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

openssl3.0 加密算法库编程精要 04 详解 EVP API 消息摘要

4.1 消息摘要的概念   消息摘要有好几个名字,比如单项散列函数,Hash 函数,它是一个将可变长度的输入串转换为一个固定长度的输出 串的函数。大多数消息摘要算法都是公开的,它的安全性依赖于它的单向性,如果仅获取到消息摘要的结果,想要从结果 反推出原文几乎是不可能的事情。并且对于输入串的细微改变,都会引发输出串的雪崩式变化,所以消息摘要一般用于校 验数据...

poj2349最小生成树prim算法

题目:有s个satellite channels,但有p(p>s)个地方,若任意两个地方有satellite channels,则无视该距离,并且剩余的地方只能与其他地方通过无线电连接,需要距离,且需要的距离只与最大距离有关,问该最大距离的最小值(大概是这样啦)分析:实际上就是求最小生成树中的第p-s大的数,可以先通过prim算法生成最小生成树,然后...

魔棒工具--RegionGrow算法简介

原地址:http://www.cnblogs.com/easymind223/archive/2012/07/04/2576964.html ps里面的魔棒工具非常好用,是图像处理中非常常用的一个工具,它现在已经是我的c++工具箱中很重要的一员了,我会在以后的时间里把我的工具箱逐渐介绍给大家。 魔棒工具的核心算法是RegionGrow区域成长法,它的概念很...

世界碰撞算法原理和总结(sat gjk)

序言     此文出于作者的想法,从各处文章和论文中,总结和设计项目中碰撞结构处理方法。如有其它见解,可以跟作者商讨。(杨子剑,zijian_yang@yeah.net)。 在一个世界中,有多个物体,物体可以分为运动的物体和静止的物体和地形。而世界是很宽广的,本文致力在处理物体之间的碰撞,地形的碰撞后续处理。 参考: KillerAery的文章 空间划分的...

Autosar COM层发送模式选择(信号发送属性和I-PDU发送模式)

信号的发送属性 Triggered属性:调用Com_SendSignal( )服务请求具备Triggered属性的信号发送,可以触发相关I-PDU的发送,但是如果该I-PDU的发送模式被配置为Peiodic时,只更新信号的值,不会触发相关I-PDU的立即发送,而是在下一周期到来时触发发送Pending属性:Com_SendSignal( )服务请求调用具备...

区块链共识算法 PBFT(拜占庭容错)、PAXOS、RAFT简述

共识算法 区块链中最重要的便是共识算法,比特币使用的是POS(Proof of Work,工作量证明),以太币使用的是POS(Proof of Stake,股权证明)使得算理便的不怎么重要了,而今POS的变体DPOS(Delegated Proof of Stake,股份授权证明)进一步削减算力的浪费,同时也加强了区块链的安全性。 不过,对于不需要货币体系...