2012-08-25 33 views
6

¿Cómo puedo agregar una nueva instancia a un objeto de instancias existente que creé?Agregar una nueva instancia en weka

Aquí se muestra un ejemplo:

ArrayList<Attribute> atts = new ArrayList<Attribute>(2); 
ArrayList<String> classVal = new ArrayList<String>(); 
classVal.add("A"); 
classVal.add("B"); 
atts.add(new Attribute("content",(ArrayList<String>)null)); 
atts.add(new Attribute("@@[email protected]@",classVal)); 

Instances dataRaw = new Instances("TestInstances",atts,0); 

Quiero añadir una nueva instancia de dataRaw. Por lo que sé, tengo que usar dataRaw.add (Instancia i) ... ¿Cómo puedo crear un objeto instancia si la clase Instancia es una interfaz?

Gracias de antemano

+0

pasar una implementación de 'Instance', que se puede ver [aquí] (http://weka.sourceforge.net/doc.dev/weka/core/Instance.html) en __ Todas las clases de implementación conocidas__. – oldrinb

+0

PS no podrá agregar nada, ya que pasó '0' al argumento' capacidad' en el constructor. – oldrinb

+0

Seguí esta guía aquí (http://weka.wikispaces.com/Creating+an+ARFF+file) y por lo que yo entendí, esta es la capacidad inicial. ¿podría darme un ejemplo de cómo agregar una nueva instancia al objeto que creé? Gracias ... – TeFa

Respuesta

15

Comencemos por algunos aspectos destacados.

  • weka almacena cada valor de instancia como doble []. Por lo tanto, crea double [] instanceValue1 y agrega valores a esta matriz.
  • Las cadenas pares se almacenan en este doble []. Se agregan los valores de cadena con el siguiente código:

instanceValue1 [0] = dataRaw.attribute (0) .addStringValue ("! Esto es una cadena");

  • Instancia es la interfaz, y se desarrolla en dos clases, {SparseInstance, DenseInstance}. Añadimos nuestra matriz de valores al conjunto de datos utilizando el código siguiente:

dataRaw.add (nueva DenseInstance (1.0, instanceValue1));

Aquí está el ejemplo de funcionamiento completo:

import java.util.ArrayList; 

import weka.core.Attribute; 
import weka.core.DenseInstance; 
import weka.core.Instance; 
import weka.core.Instances; 

public class Program { 
    public static void main(String[] args) { 
     ArrayList<Attribute> atts = new ArrayList<Attribute>(2); 
     ArrayList<String> classVal = new ArrayList<String>(); 
     classVal.add("A"); 
     classVal.add("B"); 
     atts.add(new Attribute("content",(ArrayList<String>)null)); 
     atts.add(new Attribute("@@[email protected]@",classVal)); 

     Instances dataRaw = new Instances("TestInstances",atts,0); 
     System.out.println("Before adding any instance"); 
     System.out.println("--------------------------"); 
     System.out.println(dataRaw); 
     System.out.println("--------------------------"); 

     double[] instanceValue1 = new double[dataRaw.numAttributes()]; 

     instanceValue1[0] = dataRaw.attribute(0).addStringValue("This is a string!"); 
     instanceValue1[1] = 0; 

     dataRaw.add(new DenseInstance(1.0, instanceValue1)); 

     System.out.println("After adding a instance"); 
     System.out.println("--------------------------"); 
     System.out.println(dataRaw); 
     System.out.println("--------------------------"); 

     double[] instanceValue2 = new double[dataRaw.numAttributes()]; 

     instanceValue2[0] = dataRaw.attribute(0).addStringValue("This is second string!"); 
     instanceValue2[1] = 1; 

     dataRaw.add(new DenseInstance(1.0, instanceValue2)); 

     System.out.println("After adding second instance"); 
     System.out.println("--------------------------"); 
     System.out.println(dataRaw); 
     System.out.println("--------------------------"); 


    } 

} 

Su salida es el siguiente:

Before adding any instance 
-------------------------- 
@relation TestInstances 

@attribute content string 
@attribute @@[email protected]@ {A,B} 

@data 

-------------------------- 
After adding a instance 
-------------------------- 
@relation TestInstances 

@attribute content string 
@attribute @@[email protected]@ {A,B} 

@data 
'This is a string!',A 
-------------------------- 
After adding second instance 
-------------------------- 
@relation TestInstances 

@attribute content string 
@attribute @@[email protected]@ {A,B} 

@data 
'This is a string!',A 
'This is second string!',B 
-------------------------- 
+0

¿Puedo saber qué API usaste? – aceminer

+0

Weka y colecciones java normales api. –

+0

Hola @AtillaOzgur Obtuve -1 para "dataRaw.attribute (0) .addStringValue (" This is second string! ");" parte en mi código cuando intento asignar el doble [] var ¿Puede darme una pista por favor ...... –

Cuestiones relacionadas