Как получить результаты от WEKA

Я понимаю, как использовать API WEKA. Сначала я загружаю arff в программу, которая создает Instances. Затем они будут переданы Classifier, обученному этому набору данных. Теперь я хочу дать ему новый тестовый набор данных без метки и заставить API WEKA сообщить мне, какая метка для этого экземпляра есть или может быть. Как это делается?


person prometheuspk    schedule 20.04.2012    source источник


Ответы (2)


Вы используете Classifier.classifyInstance(Instance)

http://weka.sourceforge.net/doc/weka/classifiers/Classifier.html

person daveb    schedule 20.04.2012
comment
Что это за двойное значение, которое возвращает метод? Это индекс предсказанного класса? - person prometheuspk; 20.04.2012
comment
@Prometheus87 Classifier.classifyInstance(Instance) вернет двойное значение, соответствующее Instance.classValue (внутреннее представление класса). Здесь есть хороший учебник: weka.wikispaces.com/Use+WEKA +в+вашем+коде+Java - person daveb; 20.04.2012

Ваши обучающие и тестовые экземпляры должны выглядеть точно так же.

значение признака 1, значение признака 2......., значение свойства n, значение класса значение признака 1, значение признака 2 ......., значение признака n, значение класса

Когда вы применяете свою модель к своему тестовому набору, Weka не будет предоставлять вашей модели значение класса экземпляров. Скорее он спросит: «Эй, классификатор, позвольте мне посмотреть, как вы назначаете классы каждому из тестовых экземпляров, как вы узнали из обучающего набора». Затем модель классификатора назначает каждому тестовому экземпляру класс на основе того, что он узнал из обучающего набора. Затем Weka сравнивает его и предоставляет результат с точки зрения точности, отзыва, f-оценки, ROC, AUC, ошибок и т. д. Таким образом, ваш тестовый экземпляр будет иметь значения класса. Не исключайте этого. В противном случае вы получите ошибку типа «обучающий и тестовый наборы несовместимы».

person Rushdi Shams    schedule 23.04.2012
comment
Привет. Я обучил свой классификатор, но теперь проблема с прохождением Instance. У меня есть около 100 числовых функций в одном экземпляре и один строковый символ в качестве метки или класса. Я не могу инициализировать свой экземпляр. вы видите, что конструктор Instance(double weight, double[] attrValues), и теперь в экземпляре classify выдается weka.core.UnassignedDatasetException, и он говорит, что экземпляр не имеет доступа к набору данных. Я не могу добавить 101-й атрибут, то есть строковый символ, в attrValues[], так как он имеет тип double Что я здесь делаю неправильно? - person prometheuspk; 27.04.2012
comment
проблема заключалась в том, что я не назначал никаких данных на новый Instance. Это должен был сделать Instance.setData(), и затем вы передадите объект экземпляров, с которым был обучен классификатор. - person prometheuspk; 30.04.2012