如何使用我构建的模型在 Weka 中测试单个实例?

Posted

技术标签:

【中文标题】如何使用我构建的模型在 Weka 中测试单个实例?【英文标题】:How do I test a single Instance in Weka using a model that I have built? 【发布时间】:2017-04-26 14:16:47 【问题描述】:

我正在尝试使用 Java 中的 weka API 测试单个实例。我的目标是预测 test.arff 文件中单个实例的类值。

我的java代码是这样的,

import weka.core.Instances;
import weka.classifiers.Evaluation;
import weka.classifiers.trees.J48;
import weka.classifiers.*;

import java.io.*;
import java.util.Random;

public class WekaNew 

    public static void main(String[] args) throws Exception
        // TODO Auto-generated method stub
        System.out.println("Weka Tool");

        BufferedReader breader = new BufferedReader(new FileReader("train.arff"));
        Instances train = new Instances(breader);
        train.setClassIndex(train.numAttributes() -1);
        breader.close();    //loading training data

        BufferedReader treader = new BufferedReader(new FileReader("test.arff"));
        Instances test = new Instances(treader);
        test.setClassIndex(test.numAttributes() -1);
        treader.close();        //loading testing data

        Classifier cls = new J48();
        cls.buildClassifier(train);

        Evaluation eval = new Evaluation(train);
        eval.evaluateModelOnce(cls,test);

        System.out.println(eval.toMatrixString("\nConfusion Matrix\n========\n"));

    


train.arff 有 7(属性)+1(类标签)以及 132 个数据实例。 test.arff 有 7 个属性 + 1 个类标签=?一个实例。

我想预测test.arff中单个实例的类标签。 如何预测标签以及需要对数据集和代码进行哪些更改?

我尝试通过“javac -cp”/classpath“WekaNew.java”编译java文件 ,它给出了以下错误“没有找到适合评估模型Once()的方法”

一般来说是 Weka API 和 Java 的新手。如果问题似乎重复,请提前道歉。

我还在 *** 中提到了以下问题, 1.Test single instance in weka which has no class label 2.Test a single instance in Weka 但它似乎并没有解决我的问题。

【问题讨论】:

【参考方案1】:

这是 evaluateModelOnce 的签名:

public double evaluateModelOnce(Classifier classifier,
                                Instance instance)

(见http://weka.sourceforge.net/doc.stable/weka/classifiers/Evaluation.html#evaluateModelOnce-weka.classifiers.Classifier-weka.core.Instance-)

但是,您传入的是“Instances”而不是“Instance”,它们是不同的类。因此,这是一个语法错误。

要评估单个 Weka 实例,您可能需要尝试

    eval.evaluateModelOnce(cls,instances.firstInstance());

【讨论】:

非常感谢!奇迹般有效!有什么方法可以识别测试实例的类标签吗? 你能详细说明你想做什么吗?你已经知道类标签是test.numAttributes() -1,对吧?

以上是关于如何使用我构建的模型在 Weka 中测试单个实例?的主要内容,如果未能解决你的问题,请参考以下文章

Java:如何使用 Weka 生成的模型组装/创建单个实例进行分类?

在 Weka 中对单个实例进行分类(MultilayerPerceptron)

如何使用 weka 中保存的模型将类分配给实例

weka中如何对整个数据集进行分类

Weka 预测同一类

使用 NaiveBayes 分类器对 Weka 中的一个实例进行分类