首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从2-项集创建k- -itemsets

从2-项集创建k- -itemsets
EN

Stack Overflow用户
提问于 2013-06-16 00:37:38
回答 2查看 496关注 0票数 0

我已经编写了以下代码来从2元素集生成k元素项集。这两个元素集作为clist1和clist2传递给candidateItemsetGen。

代码语言:javascript
复制
    public static void candidateItemsetGen(ArrayList<Integer> clist1, ArrayList<Integer> clist2) 
        {
            for(int i = 0; i < clist1.size(); i++)
            {
                for(int j = i+1; j < clist2.size(); j++)
                {
                   for(int k = 0; k < clist1.size()-2; k++)
                   {
                       int r = clist1.get(k).compareTo(clist2.get(k));
                       if(r == 0 && clist1.get(k)-1 == clist2.get(k)-1)
                       {
 **                           candidateItemset.add(clist1.get(i), clist1.get(clist1.size()-1), clist2.get(clist2.size()-1));
                       }
                   }
                }
            }
//    return candidateItemset;
        }

生成k-项集的条件是clist1(i) == clist2(i),其中i= 1,…,k-2,clist1(k-2) != clist2(k-2)。但是在我放入**的代码中有错误。我该如何解决这个问题呢?逻辑是此函数生成candidateItemsets,它将再次用作生成其他候选项目集的输入。

EN

回答 2

Stack Overflow用户

发布于 2013-06-16 00:55:32

ArrayList中的add方法最多接受两个参数,而您要传入三个参数。如果您希望添加所有这三个项,请调用add(Integer i)三次。

此外,如果要从函数返回candidateItemsets,则必须声明一个ArrayList<Integer>返回值并创建列表:

代码语言:javascript
复制
public static ArrayList<Integer> candidateItemsetGen(ArrayList<Integer> clist1, ArrayList<Integer> clist2) {
  ArrayList<Integer> candidateItemset = new ArrayList<Integer>();

  for (int i = 0; i < clist1.size(); i++) {
    for (int j = i + 1; j < clist2.size(); j++) {
      for (int k = 0; k < clist1.size() - 2; k++) {
        int r = clist1.get(k).compareTo(clist2.get(k));
        if(r == 0 && clist1.get(k) - 1 == clist2.get(k) - 1) {
          candidateItemset.add(clist1.get(i));
          candidateItemset.add(clist1.get(clist1.size() - 1));
          candidateItemset.add(clist2.get(clist2.size() - 1));   
        }        
      }
    }
  }

  return candidateItemset;
}

如果您希望将这三个值作为一组相关值添加,请将它们一起存储在单独的数据结构中,并将其添加到candidateItemset (类型正确)。

票数 0
EN

Stack Overflow用户

发布于 2013-09-06 22:42:04

如果您考虑到每个项目集列表都是根据词法顺序排序的,那么您可以进一步优化该代码。

例如,让我们假设

clist1 = AB、AD、AF、AG、BC、FG

clist2 = BD、FE、FG、FH、FI

在您的代码中,您将把AB与clist2的所有项目集进行比较。

但是你可以优化这一点,在BD之后立即停止,因为根据词汇顺序,AB中的B大于A。因此,Clist2中BD之后的任何项目集都不会与AB匹配。

如果你想看一个优化过的Apriori实现的代码,你可以查看我的open source data mining library named SPMF

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

https://stackoverflow.com/questions/17125742

复制
相关文章

相似问题

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