weka - 如何打印错误分类的实例

时间:2011-10-18 21:02:58

标签: java nlp classification weka

我的weka输出显示:

Correctly Classified Instances       32083               94.0244 %
Incorrectly Classified Instances      2039                5.9756 %

我希望能够打印出不正确的实例,以便我可以进行调整并理解为何错误分类。

我的打印方法如下 我试图找到其预测类值不等于实际类值的实例,然后打印其属性 但是当我这样做时,属性枚举不打印任何东西。

有没有人建议如何打印错误分类的实例?

非常感谢。

private void printSummary(Classifier base, Evaluation eval, Instances data) throws Exception
{
    // output evaluation
    System.out.println();
    System.out.println("=== Setup ===");
    System.out.println("Classifier: " + classifierName.getClass().getName() + " " + Utils.joinOptions(base.getOptions()));
    System.out.println("Dataset: " + data.relationName());
    System.out.println();

    // output predictions
    System.out.println("# - actual - predicted - error - distribution - token");
    for (int i = 0; i < data.numInstances(); i++) 
    {
        double pred = base.classifyInstance(data.instance(i));
        double actual = data.instance(i).classValue();
        double[] dist = base.distributionForInstance(data.instance(i));

        if (pred != actual)
        {
            System.out.print((i+1));
            System.out.print(" - ");
            System.out.print(data.instance(i).toString(data.classIndex()));
            System.out.print(" - ");
            System.out.print(data.classAttribute().value((int) pred));
            System.out.print(" - ");
            if (pred != data.instance(i).classValue())
                System.out.print("yes");
            else
                System.out.print("no");
            System.out.print(" - ");
            System.out.print(Utils.arrayToString(dist));
            System.out.print(" - ");
            data.instance(i).enumerateAttributes().toString();
            System.out.println();
        }
    }

    System.out.println(eval.toSummaryString());
    System.out.println(eval.toClassDetailsString());
    System.out.println(eval.toMatrixString());
}

2 个答案:

答案 0 :(得分:1)

我这样做:

  1. 列车分类器。
  2. 对于每个实例,我称之为'classifier.explain'
  3. 如果分类不正确,我会以不正确的概率(从最差错误到最不自信的错误)存储它们
  4. 最自信的错误让我了解应该向分类器添加哪些功能。

答案 1 :(得分:1)

这是旧帖子,但我遇到了同样的问题,并以不同的方式解决了它。也许像我这样的人会需要它。

我所做的是评估具有预测方法,该方法返回预测对象的ArrayList。

每个预测对象都有实际和预测,我只是打印每个实例,他的实际值与预测值不一样。

我的代码:

ArrayList<Prediction> predictions = evaluation.predictions();
for (int i = 0, trainDataSize = trainData.size(); i < trainDataSize; i++) {
        Instance instance = trainData.get(i);
        Prediction prediction = predictions.get(i);

        if (prediction.actual() != prediction.predicted()) {

            System.out.println(instance);;

        }

    }

希望对某人有所帮助。