Я использую InputMappedClassifer в weka, чтобы заменить все отсутствующие значения атрибута отсутствующим значением («?»), Но по какой-то причине я все еще получаю значение, не определенное для заданного номинального атрибута исключение мой код выглядит следующим образом:weka inputmappedclassifier mappedinstance Значение не определено для заданного номинального атрибута
Instance mappedInstance = inputMappedClassifier.constructMappedInstance(testData.instance(index));
clsLabel = inputMappedClassifier.classifyInstance(mappedInstance);
mappedInstance.setClassValue(clsLabel);
String key = mappedInstance.stringValue(mappedInstance.numAttributes() - 1);
Обратите внимание, что метод загрузки inputmappedclassifier заключается в следующем:
public static InputMappedClassifier loadInputMappedClassifier(SerializedClassifier serializedClassifier, String modelName) throws Exception {
InputMappedClassifier inputMappedClassifier = new InputMappedClassifier();
inputMappedClassifier.setClassifier(serializedClassifier);
try {
inputMappedClassifier.setModelPath("src/main/resources/" + modelName + ".model");
} catch (Exception e) {
e.printStackTrace();
}
inputMappedClassifier.setModelHeader((Instances) SerializationHelper.readAll("src/main/resources/" + modelName + ".model")[1]);
inputMappedClassifier.setDebug(true);
return inputMappedClassifier;
}
исключение следующим образом:
java.lang.IllegalArgumentException: Value not defined for given nominal attribute!
at weka.core.AbstractInstance.setValue(AbstractInstance.java:507)
at classifiers.Verbs.loadTestInstance(Verbs.java:122)
at realizer.TestRealizer.main(TestRealizer.java:119)
Я создаю тестовый экземпляр с использованием java-кода, и я хочу классифицировать его с помощью inputmappedclassifier, но тестовый экземпляр может содержать значение экземпляра, которое не существует в номинальных значениях атрибутов набора учебных материалов, поэтому оно будет поднимать это исключение , Если я получу все это правильно.
Например, номинальный атрибут.
@attribute LemmaLast {a,o,n,e,l,y,d,s,r,t,z,u,c,b,f,p,m,é,ú,i,k,j,x,v,g,á,ó,w,.,í,h,7,q,4,+,3,0,5,9,6,2,1,!,à,ç,8}
которые представляют собой последний символ в леме. Последним символом тестового экземпляра может быть '|' который не представлен в атрибутах номинального значения, поэтому inputmappedclassifier должен автоматически заполнить это значение с помощью? (Отсутствующее значение)
Это исключение происходит, когда номинальный атрибут не имеет определенного значения, которое вы пытаетесь передать в экземпляре. –
да точно, и что я хочу сделать, это установить это значение, которое я хочу передать отсутствующему (?), Поскольку оно не определено, но inputmappedclassifer должно это сделать –
Показать пример ваших данных. Так определите в этом номинальном атрибуте '?' value in loadInputMappedClassifier –