2014-12-03 119 views
0

我嘗試將具有arff文件的實例歸類爲訓練數據。 的問題是,當我嘗試創建新實例我得到異常:Weka分類實例

java.lang.ArrayIndexOutOfBoundsException:-1

以下是創建新實例的簡單代碼:

Instance instance = new Instance(2); 
instance.setValue(new Attribute("attr1"), 1); 
instance.setValue(new Attribute("attr2"), 1); 

當我調用setValue方法時發生異常。

請幫忙嗎?

Marcin的迴應後更新

我使用weka 3.6.11。 如果我使用訓練數據中的屬性,當我嘗試對新實例進行分類時,會得到另一個異常。例如,如果我用

Instance newInstance = new Instance(instances.numAttributes()); 
for (int i = 0; i < instances.numAttributes(); i++) { 

    Attribute attr = instances.attribute(i); 
    newInstance.setValue(attr, 0); 
} 

classifier.classifyInstance(newInstance)); 

我得到異常 java.lang.IllegalArgumentException異常:實例沒有數據集分配! 在最後一行

回答

1

你使用哪個版本的weka?我認爲你不能實例化Instance,因爲它是一個接口。此外,當您使用new Attribute("attr1")創建新屬性時,它將獲得-1作爲屬性索引。如果您的訓練Instances來自arff文件,請在創建新的Instance時使用它們的屬性。

Create a new weka Instance

http://weka.wikispaces.com/Programmatic+Use

+0

謝謝您的回答!我編輯了新的例外異常,我得到 – loubas 2014-12-03 13:34:51

+0

在你的新實例上調用'setDataset'方法,'instances'作爲參數 – 2014-12-03 13:47:52

+0

@loubas請不要這麼做。一個問題,一個答案。向您的新問題發佈新問題。 – Sentry 2014-12-03 13:54:31