经过研究,有了新的答案,先按照代码规则,{1,3,,5}可以出现在合并后的集合中,但是{1,3,5}需有{1,3}和{1,5}两个二项频繁项集合并而成。但是,{1,5}并没有
出现在二项频繁项集中,说明{1,5}并非频繁项集。然后,根据Apriori原理,说如果某个项集是频繁的,那么它的所有子集也是频繁的。其逆否命题则为
(这是重点啊,说三遍,重点,重点,重点):
某个子项集不是频繁的,那么它的超集也不是频繁的。
所以,根据apriori算法,楼主的超集{1,3,5}直接被筛掉了。
望采纳!
对于《机器学习实战》Apriori源码的疑问
源码参考:
http://blog.csdn.net/namelessml/article/details/52718628
我有疑问的代码如下:
# 创建候选项集Ck
# Lk,频繁项集列表
# k,项集元素的个数
def aprioriGen(Lk, k) : # create Ck
# 创建一个空列表
retList = []
# 计算Lk中的元素
lenLk = len(Lk)
for i in range(lenLk) :
for j in range(i+1, lenLk) :
# 当前k-2个项相同时,将两个集合合并
L1 = list(Lk[i])[:k-2]
L2 = list(Lk[j])[:k-2]
L1.sort()
L2.sort()
if L1==L2 :
# python中集合的并操作对应的操作符为|
retList.append(Lk[i] | Lk[j])
return retList
这里作者说“当前k-2个项相同时,将两个集合合并”
那么我用作者提供的数据集测试的时候,当k等于3的时候
Lk等于[{2,3}, {3,5}, {2,5}, {1,3}]
这时候按照上述规则,生成的Ck就是[{2,3,5}]
那么{1,3,5}就被筛掉了,为什么?难道不应该是[{2,3,5},{1,3,5}]吗?
- 点赞
- 写回答
- 关注问题
- 收藏
- 复制链接分享
- 邀请回答