我不明白为什么Weka评估类构造函数需要训练实例才能工作。
有人能解释我吗?
理论上,评估只依赖于经过训练的模型(下一段代码中的)和测试数据(TestingSet)。
谢谢!
这就是一个例子:
// TrainingSet is the training Instances
// TestingSet is the testingInstances
// Build de classifier
Classifier cls = (Classifier) new NaiveBayes();
cls.buildClassifier(TrainingSet);
// Test the model
Evaluation eTest = new Evaluation(**TrainingSet**);
eTest.evaluateModel(cls, TestingSet);发布于 2015-09-16 10:17:52
来自关于Weka的UMass波士顿计算机科学文档:
评估公共评估(实例数据)抛出java.lang.Exception 初始化计算的所有计数器。 参数: 训练实例的数据集,以获取一些头信息和先前的类分布信息。 抛出: java.lang.Exception -如果未定义类
您可以查看构造函数源这里。
发布于 2015-09-17 09:55:46
对于我自己的问题,我有一个肯定的解决办法。我正在寻找使用一个分类器模型来评估测试文件的方法,这个分类器模型之前是经过训练并保存在一个文件中的。评估类不适合我,因为它需要构造函数中的列车数据。但它可以用于分类器的classifyInstance方法。
下面的代码就是一个例子:
public static void LoadAndTest(String filename_test, String filename_model) throws Exception {
BufferedReader datafile_test = readDataFile(filename_test);
Instances data_test = new Instances(datafile_test);
data_test.setClassIndex(data_test.numAttributes() - 1);
Classifier cls = (Classifier) weka.core.SerializationHelper.read(filename_model);
int act = 0;
for (int i = 0; i < data_test.numInstances(); i++) {
double pred = cls.classifyInstance(data_test.instance(i));
double real = data_test.instance(i).classValue();
if (pred==real) {
act = act + 1;
}
}
double pct = (double) act / (double) data_test.numInstances();
System.out.println("Accuracy = " + pct);
}https://stackoverflow.com/questions/32605249
复制相似问题