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 ответа:
Я делаю это таким образом:
- классификатор поездов.
- для каждого экземпляра я называю ' классификатор.объясните "
- Если классификация неверна, я сохраняю их по неправильной вероятности (от худшей ошибки до наименее уверенной ошибки)
- самая уверенная ошибка дает мне представление о том, какие признаки следует добавить в классификатор.
Это старый пост, но у меня была та же проблема, и я решил ее по-другому. Может быть, кому-то вроде меня это понадобится.
Что я сделал, так это то, что оценка имеет предсказания метод, который возвращает 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);; } }
Надеюсь, что это кому-то поможет.