我試圖使用過濾分類下列格式的數據:Weka的filteredClassifier arrayOutOfBoundsException
real,real,real,...,nominal
在那裏我有138個真正的價值和表示該類單一的公稱字符串。 我使用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);
其中設有一個跟隨的輸入數據的格式的double[]
,但沒有標稱類值。這裏m_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)
它看起來像它期待類值進行設置。
我傳入新DenseInstance的功能不包含任何類值。這是一個138雙打的名單。 – user1531177 2012-07-17 10:22:03
對吧。那麼你應該刪除'm_instances.setClassIndex(m_instances.numAttributes() - 1)',因爲它將最後一個特性設置爲類,而它應該只是一個特性/雙精度。 – Sicco 2012-07-17 13:52:31
這是否回答你的問題? – Sicco 2012-08-15 15:51:49