Java - WEKA - Добавление новых категорий в тренировочный набор

Я использую WEKA для обучения Java-программы категоризации. Изначально категорий несколько, скажем, 10, и система должна работать с этими начальными категориями и начинать обучение. Для этого...:

String [] categories = {"cat1", "cat2", ..., "cat10"};

public SomeClassifier(String[] categories) {

// Creates a FastVector of attributes.
FastVector attributes = new FastVector(3);

// Add attribute for holding property one.
attributes.addElement(new Attribute(P1_ATTRIBUTE, (FastVector) null));

// Add attribute for holding property two.
attributes.addElement(new Attribute(P2_ATTRIBUTE, (FastVector) null));

// Add values attribute.
FastVector values = new FastVector(categories.length);
for (int i = 0; i < categories.length; i++) {
    values.addElement(categories[i]);
}

attributes.addElement(new Attribute(CATEGORY_ATTRIBUTE, values));

// Create dataset with initial capacity of 25, and set index
Instances myInstances = new Instances(SOME_NAME, attributes, 25);
myInstances.setClassIndex(myInstances.numAttributes() - 1);
}

Хорошо, теперь время идет, и я хочу добавить новую категорию в свой тренировочный набор (скажем, «cat11»), который уже обучается с некоторым успехом. Как я могу это сделать? В документации WEKA сказано: «После создания атрибута его нельзя изменить». Итак, может быть, я могу вытащить атрибут из объекта экземпляров, воссоздать атрибут, а затем вставить его снова... или это все испортит?

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


person Azurlake    schedule 16.08.2012    source источник


Ответы (1)


Хорошо, по-видимому, нет никакого способа сделать это, используя эту реализацию Наивного Байеса. Это связано с тем, что при инициализации классификатора все категории, добавленные к классификатору, должны суммироваться 1, а когда классификатор обучается, новые категории с вероятностью != 0 заставят классификатор вести себя странным образом, имея сумму > 1. Подробнее , классификатор может инициализировать свой алгоритм (расчет условных вероятностей и итераций) с влиянием количества категорий, и добавление новой после создания означало бы каким-то образом перестроить алгоритм.

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

person Azurlake    schedule 21.08.2012