-1

問題を投稿することを決定する前に、私は多くの投稿を読みましたが、まだ明確な答えを得ることができませんでした. だからここにあります:

weka を使用して、次のようなトレーニング データで NaiveBayesTree をトレーニングしました。

(the values are simplified, and there's 20000 rows in the training set)
AF3,F7,F3,FC5,T7,T8,FC6,F4,F8,AF4,Action
-1,2,0,1,0,0,-1,-0,-0,-0,NEUTRAL
-2,1,0,2,-0,0,-0,0,-1,-0,RIGHT
-1,1,0,2,-0,0,-1,0,-1,-0,LEFT

ここで、保存したモデルをプログラムで使用して、指定された 128 行のテスト データのクラス分布を判断したいと考えています。この 128 行には、クラス (アクション属性) が割り当てられていません。基本的に、私はモデルにそれに答えてもらいたい:)

したがって、テスト行は次のようになります。

-1,1,0,2,-0,0,-1,0,-1,-0,?

これまでのところ、私はこのコードを思いつきました:

Classifier nbTree = (Classifier)SerializationHelper.read(Model) as NBTree;
Instances testInstances = TestSet();
testInstances.setClassIndex(10);

for (int i = 0; i < testInstances.numInstances(); i++)
{
    Instance instance = testInstances.instance(i);
    double assignedClass = nbTree.classifyInstance(instance);
    double[] distributionForInstance = nbTree.distributionForInstance(instance);
}

ただし、各 assignedClass に対して常に 0 が生成され、 distributionForInstance には異なる値を持つ要素が常に 1 つだけ含まれます。

0,9412543332996
0,9412543332996
0,9412543332996
0,9412543332996
0,0577106296809467
0,315216251505317
0,9412543332996
0,9412543332996
0,315216251505317
0,315216251505317
0,863366140658458
0,9412543332996
0,9412543332996
0,9412543332996
0,9412543332996
0,783615619462732

私は今2日間ぐるぐる回っていますが、本当に助けていただければ幸いです:)

4

1 に答える 1

1

私はさらに調査を行い、この記事に出くわしました: http://weka.wikispaces.com/Making+predictionsは、次のコードを書くのに役立ちました:

Classifier nbTree = (Classifier)SerializationHelper.read(Model) as NBTree;
Instances testDataSet = new Instances(new BufferedReader(new FileReader(arff)));
testDataSet.setClassIndex(10);
Evaluation evaluation = new Evaluation(testDataSet);

for (int i = 0; i < testDataSet.numInstances(); i++)
{
    Instance instance = testDataSet.instance(i);
    evaluation.evaluateModelOnceAndRecordPrediction(nbTree, instance);
}

foreach (object o in evaluation.predictions().toArray())
{
    NominalPrediction prediction = o as NominalPrediction;
    if (prediction != null)
    {
        double[] distribution = prediction.distribution();
        double predicted = prediction.predicted();
    }
}

このコードにより、特定のインスタンスで予測されているクラスと、検討中のすべてのクラスの確率値を確認できます。これが誰かを助けることを願っています:)

于 2012-05-20T07:46:43.090 に答える