预测Weka机器学习中的“无类”/无法识别的类

时间:2016-03-08 15:17:07

标签: machine-learning classification weka random-forest text-classification

我正在使用Weka 3.7根据文本内容对文本文档进行分类。我在文件夹中有一组文本文件,它们都属于某个类别。

Category A: 100 txt files
Category B: 100 txt files
...
Category X: 100 txt files

如果文档属于 UNRECOGNIZED 类别(对于所有其他文档),我想预测某个文档是否属于AX, OR 类别之一。

我以编程方式获取实例的全部实例:

private Instances getTotalSet(){
    ArrayList<Attribute> listOfAttributes = new ArrayList<Attribute>(2);

    Attribute classAttribute = getClassAttribute();
    listOfAttributes.add(classAttribute);
    listOfAttributes.add(new Attribute("text", (ArrayList) null));

    Instances totalSet = new Instances("Rel", listOfAttributes,2);
    totalSet.setClassIndex(1);

    File[] classNamesFolders = new File(path).listFiles((FileFilter) FileFilterUtils.directoryFileFilter());
    for(File folder: classNamesFolders){
        if(folder.getName().equals("UNRECOGNISED")){
            continue;
        }
        System.out.println("Adding "+folder.getName());

        //all txt files in that subfolder
        for(File file : FileUtils.listFiles(folder.getAbsoluteFile(), new SuffixFileFilter(".txt"), DirectoryFileFilter.DIRECTORY)){
            try {
                Instance instance = new DenseInstance(2);
                instance.setValue(listOfAttributes.get(0), folder.getName());
                instance.setValue(listOfAttributes.get(1), FileUtils.readFileToString(file.getAbsoluteFile()));

                totalSet.add(instance);
            }catch(IOException e){
                System.out.println("Couldn't add "+e);
            }
        }
    }
    return totalSet;
}

在这种情况下,我使用的是RandomForest分类器(但这不应该对我的问题产生影响)

RandomForest rf = new RandomForest();
rf.setNumTrees(500);
rf.setMaxDepth(25);
rf.setSeed(1);
System.out.println("Building random forest with " + rf.getNumTrees() + " trees");
rf.buildClassifier(train);

当我做出预测时,我可以看到新文档应该属于哪个类别,但我怎样才能知道该文档是否属于任何类别。在进行预测时我可以访问

double pred = rf.classifyInstance(test.instance(i));    
double dist[] = rf.distributionForInstance(test.instance(i));

实例的分发,但是我如何消除文档根本不应该被识别并具有UNRECOGNIZED类别。

0 个答案:

没有答案