3

私は Weka の初心者です。以前に訓練された でラベル付けされる新しいインスタンスを作成しようとしていMultilayerPerceptronます。インスタンスの作成方法についてあまり知らなかったので、トレーニング データから最初のインスタンスを取得し、それを変更しました。属性値を変更することにより:

//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 "?";
    }

}

それは正しい方法ではないかもしれません。分類子は、私が与えるすべてのインスタンスに対して同じクラス値を取得します。問題は、インスタンスの作成方法にあると思います。

誰かが私にアドバイスをくれるといいのですが、よろしくお願いします

4

2 に答える 2

1

すでに 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
于 2014-03-03T05:30:21.627 に答える
-1

このリンクは、Weka が新しいインスタンスの構築を提案する方法を示しています

コードに固執し、それが機能しているかどうかを確認したい場合は、いくつかのインスタンスを手動で作成してみてください。次に、インスタンスを分類して、メソッドを使用して作成されたインスタンスと同じ結果が得られるかどうかを確認できます。

いくつかのインスタンスを手動で作成するには、次のようにします。

  1. 既存の「.arff」トレーニング データの物理コピーを作成する
  2. コピーをテキスト エディタで開く
  3. 必要に応じて X と Y の値を編集して保存します

これらのインスタンスが、コードで変更したインスタンスとは異なる方法で分類されている場合、インスタンスが正しく作成されていないことを確認できます。

于 2013-10-13T11:58:37.053 に答える