Как определить точные экземпляры, которые неправильно классифицированы в weka

Вот мой код, я использую weka API. Я хочу распечатать неправильно классифицированные экземпляры и экземпляры, которые классифицированы точно. пожалуйста, помогите мне или расскажите мне о любом другом java API для классификации текстов, который способен делать то, что я хочу.

    public void evaluation() throws Exception{
    BufferedReader reader=null;
    reader= new BufferedReader(new FileReader("SparseDTM.arff"));

    Instances train= new Instances(reader);
    train.setClassIndex(0);
    train.toSummaryString();
    reader.close();
    SMO svm=new SMO();
    svm.buildClassifier(train);

    NaiveBayes nB = new NaiveBayes();
    nB.buildClassifier(train);

    weka.classifiers.Evaluation eval= new weka.classifiers.Evaluation(train);
    eval.crossValidateModel(nB, train,10,new Random(1));
    //eval.crossValidateModel(nB, train,10,new Random(1), new Object[] { });

    System.out.println("\n\t************Results by Naive Bayes Classifier************\n");
    System.out.println(eval.toSummaryString("", true));
    System.out.println(eval.toClassDetailsString());
//  System.out.println("F Measure: "+eval.fMeasure(1) + " " + "Precision: "+eval.precision(1) + " " + "Precision: "+eval.recall(1));
//  System.out.println("Correct :" + eval.correct());
//  System.out.println("Weighted True Negative Rate: " + eval.weightedTrueNegativeRate());
//  System.out.println("Weighted False Positive Rate:" + eval.weightedFalsePositiveRate());
//  System.out.println("Weighted False Negative Rate:" + eval.weightedFalseNegativeRate());
//  System.out.println("Weighted True Positive Rate:" + eval.weightedTruePositiveRate());
    System.out.println(eval.toMatrixString());
    }

person Umair Malik    schedule 19.06.2015    source источник


Ответы (1)


Ниже приведен метод, который поможет вам решить вашу проблему. Итак, вы можете отредактировать его, чтобы достичь своей цели.

public void showPredictions(  ){    

    BufferedReader reader=null;
    reader= new BufferedReader(new FileReader("SparseDTM.arff"));

    Instances data = new Instances(reader);

    double[] predictions;
    try {

        NaiveBayes classifier = new NaiveBayes();
        classifier.buildClassifier(data);

        predictions = eval.evaluateModel(classifier, data );

        int classIndex = data.numAttributes()-1;
        // getting the array of predictions for each instance
        System.out.println("predictions: ");
        for (int i=0; i < data.numInstances(); i++ ) {
            double realValue = testData.instance(i).classValue(); // test or train data.
            System.out.print("Real Value: " + testData.instance(i).stringValue( classIndex ));
            System.out.println("\tClassification predicted value: " + predictions[i]);

            if( realValue != predictions[i] ) {
                System.out.println("misclassified instance: " + testData.instance(i).toString());
            }
        }       
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Замените «testData» на «data», если вы можете наблюдать неправильно классифицированные экземпляры, связанные с обучающим набором. В противном случае необходимо предоставить тестовый набор.

person Alex Rego    schedule 19.06.2015
comment
Это решение предназначено для набора тестовых данных после того, как мы построим модель, но как насчет перекрестной проверки? и спасибо за ваш ответ - person Umair Malik; 20.06.2015
comment
Ваше решение показало мне способ сделать это, большое спасибо. Я сделал это ...... :) - person Umair Malik; 20.06.2015
comment
Для перекрестной проверки вы должны применить решение в каждой сгибе, чтобы увидеть неправильно классифицированные экземпляры. В этом случае взгляните на этот исходный код [ссылка] (weka.wikispaces.com/ - person Alex Rego; 22.06.2015