2013-10-12 118 views
2

我是Weka中的新成員,我正在試圖創建一個新的實例,並使用之前的培訓過的MultilayerPerceptron進行標記,但我不太瞭解如何創建實例,因此我得到了第一個實例例如,從我的訓練數據則y修改它通過改變atributes值:創建一個新的weka實例

//Opening the model 
public boolean abrirModelo(String ruta) { 
    try { 

     clasificador = (MultilayerPerceptron) weka.core.SerializationHelper.read(ruta); 

     return true; 
    } catch (IOException e) { 
     System.out.println("Fallo la lectura del archivo"); 
     return false; 
    } catch (ClassNotFoundException a) { 
     System.out.println("Fallo el casting"); 
     return false; 
    }catch(Exception e){ 
     System.out.println("Error con el castingo"); 
     return false; 
    } 
} 

//getting the first instance to be modified 
public boolean inicializarInstancias(String directorio){ 
    archivo = new ArffLoader(); 
    try { 
     archivo.setFile(new File(directorio)); 
     structure = archivo.getStructure(); 
     structure.setClassIndex(structure.numAttributes() - 1); 
     actual = archivo.getNextInstance(structure); //instance to be used 
    } catch (IOException ex) { 
     System.out.println("Algo salio mal al cargar la estructura de lsa instancias"); 
    } 
    return true; 
} 

//creating an instance from my local data using the previous instantiated actual instance, it is a List of Points with x and y 
public Instance convertir(LineaDeArchivo line) { 
    int size = line.getDatos().size(); 
    for (int i = 0; i < size; i+=2) { 
     actual.setValue(i, line.getDatos().get(i).x); 
     actual.setValue(i + 1, line.getDatos().get(i).y); 
    } 
    return actual; 
} 
//getting the class 
public String getClase(Instance e){ 
    try{ 
     double clase; 
     clase = clasificador.classifyInstance(e); 
     return structure.classAttribute().value((int) clase); 
    }catch(Exception a){ 
     System.out.println("Algo salio mal con la clasificacion"); 
     return "?"; 
    } 

} 

可以是沒有做正確的方式,clasifiers獲得同等級值,我給所有的情況下,我認爲問題是我創建實例的方式。

我希望有人可以給我一個建議,在此先感謝

回答

-1

link顯示你的Weka如何提出建立一個新的實例

如果你想堅持你的代碼,看它是否工作,你可以嘗試手動創建一些實例。然後可以對實例進行分類,以查看是否獲得與使用方法創建的實例相同的結果。

手動創建某些情況下,你會:

  1. 創建現有「.arff」訓練數據
  2. 打開一個文本編輯器
  3. 編輯拷貝的物理拷貝和保存X和Y值

如果這些實例的分類不同,那麼您使用您的代碼修改的那些實例,您可以確定這些實例未被正確創建。

0

如果你已經擁有了ARFF結構,要增加額外的實例,那麼你可以這樣做:

//assuming we already have arff loaded in a variable called dataset 
Instance newInstance = new Instance(); 
for(int i = 0 ; i < dataset.numAttributes() ; i++) 
{ 

    newInstance.setValue(i , value); 
    //i is the index of attribute 
    //value is the value that you want to set 
} 
//add the new instance to the main dataset at the last position 
dataset.add(newInstance); 
//repeat as necessary 
+5

我不知道它是如何的一年已經走了,但現在的實例()構造函數被保護,這意味着你不能使用它。有關更多參考資料,請查看API:http://weka.sourceforge.net/doc.stable/(您仍然必須親自導航到實例文檔) – Mackiavelli

+0

應該可以使用'new SparseInstance()'或'new DenseInstance()'代替。 – glaed