关联规则算法主要是分析俩个商品共同被一起购买的概率,然后找出这种产品的集合,促进商家的销售
分析的对象: 购物篮和购物篮里的产品
分析的目标:频繁产品集合,也就是频繁项集
算法产生的原因:加快运算的速度(废话)。如果想不通可以简单说明下:
购物篮
| 商品id列表 |
g1 |
i1, i2, i5
|
g2
|
i2, i4
|
g3
|
i2, i3
|
g4
|
i1, i2, i4
|
g5
|
i1, i3
|
g6
|
i2, i3
|
如果以上面的数据为蓝本,挖掘出频繁产品集合,最简单的思路就是:找出每个购物篮,从g1 到 g6 中的每种商品的子集合,然后累加出现的频繁集合记录数.。
即:
说明下面的数据:{产品组合}--> 出现的组合次数累计和
(1)分析g1: {i1, i2}-->1; {i1, i5}-->1; {i2, i5}-->1
(2)分析g2: {i2, i4}-->1
(3)分析g3: {i2, i3} -->1
(4)分析g4: {i1, i2}-->2; {i1,i4}-->2; {i2, i4}--> 2
(5)分析g5: {i1, i3}-->1;
(6)分析g6:
{i2, i3} -->2
以此类推下去,直到分析完所有的购物篮即可。
但是这里面有个问题: 如果一个购物篮里面有100个商品,这个购物篮产生的组合是
, 结果是 2的100次方 ,约等于1000的10次方,如果这样的购物车数以万个,这个数实在实在是超出了计算平台承受范围。
由此产生了下面的算法..............................................请往下看.
1、Apriori算法
(1)扫描购物篮,对项集进行计数
项集
| 累计数 |
i1 |
3
|
i2
| 4 |
i3
|
3
|
i4
|
2
|
i5
|
1
|
(2)与最小支持度(最小支持度=2)比较,去掉小于的
项集
| 累计数 |
i1 | 3 |
i2
| 4 |
i3
|
3
|
i4
|
2
|
(3)对该项集进行自身连接
项集
| 累计数 |
i1,i2 |
2
|
i1, i3
|
1
|
i1,14
|
1
|
i2,i3
|
2
|
i2,i4
|
2
|
i3,i4
|
0
|
(4)与最小支持度(最小支持度=2)比较,去掉小于的
项集
| 累计数 |
i1,i2 |
2
|
i2,i3
|
2
|
i2,i4
|
2
|
就这样迭代下去,越往后面算,计算量越小
频繁项集的子集必然是频繁的,我们可以删去一部分项 .
可见Apriori算法可以分成 连接,剪枝 两个步骤不断循环重复;
缺点:需要频繁扫描所有购物篮数据,就是读取的数据没变小,但是需要计算的结果集合小了
2、FP 算法
基本思路是:不断地迭代FP-tree的构造和投影过程。
对于每个频繁项,构造它的条件投影数据库和投影FP-tree。对每个新构建的FP-tree重复这个过程,直到构造的新FP-tree为空,或者只包含一条路径。当构造的FP-tree为空时,其前缀即为频繁模式;当只包含一条路径时,通过枚举所有可能组合并与此树的前缀连接即可得到频繁模式。
算法论文: http://infolab.stanford.edu/~echang/recsys08-69.pdf
3、分部署PFP 算法
待续...