Как применить классификатор в Weka's Explorer? - PullRequest
5 голосов
/ 16 марта 2011

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

Ответы [ 2 ]

6 голосов
/ 10 мая 2012

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

Первый

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

Из Weka Docs

-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.

Второй

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

Третий

Также вы можете генерировать 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;
  }
}
2 голосов
/ 17 марта 2011

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

...