Apriori算法介绍:
Apriori其实是为了降低搜索空间以及提高搜索速度而设计的一种算法,本文采用python实现,彻底理解“频繁项集的所有非空子集一定是频繁的”这句话,并实现连接步、剪枝步、规则生成、提升度计算等。
本节代码参考了《机器学习实战》第十一章中的代码,也参考了R语言的arules包,该包没有实现一对多的规则,因此,在以上基础上进行了改进,包括实现剪枝步,规则生成(一对一,一对多,多对一,多对多),增加提升度Lift评估。
整体代码实现过程如下:
python实现关联规则分析Apriori算法 - CSDN博客
1
2Apriori原理
任一频繁项的所有非空子集也必须是频繁的。也就是当生成k项候选集的时候,如果候选集中的元素不在k-1项频繁集中,则该元素一定不是频繁集,这个时候不需要计算支持度,直接去除即可。
比如说我们有0,1,2,3组成的集合,下面是其所有的项集组合:

从1项集开始计算k项集的支持度,在2项集候选集中当我们计算出{0,1}集合是非频繁的,那么它的所有子集都是非频繁的,即2项集{0,1,2}和{0,1,3}也是非频繁的,它们的子集{0,1,2,3}同样是非频繁的,对于非频繁集我们就不需要去计算支持度。

当找出所有的频繁后需要从频繁集中挖掘所有的关联规则,假设频繁项集{0,1,2,3},下图表示其生成的所有关联规则,对于阴影部分的低可信度的规则,它们的子集同样也会是低可信度的。

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
结果如下所示(更完善):
R语言运行结果(存在不足):
R语言实现中,去掉第1-3条涉及空集的规则,删除Lift小于1的情况(第7条和第10条),剩余7条规则。与上图本文实现相比较,少了“一对多”的情况,也就是少了“e—–a,c”这条规则。
大功告成,代码实现比较好懂,功能都实现了,较R语言结果展现有了明显的改进(自动删除涉及空集的规则,自定义筛选Lift>1),但是看起来比较乱,有时间重新封装下,先写到这里,睡觉。
网友评论