让我用样本虹膜数据集来简化我的问题。下面是我看到的在Iris数据集上启动FPGrowth运算符的输出:
请看我的红色笔记,在这个示例中,我只需要a3_range1和a2_range5以及所有3项集合,因为所有其他项目都是较大集合的子集。
有没有办法在FPGrowth本身的帮助下做到这一点?或者我必须解决ExecuteScript的问题?在后一种情况下,我似乎甚至无法导入和迭代FPGrowth之后的输入:如果我这样做:
ExampleSet exampleSet = operator.getInput(ExampleSet.class);
我得到“操作员需要一些未提供的ExampleSet输入”。如果我将其更改为:
FPGrowth exampleSet = operator.getInput(FPGrowth.class);
它抱怨说它无法解析FPGrowth类。
如何在ExecuteScript代码中导入它?
发布于 2014-12-09 15:58:38
您所描述的是挖掘频繁最大项集的问题,而不是挖掘所有频繁项集的问题。
在文献中,已经提出了几种算法来解决这个问题: GenMax,LCMMax,FPMax,MAFIA等,特别是FPMax是基于FPGrowth的。
但我不认为它们是在您正在使用的工具中实现的。
如果效率不重要,您可以通过后处理来实现。如果效率很重要,你可以使用上面的算法之一(如果没有提供,也可以实现它们)
顺便说一下,您可以看看my SPMF Java open-source data mining library,它提供了60多种算法,专门用于模式挖掘。特别地,它提供了一种Charm-MFI的实现,通过对闭合项目集进行后处理来发现最大项目集,从而避免了探索所有频繁项目集的搜索空间。
发布于 2014-08-19 16:25:58
我用下面的R脚本解决了这个问题:
FPSet <- as.data.frame(FPSet)
trim <- function (x) gsub("^\\s+|\\s+$", "", x)
for(i in 1:nrow(FPSet)) {
current <- trim(unlist(strsplit(toString(FPSet[i,"Items"]),',')))
for(j in 1:nrow(FPSet)) {
if(i!=j) {
compare <- trim(unlist(strsplit(toString(FPSet[j,"Items"]),',')))
if(setequal(intersect(current,compare),current) || length(current) == 1) {
FPSet[i,'subset'] = 1
}
}
}
}
FPSet<-FPSet[is.na(FPSet$subset), ]
FPSet$subset <- NULL
"Items"
列是存储子集/集的位置
https://stackoverflow.com/questions/25229240
复制