1

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 には、132 個のデータ インスタンスとともに 7 (属性) + 1 (クラス ラベル) があります。test.arff には、7 つの属性 + 1 つのクラス label=? があります。1 つのインスタンスで。

test.arff 内の単一インスタンスのクラス ラベルを予測したいと考えています。ラベルを予測するにはどうすればよいですか?また、データセットとコードにどのような変更を加える必要がありますか?

"javac -cp "/classpath" WekaNew.java" で Java ファイルをコンパイルしようとしましたが、「evaluateModelOnce() に適したメソッドが見つかりません」というエラーが発生します。

Weka API と Java 全般の新機能。質問が繰り返される場合は、事前にお詫び申し上げます。

また、Stackoverflow で次の質問を参照しました。 1. クラスラベルのない weka で単一インスタンスをテストします

4

1 に答える 1

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-を参照)

ただし、異なるクラスである「インスタンス」ではなく「インスタンス」を渡します。したがって、これは構文エラーです。

単一の Weka インスタンスを評価するには、試してみることをお勧めします。

    eval.evaluateModelOnce(cls,instances.firstInstance());
于 2016-12-11T17:33:35.423 に答える