7

WEKA APIを使用してデータからベイジアンネットワークを学習する「適切な」手順を知っている人はいますか? WEKA のドキュメントに適切な手順が見つかりません。

ドキュメントと各関数が「想定」されていることに基づいて、これはうまくいくと思いました:

Instances ins = DataSource.read( filename );
ins.setClassIndex(0);

K2 learner = new K2();

MultiNomialBMAEstimator estimator = new MultiNomialBMAEstimator();
estimator.setUseK2Prior(true);

EditableBayesNet bn = new EditableBayesNet( ins );
bn.initStructure();

learner.buildStructure(bn, ins);
estimator.estimateCPTs(bn);

しかし、そうではありません。私はこれと他のバリエーションを試しましたが、WEKAコード内のどこかで取得し続けているArrayIndexOutOfBoundsExceptionのでNullPointerException、何が欠けていますか?

4

1 に答える 1

5

わたしにはできる。次のデータセットを試してみました。

@relation test

@attribute x {0,1}
@attribute y {0,1,2}
@attribute z {0,1}

@data
0,1,0
1,0,1
1,1,1
1,2,1
0,0,0

ターゲット属性が名目上(たとえば数値)でない場合、例外が予想されることを述べておきます。ベイジアンネットワークは、すべての属性が名目上のものである場合に、より適切に機能します。ターゲット属性を数値に変更すると、NullPointerExceptionまたはが表示されますArrayIndexOutOfBoundsException。特に、この例外は次の行でスローされます。

EditableBayesNet bn = new EditableBayesNet(ins);

まず、ターゲットクラスを離散化する必要があります。

于 2011-05-26T20:44:11.597 に答える