Apriori算法详解

一、apriori算法简介: apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集。 apriori(先验的,推测的)算法应用广泛,可用于消费市场价格分析,猜测顾客的消费习惯;网络安全领域中的入侵检测技术;可用在用于高校管理中,根据挖掘规则可以有效地辅助学校管理部门有针对性的开展贫困助学工作;也可用在移动通信领域中,指导运营商的业务运营和辅助业务提供商的决策制定。
二、挖掘步骤:
1.依据支持度找出所有频繁项集(频度)
2.依据置信度产生关联规则(强度)
三、基本概念
对于a-》b
①支持度:p(a ∩ b),既有a又有b的概率
②置信度:
p(b|a),在a发生的事件中同时发生b的概率 p(ab)/p(a) 例如购物篮分析:牛奶 → 面包
例子:[支持度:3%,置信度:40%]
支持度3%:意味着3%顾客同时购买牛奶和面包
置信度40%:意味着购买牛奶的顾客40%也购买面包
③如果事件a中包含k个元素,那么称这个事件a为k项集事件a满足最小支持度阈值的事件称为频繁k项集。
④同时满足最小支持度阈值和最小置信度阈值的规则称为强规则
四、实现步骤
apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法apriori使用一种称作逐层搜索的迭代方法,“k-1项集”用于搜索“k项集”。
首先,找出频繁“1项集”的集合,该集合记作l1。l1用于找频繁“2项集”的集合l2,而l2用于找l3。如此下去,直到不能找到“k项集”。找每个lk都需要一次数据库扫描。
核心思想是:连接步和剪枝步。连接步是自连接,原则是保证前k-2项相同,并按照字典顺序连接。剪枝步,是使任一频繁项集的所有非空子集也必须是频繁的。反之,如果某
个候选的非空子集不是频繁的,那么该候选肯定不是频繁的,从而可以将其从ck中删除。
简单的讲,1、发现频繁项集,过程为(1)扫描(2)计数(3)比较(4)产生频繁项集(5)连接、剪枝,产生候选项集 重复步骤(1)~(5)直到不能发现更大的频集
2、产生关联规则,过程为:根据前面提到的置信度的定义,关联规则的产生如下:
(1)对于每个频繁项集l,产生l的所有非空子集;
(2)对于l的每个非空子集s,如果
p(l)/p(s)≧min_conf
则输出规则“sàl-s”
注:l-s表示在项集l中除去s子集的项集
上一篇文章中对apriori算法以及步骤进行了简单的描述,,现在用伪代码实现,及对经典例子进行描述
一、apriori算法伪代码实现: 伪代码描述:
// 找出频繁 1 项集
l1 =find_frequent_1-itemsets(d);
for(k=2;lk-1 !=null;k++){
// 产生候选,并剪枝
ck =apriori_gen(lk-1 );
// 扫描 d 进行候选计数
for each 事务t in d{
ct =subset(ck,t); // 得到 t 的子集
for each 候选 c 属于 ct
c.count++;
}
//返回候选项集中不小于最小支持度的项集
lk ={c 属于 ck | c.count》=min_sup}
}
return l= 所有的频繁集;
第一步:连接(join)
procedure apriori_gen (lk-1 :frequent(k-1)-itemsets)
for each 项集 l1 属于 lk-1
for each 项集 l2 属于 lk-1
if( (l1 [1]=l2 [1])&&( l1 [2]=l2 [2])&& ……&& (l1 [k-2]=l2 [k-2])&&(l1 [k-1]《l2 [k-1]) )
then{
c = l1 连接 l2 // 连接步:产生候选
//若k-1项集中已经存在子集c则进行剪枝
if has_infrequent_subset(c, lk-1 ) then
delete c; // 剪枝步:删除非频繁候选
else add c to ck;
}
return ck;
第二步:剪枝(prune)
procedure has_infrequent_sub (c:candidate k-itemset; lk-1 :frequent(k-1)-itemsets)
for each (k-1)-subset s of c
if s 不属于 lk-1 then
return true;
return false;
二、apriori算法例子:
三、总结: ①apriori算法的缺点:(1)由频繁k-1项集进行自连接生成的候选频繁k项集数量巨大。(2)在验证候选频繁k项集的时候需要对整个数据库进行扫描,非常耗时。
②网上提到的频集算法的几种优化方法:1. 基于划分的方法。2. 基于hash的方法。3. 基于采样的方法。4. 减少交易的个数。
我重点看了“基于划分的方法”改进算法,现在简单介绍一下实现思想:
基于划分(partition)的算法,这个算法先把数据库从逻辑上分成几个互不相交的块,每次单独考虑一个分块并 对它生成所有的频集,然后把产生的频集合并,用来生成所有可能的频集,最后计算这些项集的支持度。
其中,partition算法要注意的是分片的大小选取,要保证每个分片可以被放入到内存。当每个分片产生频集后,再合并产生产生全局的候选k-项集。若在多个处理器分片,可以通过处理器之间共享一个杂凑树来产生频集。
看这个图基本再对照伪代码,基本就可以看懂了~简单明了

配电柜接线规范
无人机越江送咖啡,什么是机器人运力网络?
从南极到你家,易开得,一支“中国芯”的奇幻漂流
通过BCnet-FX实现GX Works2以太网连接FX3UC
大数据如何以及为什么会迅速变成小数据蔓延
Apriori算法详解
检修盒面板AI视觉检测系统,赋能工业发展!
TOAT-51020+射频衰减器的特性
新视智科廖方诚:建立机器视觉生态链,以机器视觉重构中国制造
只需一个发射器,就能为多部智能设备提供隐形充电?
微软技术创新,助力全球企业应对物联网挑战
讯维4K多业务光端机成功应用于湖南某高速交通指挥中心
人工智能监测车站实况 人脸识别系统提高工作效率
白色笔记本清洁技巧
荣耀8青春版配备5V1A充电头, 而且不支持陀螺仪, 还值得拥有吗?
测试工程师必须具备这五项优势
深迪半导体新增比亚迪等股东,注册资本增至1825.8303万美元
一加5什么时候上市最新消息:一加5发布会门票秒售罄,重新定义真旗舰!配置性能硬件全升级
变容二极管型号含义
余压监控系统在消防中提供了更完善的逃生方案及预防