关于生成频繁项集对的应用

时间:2010-09-25 21:58:59

标签: java data-mining

我正在做一个应用程序,它将从一组事务中计算所有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中更好),这将非常有用非常感谢。

4 个答案:

答案 0 :(得分:3)

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

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%的部分。

答案 1 :(得分:1)

每次执行一笔交易。对于每笔交易,找到所有已配对的号码。将它们放在HashTable<Integer,Integer>中,其中数字为键,值为1.如果已有条目,则递增该值。

处理完所有交易后,请浏览HashMap并查找超过交易总数2%的值。这些是你的赢家。

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

答案 2 :(得分:0)

你想要做的,基本上是找到所有所有的2项目集。具有'k'元素的itemset称为k-itemset。 您的任务最简单的方法是在找到所有频繁的2项集后,修改java中的任何开源apriory实现以停止枚举项集。这并不困难,因为Apriori从计算所有1个项目集开始,然后它需要所有频繁的1项目集,使用它们生成候选2项目集,再次扫描数据库,计算对那些候选项目的支持2-项目集,选择频繁项目集,生成候选3项集等等...... 例如,假设频繁的1个项目集如下 a,c,d 然后,算法生成所有可能的2个项目集,如下所示 ac,ad,cd 通过再次扫描数据库并筛选出不常用的数据来计算其支持。

答案 3 :(得分:0)

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

矩阵将存储每对物品的支撑。

然后扫描事务并增加矩阵中的计数。

读完数据库后,您将所有大小为2的项目集及其频率放在矩阵中。

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