Как применить классификатор в Weka's Explorer?

Скажем, я построил модель (например, дерево J4.8) и оценил ее с помощью перекрестной проверки. Как я могу использовать эту модель для классификации нового набора данных? Я знаю, я могу установить файл с данными для классификации с опцией «Предоставленный набор тестов», отметить «Вывод прогнозов» в окне «Дополнительные параметры» и снова запустить классификацию. Он будет производить почти то, что мне нужно, но это кажется очень странным рабочим процессом. Кроме того, он пересоздает всю модель, что может занять лишнее время. Есть ли более простой способ сделать классификацию с уже построенной моделью?


person ffriend    schedule 15.03.2011    source источник


Ответы (2)


В пакете misc есть специальный класс SerializedClassifier, он принимает файл модели в качестве параметра и имеет имитацию фазы обучения.

person yura    schedule 17.03.2011
comment
Я так понимаю специальной кнопки Classify нет и этот вариант кажется наиболее подходящим. Я принимаю этот ответ. - person ffriend; 17.03.2011

Есть несколько способов сделать это.

Первый

Вы можете использовать командную строку для сохранения и загрузки вашей модели, ключи командной строки -l и -d позволяют вам это сделать.

Из документов Weka

-l 
    Sets model input file. In case the filename ends with '.xml',
    a PMML file is loaded or, if that fails, options are loaded
    from the XML file.
-d 
    Sets model output file. In case the filename ends with '.xml',
    only the options are saved to the XML file, not the model.

Второй

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

Третий

Также вы можете сгенерировать код Java для своего классификатора. Таким образом, вы сохраняете свой классификатор и повторно используете его снова. Выполните следующие действия.

  1. Нажмите кнопку «Дополнительные параметры».
  2. В открытом dialogвыберите выходной исходный код.
  3. Дайте имя классификатора более осмысленное имя.

Эти шаги выведут классы Java для вашего классификатора j48. Приведенный ниже класс WekaJ48ForIris создан weka для использования с набором данных Iris. Возможно, вам потребуется реорганизовать его, чтобы сделать его более полезным.

class WekaJ48ForIris {

  public static double classify(Object[] i)
    throws Exception {

    double p = Double.NaN;
    p = WekaJ48ForIris.N26a305890(i);
    return p;
  }
  static double N26a305890(Object []i) {
    double p = Double.NaN;
    if (i[3] == null) {
      p = 0;
    } else if (((Double) i[3]).doubleValue() <= 0.6) {
      p = 0;
    } else if (((Double) i[3]).doubleValue() > 0.6) {
    p = WekaJ48ForIris.N18c079301(i);
    } 
    return p;
  }
  static double N18c079301(Object []i) {
    double p = Double.NaN;
    if (i[3] == null) {
      p = 1;
    } else if (((Double) i[3]).doubleValue() <= 1.7) {
    p = WekaJ48ForIris.N4544b022(i);
    } else if (((Double) i[3]).doubleValue() > 1.7) {
      p = 2;
    } 
    return p;
  }
  static double N4544b022(Object []i) {
    double p = Double.NaN;
    if (i[2] == null) {
      p = 1;
    } else if (((Double) i[2]).doubleValue() <= 4.9) {
      p = 1;
    } else if (((Double) i[2]).doubleValue() > 4.9) {
    p = WekaJ48ForIris.N3a0872863(i);
    } 
    return p;
  }
  static double N3a0872863(Object []i) {
    double p = Double.NaN;
    if (i[3] == null) {
      p = 2;
    } else if (((Double) i[3]).doubleValue() <= 1.5) {
      p = 2;
    } else if (((Double) i[3]).doubleValue() > 1.5) {
      p = 1;
    } 
    return p;
  }
}
person Atilla Ozgur    schedule 10.05.2012