Мы пытаемся реализовать классификатор WEKA изнутри программы Java. Пока все хорошо, все работает хорошо, однако при создании классификатора из обучающего набора в графическом интерфейсе Weka мы использовали IDF-преобразование StringToWordVector, чтобы повысить точность классификации.
Как внутри Java для новых экземпляров вычислить преобразование IDF для установки каждого значения токена в новом экземпляре перед передачей экземпляра классификатору?
Базовый код выглядит так:
Instances ins = vectorize(msg);
Instances unlabeled = new Instances(train,1);
Instance inst = new Instance(unlabeled.numAttributes());
String tmp = "";
for(int i=0; i < ins.numAttributes(); i++) {
tmp = ins.attribute(i).name();
if(unlabeled.attribute(tmp)!=null)
inst.setValue(unlabeled.attribute(tmp), 1.0); //TODO: Need to figure out the IDF transformed value to put here NOT 1!!
}
unlabeled.add(inst);
unlabeled.setClassIndex(classIdx);
.....cl.distributionForInstance(unlabeled.instance(i));
Итак, как мне закодировать это, чтобы я поместил правильное значение в новый экземпляр, который я хочу классифицировать?
Просто для ясности строку inst.setValue(unlabeled.attribute(tmp), 1.0);
нужно изменить с 1.0
на преобразованный номер IDF...