无法在 Java Weka 类中实例化 Instance 类型

Cannot instantiate the type Instance in Java Weka class

提问人:Hack-R 提问时间:8/21/2016 更新时间:8/21/2016 访问量:2250

问:

当我尝试在Eclipse中运行此示例Weka Java代码时,出现错误

无法实例化 Instance 类型

即使没有错误:import weka.core.Instance

package wekatest;

import weka.classifiers.Classifier;
import weka.classifiers.Evaluation;
import weka.classifiers.bayes.NaiveBayes;
import weka.core.Attribute;
import weka.core.FastVector;
import weka.core.Instance;
import weka.core.Instances;

public class Driver {

    public static void main(String[] args) throws Exception{

         // Declare two numeric attributes
         Attribute Attribute1 = new Attribute("firstNumeric");
         Attribute Attribute2 = new Attribute("secondNumeric");

         // Declare a nominal attribute along with its values
         FastVector fvNominalVal = new FastVector(3);
         fvNominalVal.addElement("blue");
         fvNominalVal.addElement("gray");
         fvNominalVal.addElement("black");
         Attribute Attribute3 = new Attribute("aNominal", fvNominalVal);

         // Declare the class attribute along with its values
         FastVector fvClassVal = new FastVector(2);
         fvClassVal.addElement("positive");
         fvClassVal.addElement("negative");
         Attribute ClassAttribute = new Attribute("theClass", fvClassVal);

         // Declare the feature vector
         FastVector fvWekaAttributes = new FastVector(4);
         fvWekaAttributes.addElement(Attribute1);    
         fvWekaAttributes.addElement(Attribute2);    
         fvWekaAttributes.addElement(Attribute3);    
         fvWekaAttributes.addElement(ClassAttribute);

         // Create an empty training set
         Instances isTrainingSet = new Instances("Rel", fvWekaAttributes, 10);       

         // Set class index
         isTrainingSet.setClassIndex(3);

         // Create the instance
         Instance iExample = new Instance(4);
         iExample.setValue((Attribute)fvWekaAttributes.elementAt(0), 1.0);      
         iExample.setValue((Attribute)fvWekaAttributes.elementAt(1), 0.5);      
         iExample.setValue((Attribute)fvWekaAttributes.elementAt(2), "gray");
         iExample.setValue((Attribute)fvWekaAttributes.elementAt(3), "positive");

         // add the instance
         isTrainingSet.add(iExample);
         Classifier cModel = (Classifier)new NaiveBayes();   
         cModel.buildClassifier(isTrainingSet);

         // Test the model
         Evaluation eTest = new Evaluation(isTrainingSet);
         eTest.evaluateModel(cModel, isTrainingSet);

         // Print the result à la Weka explorer:
         String strSummary = eTest.toSummaryString();
         System.out.println(strSummary);

         // Get the confusion matrix
         double[][] cmMatrix = eTest.confusionMatrix();
         for(int row_i=0; row_i<cmMatrix.length; row_i++){
             for(int col_i=0; col_i<cmMatrix.length; col_i++){
                 System.out.print(cmMatrix[row_i][col_i]);
                 System.out.print("|");
             }
             System.out.println();
         }
    }
}
爪哇 维卡

评论

0赞 PM 77-1 8/21/2016
不是 ?Instanceinterface
0赞 garnulf 8/21/2016
实例是一个接口。
0赞 Hack-R 8/21/2016
@PM77-1 我明白了,谢谢。
1赞 Hack-R 8/28/2016
值得一提的是,我发现我所利用的示例是在最近对 Weka Java API 进行重大改革之前编写的,并且类型发生了变化。Instance

答:

3赞 MarsAtomic 8/21/2016 #1

看看下面的文档。你的错误是完全可以理解的,而且很容易纠正。

您尝试导入类 Instances:

http://weka.sourceforge.net/doc.dev/weka/core/Instances.html

您真正想要的是接口实例(注意名称中的单数形式):

http://weka.sourceforge.net/doc.dev/weka/core/Instance.html

评论

1赞 Hack-R 8/21/2016
非常感谢。我从一个独立的教程网站得到了这个例子,该网站声称它直接来自 Weka 的网站,但我想有些东西被误抄了。非常感谢。