数据挖掘十大经典算法之一--APRIOR 及python实现
来源:互联网 发布:sqlserver sa无法登陆 编辑:程序博客网 时间:2024/05/17 09:21
1
关联规则的应用场合。在商业销售上,关联规则可用于交叉销售,以得到更大的收入;在保险业务方面,如果出现了不常见的索赔要求组合,则可能为欺诈,需要作进一步的调查。在医疗方面,可找出可能的治疗组合;在银行方面,对顾客进行分析,可以推荐感兴趣的服务等等。
首先我们来看,什么是规则?规则形如"如果…那么…(If…Then…)",前者为条件,后者为结果。例如一个顾客,如果买了可乐,那么他也会购买果汁。
如何来度量一个规则是否够好?有两个量,置信度(Confidence)和支持度(Support)。假设有如下表的购买记录。
顾客
项目
1
orangejuice,
2
milk,orange
3
Orange
4
Orange
5
Window
将上表整理一下,得到如下的一个2维表
Orange
WinCl
Milk
Coke
Detergent
Orange
4
1
1
2
2
WinCl
1
2
1
0
0
Milk
1
1
1
0
0
Coke
2
0
0
2
1
Detergent
1
0
0
0
2
上表中横栏和纵栏的数字表示同时购买这两种商品的交易条数。如购买有Orange的交易数为4,而同时购买Orange和Coke的交易数为2。
置信度表示了这条规则有多大程度上值得可信。设条件的项的集合为A,结果的集合为B。置信度计算在A中,同时也含有B的概率。即Confidence(A==>B)=P(B|A)。例如计算"如果Orange则Coke"的置信度。由于在含有Orange的4条交易中,仅有2条交易含有Coke.其置信度为0.5。
支持度计算在所有的交易集中,既有A又有B的概率。例如在5条记录中,既有Orange又有Coke的记录有2条。则此条规则的支持度为2/5=0.4。现在这条规则可表述为,如果一个顾客购买了Orange,则有50%的可能购买Coke。而这样的情况(即买了Orange会再买Coke)会有40%的可能发生。
再来考虑下述情况。
项
支持度
A
0.45
B
0.42
C
0.4
A
0.25
A
0.2
B
0.15
A,B,andC
0.05
可得到下述规则
规则
置信度
If
0.05/0.15*100%=33.33%
If
0.05/0.20*100%=25%
If
0.05/0.25*100%=20%
上述的三条规则,哪一条规则有用呢?
对于规则"
为此引入另外一个量,即提升度(Lift),以度量此规则是否可用。描述的是相对于不用规则,使用规则可以提高多少。有用的规则的提升度大于1。计算方式为Lift(A==>B)=Confidence(A==>B)/Support(B)=Support(A==>B)/(Support(A)*Support(B))。在上例中,Lift(IfB
如何产生规则呢。可以分两步走。
首先找出频繁集(frequentitemset)。所谓频繁集指满足最小支持度或置信度的集合。其次从频繁集中找出强规则(strongrules)。强规则指既满足最小支持度又满足最小置信度的规则。
我们来看如何产生频繁集。
这其中有一个定理。即频繁集的子集也一定是频繁集。比如,如果{A,B,C}是一个3项的频繁集,则其子集{A,B},{B,C},{A,C}也一定是2项的频繁集。为方便,可以把含有k项的集合称之为k-itemsets.
下面以迭代的方式找出频繁集。首先找出1-itemsets的频繁集,然后使用这个1-itemsets,进行组合,找出2-itemsets的频繁集。如此下去,直到不再满足最小支持度或置信度的条件为止。这其中重要的两步骤分别是连接(join)和剪枝(prune).即从(k-1)-itemsets中的项进行组合,产生备选集(Candidateitemsets)。再从备选集中,将不符合最小支持度或置信度的项删去。例如
算法描述如下
之后再从备选集中选出支持度大于最小minsup的作为LK
Frequent2-itemsets
Candidate3-itemsets
Frqquent3-itemsets
I1,I2
==>
I1,I2,I4
==>
I1,I2,I4
I1,I4
I2,I3,I4
I2,I3
I2,I4
下面我们再来看一个详细的例子。
设最小支持度为2,以Ck表示k-itemsets备选集,以Lk表示k-itemsets频繁集。
ID
Items
Itemset
Sup.count
Itemset
Itemset
100
I1,I2,I5
I1
6
I1
I1,I2
200
I2,I4
==>C1:
I2
7
==>L1:
I2
==>C2
I1,I3
300
I2,I3
I3
6
I3
I1,I4
400
I1,I2,I4
I4
2
I4
I1,I5
500
I1,I3
I5
2
I5
I2,I3
600
I2,I3
I2,I4
700
I1,I3
I2,I5
800
I1,I2,I3,I5
I3,I4
900
I1,I2,I3
I3,I5
I4,I5
对C2进行扫描,计算支持度。
Itemset
Sup.count
Itemset
Itemset
Sup.count
Itemset
I1,I2
4
==>L2:
I1,I2
==>C3
I1,I2,I3
2
==>L3:
I1,I2,I3
I1,I3
4
I1,I3
I1,I2,I5
2
I1,I2,I5
I1,I4
1
I1,I5
I1,I5
2
I2,I3
I2,I3
4
I2,I4
I2,I4
2
I2,I5
I2,I5
2
I3,I4
0
I3,I5
1
I4,I5
0
Python代码求
#
import
import
#
def
#利用F[k-1],经过合并和剪枝实现
#代码的实现,是考虑比较理想的模型,比如每一个子集都是完全排好序,且是数字或者字符比较大小的方法
def
#
def
#
def
def
T
F
print
print
- 数据挖掘十大经典算法之一--APRIOR 及python实现
- 大数据十大经典算法之Aprior算法
- 数据挖掘十大经典算法之一--APRIORI
- 数据挖掘十大经典算法之一:K近邻
- 数据挖掘十大经典实用算法及OpenCV算法
- [推荐]数据挖掘十大经典算法
- 数据挖掘十大经典算法
- 数据挖掘十大经典算法
- 数据挖掘十大经典算法
- 【转】数据挖掘十大经典算法
- 数据挖掘十大经典算法
- 数据挖掘十大经典算法
- (转)数据挖掘十大经典算法
- 数据挖掘十大经典算法
- 数据挖掘十大经典算法
- 数据挖掘十大经典算法
- 数据挖掘十大经典算法
- 数据挖掘十大经典算法
- 揭秘Facebook成功的背后:开放式数据中心
- Linux下使用system()函数,谨慎使用(转)
- 但愿云计算不是瞎算
- 云计算与SOA的十字路口
- 杂记之C语言之结构(四)
- 数据挖掘十大经典算法之一--APRIOR 及python实现
- 云计算时代最具潜力的12种编程语言
- HTML5编码教程和参考手册资料分享
- 苹果 :云计算 真的很可怕
- ubuntu之系统交换分区swap增加与优化
- C++ time
- 宽带不宽?网络带宽成云计算落地的最大制约
- 云计算时代:PC会消亡吗?
- Template method模式