当我尝试打印实例数时,它显示0(零)。但是当我使用Weka API手动选择ARFF文件时,我的训练数据中有565个实例。我想找到错误的位置。谢谢。
private static void build_model() {
// TODO Auto-generated method stub
try{
// load data
ArffLoader loader = new ArffLoader();
loader.setFile(new File("D:\\MAIN PROJECT\\data.arff"));
Instances structure = loader.getStructure();
structure.setClassIndex(structure.numAttributes() - 1);
System.out.println("Attributes : "+structure.numAttributes());
System.out.println("Instances : "+structure.numInstances());
// train SMO
System.out.println("Before creating smo object");
SMO smo = new SMO();
System.out.println("SMO object created");
smo.buildClassifier(structure);
System.out.println("Classifier build");
Instance current;
while ((current = loader.getNextInstance(structure)) != null){
smo.buildClassifier((Instances) current);
}
System.out.println(smo);
System.out.println("\nModel build successfully");
}
catch(Exception e){
System.out.println("\nstack trace : " + e);
}
}
输出:
属性:1154 实例:0 在创建smo对象之前 SMO对象已创建
堆栈跟踪:weka.core.WekaException:weka.classifiers.functions.SMO:没有足够的带有类标签的训练实例(必需:1,提供:0)!
答案 0 :(得分:1)
尝试使用getDataSet()
代替getStructure()
答案 1 :(得分:1)
这完全有效。
private static void build_model() {
// TODO Auto-generated method stub
try{
// load data
ArffLoader loader = new ArffLoader();
loader.setFile(new File("D:\\MAIN PROJECT\\data.arff"));
Instances structure = loader.getDataSet();
structure.setClassIndex(structure.numAttributes() - 1);
System.out.println("Attributes : "+structure.numAttributes());
System.out.println("Instances : "+structure.numInstances());
// train SMO
System.out.println("Before creating smo object");
SMO smo = new SMO();
System.out.println("SMO object created");
smo.buildClassifier(structure);
System.out.println("Classifier build");
System.out.println(smo);
System.out.println("\nModel build successfully");
}
catch(Exception e){
System.out.println("\nstack trace : " + e);
}
}