【发布时间】:2016-05-01 23:32:18
【问题描述】:
我在 weka 中使用 InputMappedClassifer 将所有缺失的属性值替换为缺失值(“?”),但由于某种原因,我仍然得到未为给定名义属性异常定义的值,我的代码如下:
Instance mappedInstance = inputMappedClassifier.constructMappedInstance(testData.instance(index));
clsLabel = inputMappedClassifier.classifyInstance(mappedInstance);
mappedInstance.setClassValue(clsLabel);
String key = mappedInstance.stringValue(mappedInstance.numAttributes() - 1);
注意加载输入映射分类器的方法是这样的:
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 应该自动填充该值? (缺失值)
【问题讨论】:
标签: java classification weka test-data