我试图找到给定数据的频繁项集。在这种情况下,这是一个关于汽车数量的简单示例,如果一个年龄的人结婚或未婚。
1-项集和2-项集的集合如下:
---Freq. 1-itemsets---> 9 times!
[
(1) [age:[20,24]]
(2) [age:[25,29]]
(1) [age:[30,34]]
(1) [age:[35,39]]
(2) [married:[no]]
(3) [married:[yes]]
(1) [num_cars:[0,0]]
(2) [num_cars:[1,1]]
(2) [num_cars:[2,2]]
]
---Freq. 2-itemsets---> 14 times!
[
(1) [age:[20,24],married:[no]]
(1) [age:[20,24],num_cars:[1,1]]
(1) [age:[25,29],married:[no]]
(1) [age:[25,29],married:[yes]]
(1) [age:[25,29],num_cars:[0,0]]
(1) [age:[25,29],num_cars:[1,1]]
(1) [age:[30,34],married:[yes]]
(1) [age:[30,34],num_cars:[2,2]]
(1) [age:[35,39],married:[yes]]
(1) [age:[35,39],num_cars:[2,2]]
(1) [married:[no],num_cars:[0,0]]
(1) [married:[no],num_cars:[1,1]]
(1) [married:[yes],num_cars:[1,1]]
(2) [married:[yes],num_cars:[2,2]]
](不关心括号中的数字,它只是这个项目集的频率;假设本例中的min_support为0.1)
现在我想要获取频率。3-来自频率的项集。2-项目集。在这种情况下,我可以组合两个频率。2-项目集,交集只有一个元素。现在我必须检查这个组合的所有子集(大小为2)是否都是freq中的元素。2-项目集。
如果我这样做,我会得到以下结果:
---Freq. 3-itemsets---> 6 times!
[
(1) [age:[20,24],married:[no],num_cars:[1,1]]
(1) [age:[25,29],married:[no],num_cars:[0,0]]
(0) [age:[25,29],married:[no],num_cars:[1,1]]
(1) [age:[25,29],married:[yes],num_cars:[1,1]]
(1) [age:[30,34],married:[yes],num_cars:[2,2]]
(1) [age:[35,39],married:[yes],num_cars:[2,2]]
]但现在,如你所见,我得到了一个频率。3-项目集,其频率为0。因此,它不应该在freq的集合中。3-项目集。
例如,如果我让Weka (http://www.cs.waikato.ac.nz/ml/weka/)计算这个例子,上述项目集就不会出现在结果中。
但我可以通过组合{年龄:25,29,结婚:否}和{结婚:不,num_cars:1,1}来生成它。
所以我的问题是:
我是不是在生成频繁项集(我的程序在上面构建了这个项集)时犯了错误,或者如果子集是freq的元素,我是否必须首先过滤生成的候选项。2-项集,然后如果频率大于0?
我希望我能把我的问题解释清楚。
谢谢你的帮助!!
发布于 2013-09-01 22:16:01
对于一个基数k的项集是频繁的,它的所有(k-1)-element子集都是频繁的是必要的,但不是充分的。在通过组合(k-1)-element项集并检查子集来生成候选k元素项集之后,您需要再次扫描数据,并丢弃不是真正频繁的候选项集。
https://stackoverflow.com/questions/18558971
复制相似问题