0

インスタンスの数を出力しようとすると、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インスタンス:0smoオブジェクトを作成する前にSMOオブジェクトを作成しました

スタックトレース:weka.core.WekaException:weka.classifiers.functions.SMO:クラスラベル付きのトレーニングインスタンスが不足しています(必須:1、提供:0)!

4

2 に答える 2

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);
        }

    }
于 2013-03-17T17:11:37.697 に答える
1

getDataSet()の代わりに使用してみてくださいgetStructure()

于 2013-03-17T14:04:23.097 に答える