Скажем, я построил модель (например, дерево J4.8) и оценил ее с помощью перекрестной проверки. Как я могу использовать эту модель для классификации нового набора данных? Я знаю, я могу установить файл с данными для классификации с опцией «Предоставленный набор тестов», отметить «Вывод прогнозов» в окне «Дополнительные параметры» и снова запустить классификацию. Он будет производить почти то, что мне нужно, но это кажется очень странным рабочим процессом. Кроме того, он пересоздает всю модель, что может занять лишнее время. Есть ли более простой способ сделать классификацию с уже построенной моделью?
Как применить классификатор в Weka's Explorer?
Ответы (2)
В пакете misc есть специальный класс SerializedClassifier, он принимает файл модели в качестве параметра и имеет имитацию фазы обучения.
Есть несколько способов сделать это.
Первый
Вы можете использовать командную строку для сохранения и загрузки вашей модели, ключи командной строки -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 для своего классификатора. Таким образом, вы сохраняете свой классификатор и повторно используете его снова. Выполните следующие действия.
- Нажмите кнопку «Дополнительные параметры».
- В открытом
выберите выходной исходный код.
- Дайте имя классификатора более осмысленное имя.
Эти шаги выведут классы 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;
}
}