【问题标题】:application about generating pairs of frequent itemset关于生成频繁项集对的应用
【发布时间】:2011-04-17 06:46:03
【问题描述】:

我正在做一个应用程序,它将从一组事务中计算所有 2 个大小的频繁项集。也就是说,应用程序将输入一个数据文件(空格分隔的文本文件 - 项目编码为整数)和一个百分比,以整数形式给出(例如,输入 2 表示 2%)。应用程序将在一个不同的文件中输出在超过 2% 的所有事务(其中 2% 是输入中给出的百分比)中出现在同一事务中的每一对数字(事务由文件中的一行表示) )。输出文件将包含一行中的每对项目及其支持(它们出现的事务数),应用程序还将输出(在文件中的屏幕上)持续时间(执行任务所需的时间) .

数据文件会像

55 22 33 123 231 414

21 43 432 435 231 4324 534

22 21 33 123 231 534 666 222

...

每一行称为一个事务,输入文件包含数千个事务。 我正在考虑先用数据挖掘规则找出每笔交易中出现频率大于2%的所有单数,然后为每笔交易结对,最后比较每对并生成输出文件。

任何人对此有一些想法或代码,请帮助,如果您有代码(在 java 中更好),这将非常有帮助。非常感谢。

【问题讨论】:

  • 我们需要更多信息。使用您的数据,一些示例输出会是什么?
  • 输出应该像包含频率的数字对,其出现频率 >=2%,谢谢

标签: java data-mining


【解决方案1】:

这是计算整数的一种方法。

public class IntCount {

    public static void main(String[] args) {
        count("123 234 456 678 789 234 234 123");

    }

    public static void count(String transactionLine) {
        String[] parts = transactionLine.split(" ");

        Map<String, Integer> hashTable = new HashMap<String, Integer>();
        // Count duplicates
        for (String s : parts) {
            if (hashTable.get(s) == null) hashTable.put(s, 1);
            else hashTable.put(s, hashTable.get(s) + 1);
        }

        for (String s : hashTable.keySet()) {
            System.out.println("s: " + s + " count: " + hashTable.get(s));
        }
    }
}

现在您可以开始确定 2% 的部分了。

【讨论】:

  • 您认为首先存储所有数字然后将所有可能的对存储在对对象数组中会更好吗?我已经编写了一个 pair 类来表示对象,它适用于测试数据,但我不确定它是否是一个有效的解决方案
  • 听起来我们可以一次完成一行/一个事务,这样可以节省资源。但是,我不能说我理解 2% 的部分。如果一笔交易有 100 个整数,其中 3 个是相同的,这会是 3% 吗?
【解决方案2】:

每次进行一项交易。对于每笔交易,找到所有配对的号码。将它们放在HashTable&lt;Integer,Integer&gt; 中,数字为键,值为1。如果已经有条目,则增加值。

处理完所有交易后,通过HashMap 查找大于交易总数 2% 的值。这些是你的赢家。

它们可以直接输出到一个文件中,也可以存储在另一个数据结构中以便首先排序。

【讨论】:

  • 但是如何比较哈希表中的对,我的意思是按照你的方式,你是说将所有数字对存储在哈希表中并设置键值以指示出现时间
  • 我正在考虑使用 pair 对象来存储每笔交易生成的对,这样,您可以轻松说出哪些对是相同的并记录显示时间。但我不知道该怎么做它在哈希表中,你能更详细一点吗
【解决方案3】:

你想要做的,基本上是找到所有所有频繁的 2 项集。具有“k”个元素的项集称为 k-itemset。 您的任务最简单的方法是在找到所有频繁的 2 项集后修改 java 中的任何开源 apriory 实现以停止枚举项集。这不会那么困难,因为 Apriori 从计算所有 1 项集开始,然后获取所有频繁的 1 项集,使用它们生成候选 2 项集,再次扫描数据库,计算对那些候选 2 的支持-项集,选择频繁项,生成候选 3 个项集,依此类推…… 例如,假设频繁 1 项集如下 一个,c,d 然后,该算法生成所有可能的 2 个项集,如下所示 交流,广告,CD 通过再次扫描数据库并过滤掉不频繁的数据库来计算他们的支持。

【讨论】:

    【解决方案4】:

    您可以创建一个大小为 n x n 的二维数组,其中 n 是项目数。

    矩阵将存储每对项目的支持度。

    然后您扫描交易并增加矩阵中的计数。

    读完数据库后,你就有了矩阵中所有大小为 2 的项集及其频率。

    请注意,为了提高效率,通常使用三角矩阵。

    【讨论】:

      猜你喜欢
      • 2016-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-06
      • 2018-03-25
      • 2016-01-26
      • 2016-09-19
      • 2012-12-20
      相关资源
      最近更新 更多