首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rapidminer FPGrowth也返回子集。我只需要最大频繁项目集

Rapidminer FPGrowth也返回子集。我只需要最大频繁项目集
EN

Stack Overflow用户
提问于 2014-08-10 21:48:03
回答 2查看 240关注 0票数 0

让我用样本虹膜数据集来简化我的问题。下面是我看到的在Iris数据集上启动FPGrowth运算符的输出:

请看我的红色笔记,在这个示例中,我只需要a3_range1和a2_range5以及所有3项集合,因为所有其他项目都是较大集合的子集。

有没有办法在FPGrowth本身的帮助下做到这一点?或者我必须解决ExecuteScript的问题?在后一种情况下,我似乎甚至无法导入和迭代FPGrowth之后的输入:如果我这样做:

代码语言:javascript
复制
ExampleSet exampleSet = operator.getInput(ExampleSet.class);

我得到“操作员需要一些未提供的ExampleSet输入”。如果我将其更改为:

代码语言:javascript
复制
FPGrowth exampleSet = operator.getInput(FPGrowth.class);

它抱怨说它无法解析FPGrowth类。

如何在ExecuteScript代码中导入它?

EN

回答 2

Stack Overflow用户

发布于 2014-12-09 23:58:38

您所描述的是挖掘频繁最大项集的问题,而不是挖掘所有频繁项集的问题。

在文献中,已经提出了几种算法来解决这个问题: GenMax,LCMMax,FPMax,MAFIA等,特别是FPMax是基于FPGrowth的。

但我不认为它们是在您正在使用的工具中实现的。

如果效率不重要,您可以通过后处理来实现。如果效率很重要,你可以使用上面的算法之一(如果没有提供,也可以实现它们)

顺便说一下,您可以看看my SPMF Java open-source data mining library,它提供了60多种算法,专门用于模式挖掘。特别地,它提供了一种Charm-MFI的实现,通过对闭合项目集进行后处理来发现最大项目集,从而避免了探索所有频繁项目集的搜索空间。

票数 1
EN

Stack Overflow用户

发布于 2014-08-20 00:25:58

我用下面的R脚本解决了这个问题:

代码语言:javascript
复制
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"列是存储子集/集的位置

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25229240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档