Я обучаю и создаю модель J48, используя WEKA Java Api. Затем я использую classifyInstance() для классификации своего экземпляра. но результат неверный. мой идентификатор кода следующий:
Instances train = reader.getDataSet();
Instances test = reader_test.getDataSet();
train.setClassIndex(train.numAttributes() - 1);
Classifier cls = new J48();
cls.buildClassifier(train);
test.setClassIndex(test.numAttributes() - 1);
for(int i = 0; i < test.numInstances(); i++){
Instance inst = test.instance(i);
double result = cls.classifyInstance(inst);
System.out.println(train.classAttribute().value((int)r));
}
Результат всегда равен 0.0
Наконец, я использую test.insertAttributeAt() перед test.setClassIndex(). следующим образом:
test.insertAttributeAt(train.attribute(train.numAttributes() - 1), test.numAttributes());
Результат становится правильным. Я очень удивлен! однако в большинстве документов функция для вставки атрибута не используется. Я хочу понять, почему результат вдруг стал правильным.