您的位置:首页 > 大数据

大数据之数据挖掘理论笔记 关联规则与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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: