Как получить значение предикации для экземпляра в weka?
Я работаю над Weka и должен выводить значения предикации (вероятности) каждой метки для каждого тестового экземпляра.
в GUI есть опция на вкладке "классификация" как (classify - > options - > Output predicted value), которая делает эту работу, выводя вероятности прогнозирования для каждой метки, но как это сделать в коде java. Я хочу получить оценки вероятности для каждой метки после ее классификации ?
3 ответов
следующий код принимает набор обучающих экземпляров и выводит прогнозируемую вероятность для конкретного экземпляра.
import weka.classifiers.trees.J48;
import weka.core.Instances;
public class Main {
public static void main(String[] args) throws Exception
{
//load training instances
Instances test=...
//build a J48 decision tree
J48 model=new J48();
model.buildClassifier(test);
//decide which instance you want to predict
int s1=2;
//get the predicted probabilities
double[] prediction=model.distributionForInstance(test.get(s1));
//output predictions
for(int i=0; i<prediction.length; i=i+1)
{
System.out.println("Probability of class "+
test.classAttribute().value(i)+
" : "+Double.toString(prediction[i]));
}
}
}
метод "distributionForInstance" работает только для классификаторов, способных выводить прогнозы распределения. Вы можете прочитать на нем здесь.
Я думаю, что нашел решение.
обучающий набор и тестовый набор должны быть равны: тот же заголовок, то же имя атрибутов, тот же порядок. Только меняет цифры. И возникает вопрос: почему я должен ставить класс в тестовый набор, если я его не знаю, и именно это я хочу получить? Кажется, что метод нуждается в чем-то, но когда вы посмотрите на classModel.distributionForInstance(dataModel.instance(0))
, это дает вам прогноз на ваших классах с массивом double.
Итак, необходимо поставить некоторые значения классов в тестовом наборе, а затем ‘distributionForInstance’
дает вам реальный результат ваших занятий.
из Weka GUI, панель классификации - > нажмите "Дополнительные параметры..."- >Выходные прогнозы - > выберите опцию "открытый текст". Теперь щелкните левой кнопкой мыши на " открытый текст "и превратите" outputDistribution "в"True".
обратите внимание, что этот процесс может быть выполнен в последних версиях WEKA, например, WEKA 3.8.0.
с уважением,
Мартин!--1-->