Вывод Weka API классификатора RandomSubSpace в Java

Я создал классификатор RandomSubSpace в weka exploer и теперь пытаюсь использовать его с weka Java API, однако, когда я запускаю distibutionForInstance (), я получаю массив с 1.0 в качестве первого значения и 0.0 для всех остальных. Я пытаюсь получить численное предсказание, а не класс. Есть ли другая функция, которую я должен использовать, или другой вариант в distributionForInstance? Фрагмент кода ниже:

Классификатор cls = (Классификатор) weka.core.SerializationHelper.read ("2015-09-6 Random Subspace Model.model");

Экземпляры originalTrain = new DataSource ("Instances.arff"). GetDataSet ();

         int cIdx=originalTrain.numAttributes()-1;
         originalTrain.setClassIndex(cIdx);


         int s1=1;  


         double value=cls.classifyInstance(originalTrain.instance(s1));


         double[] percentage=cls.distributionForInstance(originalTrain.instance(s1));



         System.out.println("The predicted value of instance "+Integer.toString(s1) +"Value: " + percentage[1]); 
         System.out.println(Arrays.toString(percentage));

Это дает мне результат, который выглядит следующим образом: Прогнозируемое значение экземпляра 1Value: 0,0 [1,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0]

Кто-нибудь знает, как получить числовой вывод, как в weka explorer?

Заранее спасибо.


person Dan F    schedule 12.09.2015    source источник


Ответы (2)


Метод:

classif.distributionForInstance(instance);

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

person shirowww    schedule 15.09.2015

Когда вы классифицируете экземпляр, мы даем вам индекс атрибута класса. Вы должны сопоставить это значение:

originalTrain.classAttribute().value((int) cls.classifyInstance(originalTrain.instance(s1))))

person Istvan Nagy    schedule 12.09.2015
comment
Спасибо за ответы. Я все еще получаю аналогичный результат. Я продолжаю получать TX в качестве вывода этой функции для любого указанного мной экземпляра. Я понятия не имею, откуда это взялось. Состояния являются частью набора данных, поэтому мне интересно, захватывает ли он оттуда TX? - person Dan F; 14.09.2015
comment
Строковое значение = originalTrain.classAttribute (). Value ((int) cls.classifyInstance (originalTrain.instance (s1)))) Вы пытались распечатать это значение? - person Istvan Nagy; 14.09.2015
comment
Да. Я думаю, проблема в том, что эта модель предсказывает числовое значение, а не номинальное, поэтому членство в классе отсутствует. Должен быть просто числовой прогноз, аналогичный выходному результату модели линейной регрессии. Возможно, это неправильные функции? Кажется, все они связаны с классовой принадлежностью. - person Dan F; 14.09.2015
comment
да, модель предсказывает двойное значение, которое представляет индекс значения атрибута класса. Когда вы получите это значение, вы получите предполагаемый номинальный класс. - person Istvan Nagy; 14.09.2015
comment
Спасибо за твою помощь. Однако я все еще немного сбит с толку, насколько я понимаю, если классификатор был построен для предсказания числового независимого значения, не существует номинального класса, членом которого можно было бы быть. Каждый раз, когда я запускаю String процент = originalTrain.classAttribute (). Value ((int) cls.classifyInstance (originalTrain.instance (s1))); Я получаю тот же результат, что и строка TX - person Dan F; 14.09.2015
comment
Например, это вывод в weka explorer: inst #, фактический, прогнозируемый, ошибка 1 0,182 0,201 0,019 - person Dan F; 14.09.2015
comment
Хорошо, я думаю, проблема в setClassIndex () - person Dan F; 14.09.2015
comment
Собственно только что разобрался. Так я устанавливал индекс класса. Спасибо большое за вашу помощь! - person Dan F; 14.09.2015