Мы пытаемся реализовать классификатор WEKA из Java-программы. Пока все хорошо, все работает хорошо, однако при построении классификатора из обучающего набора в Weka GUI мы использовали преобразование 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 ...