如何识别在 weka 中被错误分类的确切实例
How to identifying the exact instances that are wrongly classified in 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());
}
下面是一个可以帮助您解决问题的方法。因此,您可以对其进行编辑以达到您的目的。
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"。否则,您必须提供测试集。
这是我的代码,我使用的是 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());
}
下面是一个可以帮助您解决问题的方法。因此,您可以对其进行编辑以达到您的目的。
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"。否则,您必须提供测试集。