大数据之数据挖掘理论笔记 关联规则与Apriori算法
2015-09-28 14:09
387 查看
大数据之数据挖掘理论一 Apriori算法
1. 引例——购物篮分析
策略一:经常同时购买的商品临近摆放,如啤酒尿布;
策略二:强关联商品可以摆放在商品的两端,可能诱发顾客一路挑选其他商品,如硬件和软件。
2. 基本概念
频繁模式:频繁地出现在数据集中的模式(如项集、子序列、子结构)。
频繁项集:如频繁地出现在商品交易数据集中的商品(如牛奶、面包)的集合。
关联规则:computer =>antivirus_software [support=2%; confidence=60%]
支持度:分析的所有事务中有2%显示计算机和杀毒软件被同时购买;
置信度:购买computer的60%顾客买了杀毒软件;
3. 公式
support(A=>B) = P(A∪B)
confidence(A=>B)=P(B|A)= support(A∪B) / support (A) = support_count (A∪B)
/ support_count(A)
4. 关联规则挖掘过程:
(1) 找出所有频繁项集;(2)由频繁项集产生【强关联规则:必须满足最小支持度和最小置信度】。
5. 布尔关联规则挖掘频繁项集——Apriori算法
1)Apriori算法原理:采用逐层搜索迭代法,用k项集探索k+1项集。
2)Apriori算法过程:通过扫描数据库,累计每个项的计数,并收集满足最小支持度的项,找出频繁1项集的集合,记为L1。利用L1找出频繁2项集L2,利用L2找出频繁3项集L3...
上述过程,每找一次需要完整扫描数据库一次。要压缩搜索空间,提高频繁项集逐层产生效率——Apriori property先验性质。
3)Apriori
property理论:频繁项集的所有非空子集一定是频繁;任何非频繁的k项集都不是频繁k+1项集的子集(理解:非频繁项集与任何一项取并集,结果都是非频繁的)。
4)Apriori
property应用:连接步+剪枝步
连接步:将Lk与Lk自身连接产生候选k+1项集的集合C(k+1)。集合C(k+1)的成员有频繁的也有不频繁的,但所有频繁k+1项集都包含在集合中。
剪枝步:扫描数据库,确定C(k+1)中每个候选项集的计数,根据计数值不小于最小支持度计数的所有候选项集都是频繁的确定L(k+1)。在此引入Apriori
property对C(k+1)进行压缩处理,即认为 不在Lk集合的项构成连接项 也不会是频繁的,故可将其直接从C(k+1)中删除。
5)Apriori算法举例
http://blog.csdn.net/lizhengnanhua/article/details/9061887 (最小支持度>=50%) 该博主举例简单明确,可借鉴。
6)Apriori算法伪代码
来自http://blog.csdn.net/lizhengnanhua/article/details/9061887,但对其24行注解有做改动。
伪代码描述:
// 找出频繁 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项集中 存在infrequent(infrequence n.
很少发生; 罕见)子集,则进行剪枝
//意思是说:根据Apriori property理论:频繁项集的所有非空子集一定是频繁;任何非频繁的k-1项集都不是频繁k项集
// 的子集,故认为
不在Lk-1集合的项构成连接项 也不会是频繁的,可将其直接从集合Ck中删除。
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;
6.
由频繁项集产生关联规则
强关联规则:同时满足最小支持度和最小置信度
confidence(A=>B)=P(B|A)=
support(A∪B) / support (A) = support_count (A∪B)
/ support_count(A)
对于每个频繁项集L,产生L的所有非空子集;
对于L的每个非空子集S,
如果 support_count (L) / support_count(S)
>=min_conf ,则有 S=>(L-S).
7. 测测你的关联规则是否挖掘成功!很重要。。
强规则不一定是有趣的,A=>B的置信度有一定的欺骗性。
1)从关联分析到相关分析,从关联规则到相关规则:A=>B[support,
confidence, correlation]
使用提升度的相关性分析
公式: lift(A,B)=P(B|A)/P(B)= conf(A=>B)/sup(B) [注:sup(B)与sup(A=>B)不一样]
使用卡方进行相关性分析
公式: 卡方值= sum[(观测值 - 期望值)的平方/ 期望值]
2)模式评估其他量度(零不变量度):全置信度、最大置信度、Kulczynski、余弦
all_conf(A,B)= sup(AUB)/max{sup(A),sup(B)}= min{P(A|B),P(B|A)}
max_conf(A,B)= max{P(A|B),P(B|A)}
Kulc(A,B)= 1/2 [P(A|B)+P(B|A)]
cosine(A,B)=sup(AUB)/sqrt[sup(A)*sup(B)]=sqrt[P(A|B)*P(B|A)]
%取开方
3)不平衡比
IR(A,B)=|sup(A)-sup(B)| / [sup(A)+sup(B)-sup(AUB)]
8. 关联规则的概率论解读:
支持度 P(AB)
置信度 P(B|A)
提升度 P(B|A)/P(B)
如果P(B|A)/P(B)>1,说明A对B的影响是正向的,是“牛奶面包”的关系;
如果P(B|A)/P(B)<1,说明A对B的影响是负向的,是“牛奶豆浆”的关系;
如果P(B|A)/P(B)=1,说明A与B独立。
9. Apriori算法java实现
推荐参考博文 http://wukunliang.blog.163.com/blog/static/17766547220105278170829/
1. 引例——购物篮分析
策略一:经常同时购买的商品临近摆放,如啤酒尿布;
策略二:强关联商品可以摆放在商品的两端,可能诱发顾客一路挑选其他商品,如硬件和软件。
2. 基本概念
频繁模式:频繁地出现在数据集中的模式(如项集、子序列、子结构)。
频繁项集:如频繁地出现在商品交易数据集中的商品(如牛奶、面包)的集合。
关联规则:computer =>antivirus_software [support=2%; confidence=60%]
支持度:分析的所有事务中有2%显示计算机和杀毒软件被同时购买;
置信度:购买computer的60%顾客买了杀毒软件;
3. 公式
support(A=>B) = P(A∪B)
confidence(A=>B)=P(B|A)= support(A∪B) / support (A) = support_count (A∪B)
/ support_count(A)
4. 关联规则挖掘过程:
(1) 找出所有频繁项集;(2)由频繁项集产生【强关联规则:必须满足最小支持度和最小置信度】。
5. 布尔关联规则挖掘频繁项集——Apriori算法
1)Apriori算法原理:采用逐层搜索迭代法,用k项集探索k+1项集。
2)Apriori算法过程:通过扫描数据库,累计每个项的计数,并收集满足最小支持度的项,找出频繁1项集的集合,记为L1。利用L1找出频繁2项集L2,利用L2找出频繁3项集L3...
上述过程,每找一次需要完整扫描数据库一次。要压缩搜索空间,提高频繁项集逐层产生效率——Apriori property先验性质。
3)Apriori
property理论:频繁项集的所有非空子集一定是频繁;任何非频繁的k项集都不是频繁k+1项集的子集(理解:非频繁项集与任何一项取并集,结果都是非频繁的)。
4)Apriori
property应用:连接步+剪枝步
连接步:将Lk与Lk自身连接产生候选k+1项集的集合C(k+1)。集合C(k+1)的成员有频繁的也有不频繁的,但所有频繁k+1项集都包含在集合中。
剪枝步:扫描数据库,确定C(k+1)中每个候选项集的计数,根据计数值不小于最小支持度计数的所有候选项集都是频繁的确定L(k+1)。在此引入Apriori
property对C(k+1)进行压缩处理,即认为 不在Lk集合的项构成连接项 也不会是频繁的,故可将其直接从C(k+1)中删除。
5)Apriori算法举例
http://blog.csdn.net/lizhengnanhua/article/details/9061887 (最小支持度>=50%) 该博主举例简单明确,可借鉴。
6)Apriori算法伪代码
来自http://blog.csdn.net/lizhengnanhua/article/details/9061887,但对其24行注解有做改动。
伪代码描述:
// 找出频繁 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项集中 存在infrequent(infrequence n.
很少发生; 罕见)子集,则进行剪枝
//意思是说:根据Apriori property理论:频繁项集的所有非空子集一定是频繁;任何非频繁的k-1项集都不是频繁k项集
// 的子集,故认为
不在Lk-1集合的项构成连接项 也不会是频繁的,可将其直接从集合Ck中删除。
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;
6.
由频繁项集产生关联规则
强关联规则:同时满足最小支持度和最小置信度
confidence(A=>B)=P(B|A)=
support(A∪B) / support (A) = support_count (A∪B)
/ support_count(A)
对于每个频繁项集L,产生L的所有非空子集;
对于L的每个非空子集S,
如果 support_count (L) / support_count(S)
>=min_conf ,则有 S=>(L-S).
7. 测测你的关联规则是否挖掘成功!很重要。。
强规则不一定是有趣的,A=>B的置信度有一定的欺骗性。
1)从关联分析到相关分析,从关联规则到相关规则:A=>B[support,
confidence, correlation]
使用提升度的相关性分析
公式: lift(A,B)=P(B|A)/P(B)= conf(A=>B)/sup(B) [注:sup(B)与sup(A=>B)不一样]
使用卡方进行相关性分析
公式: 卡方值= sum[(观测值 - 期望值)的平方/ 期望值]
2)模式评估其他量度(零不变量度):全置信度、最大置信度、Kulczynski、余弦
all_conf(A,B)= sup(AUB)/max{sup(A),sup(B)}= min{P(A|B),P(B|A)}
max_conf(A,B)= max{P(A|B),P(B|A)}
Kulc(A,B)= 1/2 [P(A|B)+P(B|A)]
cosine(A,B)=sup(AUB)/sqrt[sup(A)*sup(B)]=sqrt[P(A|B)*P(B|A)]
%取开方
3)不平衡比
IR(A,B)=|sup(A)-sup(B)| / [sup(A)+sup(B)-sup(AUB)]
8. 关联规则的概率论解读:
支持度 P(AB)
置信度 P(B|A)
提升度 P(B|A)/P(B)
如果P(B|A)/P(B)>1,说明A对B的影响是正向的,是“牛奶面包”的关系;
如果P(B|A)/P(B)<1,说明A对B的影响是负向的,是“牛奶豆浆”的关系;
如果P(B|A)/P(B)=1,说明A与B独立。
9. Apriori算法java实现
推荐参考博文 http://wukunliang.blog.163.com/blog/static/17766547220105278170829/
相关文章推荐
- adb install失败 - Failure [INSTALL_FAILED_CONTAINER_ERROR]
- Light OJ 1138:Trailing Zeroes (III)【二分+求阶乘中某质因子的幂】
- Aborting commit: 'XXX' remains in conflict错误
- ORA-12641: Authentication service failed to initialize
- 学习日志---mapreduce详细过程分析
- maven install Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.1.1:war (default-wa
- 三维GIS在交通应急上的应用
- ListCtrl虚拟列表---加载大数据
- hdu5468(容斥原理)-2015 ACM/ICPC Asia Regional Shanghai Online
- ARC forbids explicit message send of 'retainCount'
- 导出excel功能(解决大数据量问题)
- Kafka+Storm+HDFS整合实践
- flume-ng+Kafka+Storm+HDFS 实时系统搭建
- HDU 1022 Train Problem I (STL - 栈的使用)
- mysql大数据相关优化记录
- does not contain bitcode ShardSDK等三方库
- [个人推荐]理解poll_wait
- 【mongoDB中级篇②】索引与expain
- bsfl汇编指令 http://blog.csdn.net/chief1985/article/details/2441182
- SQUARE Probelm_codewars daily train9/27