2

私はWekaが初めてです。

API を使用して WEKA を実行しようとしていますが、WEKA GUI の結果が Java コードによって生成された結果と一致しないことがわかりました。

TrainingSet と Test Set を提供して、RandomForest アルゴリズムを実行しようとしています。

コード スニペットは次のとおりです。

            DataSource ds = new DataSource(trainingFile);

            Instances insts = ds.getDataSet();

            insts.setClassIndex(insts.numAttributes() - 1);

            Classifier cl = new RandomForest();
            RandomForest rf = (RandomForest)cl;
       //     rf.setOptions(options);
         //   rf.setNumExecutionSlots(1);
            rf.setNumFeatures(5);
            rf.setSeed(1);
            rf.setNumExecutionSlots(1);                  

            Remove remove = new Remove();
            int[] attrs = WekaCustomisation.convertIntegers(attrList);

            remove.setAttributeIndicesArray(attrs);
            remove.setInvertSelection(true);                

            remove.setInputFormat(insts);
            insts = weka.filters.Filter.useFilter(insts, remove);

            insts.setClassIndex(insts.numAttributes() - 1);            


            weka.core.Instances train = new weka.core.Instances(insts, 0, insts.numInstances());          


            cl.buildClassifier(train);

         weka.core.converters.ConverterUtils.DataSource ds2 = new weka.core.converters.ConverterUtils.DataSource(testFile);

            weka.core.Instances instsTest = ds2.getDataSet();
            remove.setInputFormat(instsTest);
            instsTest = weka.filters.Filter.useFilter(instsTest, remove);
            instsTest.setClassIndex(instsTest.numAttributes() - 1);                

            Instances testInstances = new Instances(instsTest);
            int numCorrect = 0;

            weka.classifiers.Evaluation eval = new weka.classifiers.Evaluation(train);
            eval.evaluateModel(cl, testInstances);
            System.out.println(eval.toSummaryString());
            out.write(eval.toSummaryString());
            double roc = eval.areaUnderROC(0);

WEKA GUI とこのコードによって生成される混同行列は異なります。ここで何が欠けていますか。

4

1 に答える 1

2

最初に、Weka GUI で実行されたパラメータとフィルタリングがコードで行っているものと同じかどうかを確認します。(GUI で生成されたログを見てください)

2 つ目の可能性は、ランダム フォレスト モデルがその作成構造に持つランダム コンポーネントです (決定木ごとにデータセット内のランダムな特徴を選択します。こちらを参照してください)。そのため、トレーニング フェーズでは、同じトレーニング データセットに対して異なるモデルが生成され、テストで評価すると異なる結果が得られます。

于 2012-09-12T15:05:07.997 に答える