2

次の形式のデータでフィルター処理された分類子を使用しようとしています。

real,real,real,...,nominal

ここで、138個の実際の値と、クラスを表す1つの名目上の文字列があります。次のように、基本分類器と教師あり離散化フィルターとしてJ48を使用しています。

Filter discretize = new weka.filters.supervised.attribute.Discretize();
FilteredClassifier fc = new FilteredClassifier(); 
discretize.setInputFormat(m_data);

J48 ft = new J48();
ft.setOptions(wekaOptions);
fc.setFilter(discretize);
fc.setClassifier(ft);

fc.buildClassifier(m_data);

m_dataセット付きの(ラベル付きの)トレーニングデータはどこにありますかm_data.setClassIndex(m_data.numAttributes()-1)。ここでは問題はありません(私が見ることができます)。このモデルをシリアル化し、後でロードします。次に、それを使用して、次のように未表示/新しいデータを分類します。

Instance unlabeledInstance = new DenseInstance(1.0,features);
unlabeledInstance.setDataset(m_instances); 
m_classifier.classifyInstance(unlabeledInstance);

ここで、featuresはdouble[]入力データの形式に従いますが、名目上のクラス値はありません。これは、 setm_instancesを使用してトレーニングデータファイルからロードされたもの m_instances.setClassIndex(m_instances.numAttributes()-1)です。

ただし、実行m_classifier.classifyInstance(unlabeledInstance)するとarrayOutOfBoundsExceptionエラーが発生します。誰かがこれに光を当てることができますか?

トレースは次のとおりです。

07-13 15:15:35.383: W/System.err(30659): java.lang.ArrayIndexOutOfBoundsException: length=138; index=138
07-13 15:15:35.383: W/System.err(30659):    at weka.core.DenseInstance.value(DenseInstance.java:309)
07-13 15:15:35.383: W/System.err(30659):    at weka.filters.unsupervised.attribute.Discretize.convertInstance(Discretize.java:1047)
07-13 15:15:35.383: W/System.err(30659):    at weka.filters.unsupervised.attribute.Discretize.input(Discretize.java:389)
07-13 15:15:35.383: W/System.err(30659):    at weka.classifiers.meta.FilteredClassifier.distributionForInstance(FilteredClassifier.java:425)
07-13 15:15:35.383: W/System.err(30659):    at weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:72)

クラス値が設定されることを期待しているようです。

4

2 に答える 2

0

クラス値を削除する必要があると思いますunlabeledInstance(また、m_instances.setClassIndex(m_instances.numAttributes()-1)必要ありません)。Weka がテスト インスタンスを分類するとき、クラスではなく機能のみが必要なので、インスタンスにクラスを残すと、Weka は配列内の余分なエントリを予期せず、ArrayIndexOutOfBoundsException.

于 2012-07-17T09:38:57.240 に答える