Apriori和FPgrowth算法学习

这两天看了这两个算法,主要来源是机器学习实战。

1.Apriori算法

首先是两个定义

项集的支持度,定义为数据集中包含该项集的记录所占的比例。比如对于一个单独的item,那么item的支持度为item出现的数据集比上总的数据集,这里注意如果一个数 据条目中重复出现一个item多次,那么提取数据时只计算为1次,也就是我们并不关心某人买了两件商品0以及两件商品2的情况,只关心购买了商品0和商品2。

可信度(置信度),指规则的支持度,如{面包->牛奶}这条规则,为{面包,牛奶}的支持度比上{面包}的支持度

算法的主要原理:

如果一个项集是频繁的,那么他的子项集一定是频繁的,不如{0,1}这个项集出现100次,那么0和1也一定至少出现过100次。也就是说在算法运行过程中,如果我们知道

一个子项集的支持度小于阈值,那么就不用为这个子项集生成更大的项集了。如一旦计算出项集{2,3}的支持度小于阈值,那么就不用再计算{1,2,3}这样的项集了。

具体代码可参见教材。

代码中一个优化的地方是,利用两个k大小的子项集生成k+1项集时,只比较子项集的前k-1项,若这k-1项相同,那么就可以合并为一个k+1项集。比如,利用{1,3} ,{2,3}{3,5},{2,5}这几个项集生成3大小的项集时,可以只比较第一个,那么可以生成的项集为{2,3,5}。 原因是若一个k+1项集是频繁的,比如是{a1,a2,...a(k+1)}那么他必有两个子项集为{a1,a2,...a(k-1),ak}和{a1,a2,...a(k-1),a(k+1)}

2.FPgrowth算法

基本原理和Apriori相同,只不过在训练过程中采用了FP树,速度上会优于Apriori算法,在运用这个算法的过程中,我涉及到的数据集中有7851个item(大于阈值的估计有5000左右),最后生成的FreqList有300w条,算法运行时间在半小时左右,感觉速度上还可以满足要求。虽然最后发现的pattern不是很满意,进一步优化中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值