【问题标题】:Rapidminer FPGrowth returning subsets as well. I only need the maximum frequent item setsRapidminer FPGrowth 也返回子集。我只需要最大频繁项集
【发布时间】:2014-10-03 10:52:12
【问题描述】:

让我用示例 Iris 数据集简化我的问题。这是我在 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 Groovy 代码中导入它?

【问题讨论】:

    标签: r groovy data-mining text-mining rapidminer


    【解决方案1】:

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

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

    但我认为它们没有在您使用的工具中实现。

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

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

    【讨论】:

      【解决方案2】:

      我用以下 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" 列是存储子集/集的位置

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-26
        • 1970-01-01
        • 2012-01-03
        • 1970-01-01
        相关资源
        最近更新 更多