Foros del Web » Programación para mayores de 30 ;) » Java »

Crear una nueva Instancia e introducir datos

Estas en el tema de Crear una nueva Instancia e introducir datos en el foro de Java en Foros del Web. Hola a tod@s, Llevo unos días intentando hacer un clasificador con la librería Java de Weka, y tengo un pequeño problema que me está sacando ...
  #1 (permalink)  
Antiguo 16/07/2015, 12:44
Avatar de nolose  
Fecha de Ingreso: diciembre-2007
Ubicación: España
Mensajes: 165
Antigüedad: 16 años, 4 meses
Puntos: 2
Crear una nueva Instancia e introducir datos

Hola a tod@s,

Llevo unos días intentando hacer un clasificador con la librería Java de Weka, y tengo un pequeño problema que me está sacando de quicio. A ver si vosotros sabéis como proceder.

Primero, leo la base de datos (un archivo .arff con 9 atributos numéricos y 1 atributo para la clase que puede ser 2 o 4). Ver: http://web.cs.iastate.edu/~cs573x/la...wisconsin.arff

Estos datos se insertan en la instancia iDataSet y luego los divido en una instancia iTrain (75%) y otra instancia iTest (25%).

Aquí pongo el código fuente que funciona perfectamente:

Código Java:
Ver original
  1. import weka.core.Instances;
  2. import weka.core.converters.ConverterUtils.DataSource;
  3. import weka.filters.Filter;
  4. import weka.filters.unsupervised.instance.RemovePercentage;
  5.  
  6. public class gettingStarted {
  7.    
  8.     public static void main(String[] args) throws Exception {
  9.        
  10.         // Cargamos en memoria el archivo ARFF
  11.         DataSource oDataSet = new DataSource( "breast-cancer-wisconsin.arff" );        
  12.        
  13.         /* Convertimos la data a un objeto Instances */
  14.         Instances iDataSet = oDataSet.getDataSet();
  15.          
  16.         /* Configuramos la clase de la data */
  17.         iDataSet.setClassIndex( iDataSet.numAttributes() - 1 );
  18.        
  19.         /* Filtro */
  20.             /* Data de train */
  21.         RemovePercentage rp = new RemovePercentage();
  22.         rp.setPercentage(25.0);
  23.         rp.setInputFormat(iDataSet);
  24.         Instances iTrain = Filter.useFilter(iDataSet, rp);
  25.        
  26.         System.out.println("iTrain: " + iTrain);
  27.        
  28.             /* Data de test */
  29.         rp.setInputFormat(iDataSet);
  30.         rp.setInvertSelection(true);
  31.         Instances iTest = Filter.useFilter(iDataSet, rp);
  32.        
  33.         System.out.println("iTest: " + iTest);
  34.     }
  35.    
  36. }

El problema, es que quiero crearme una nueva instancia igual que iTest, que contenga únicamente estos datos: 4,8,8,5,4,5,10,4,1,4

He conseguido hacerlo leyendo un nuevo .arff. Podéis ver como queda en mi repositorio de GitHub: https://github.com/pebosch/gettingSt...ngStarted.java

Pero no se como hacerlo sin leer un nuevo .arff. Necesito meter los datos utilizando variables, nada de otros ficheros.

¿¿Sabéis como podría hacerlo??

¡¡Gracias de antemano!!
  #2 (permalink)  
Antiguo 16/07/2015, 12:57
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Crear una nueva Instancia e introducir datos

Buenas,

Es la primera vez que oigo hablar de esta librería en mi vida.

He hecho un par de clics en la web y juraria que en este ejemplo lo hace. Simplemente crea unos atributos y los pasa en el constructor de Instances.
https://svn.cms.waikato.ac.nz/svn/we...lassifier.java

Entiendo que en tu caso habŕia que hacer algo como:

Código Java:
Ver original
  1. FastVector numbers = new FastVector(1);
  2. numbers.addElement("4");
  3. numbers.addElement("8");
  4. numbers.addElement("8");
  5. numbers.addElement("5");
  6. [...]
  7.  
  8. // Create dataset with initial capacity of 100
  9. iTest2 = new Instances("TestNumbers", numbers, 100);


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 16/07/2015, 15:05
Avatar de nolose  
Fecha de Ingreso: diciembre-2007
Ubicación: España
Mensajes: 165
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Crear una nueva Instancia e introducir datos

Cita:
Iniciado por Profesor_Falken Ver Mensaje
Buenas,

Es la primera vez que oigo hablar de esta librería en mi vida.

He hecho un par de clics en la web y juraria que en este ejemplo lo hace. Simplemente crea unos atributos y los pasa en el constructor de Instances.
https://svn.cms.waikato.ac.nz/svn/we...lassifier.java

Entiendo que en tu caso habŕia que hacer algo como:

Código Java:
Ver original
  1. FastVector numbers = new FastVector(1);
  2. numbers.addElement("4");
  3. numbers.addElement("8");
  4. numbers.addElement("8");
  5. numbers.addElement("5");
  6. [...]
  7.  
  8. // Create dataset with initial capacity of 100
  9. iTest2 = new Instances("TestNumbers", numbers, 100);


Un saludo
Es una librería específica para Machine Learning. No es muy habitual a no ser que estés familiarizado con las técnicas de aprendizaje automático jeje.

No vas mal encaminado con tu respuesta, pero esa información ya la conocía y aún así, no consigo hacerlo andar. Necesito algo más específico para mi caso...

De todas formas, gracias por tu interés-
  #4 (permalink)  
Antiguo 16/07/2015, 16:15
Avatar de nolose  
Fecha de Ingreso: diciembre-2007
Ubicación: España
Mensajes: 165
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Crear una nueva Instancia e introducir datos

He conseguido solucionarlo siguiendo este manual:

http://geekswithblogs.net/razan/arch...arff-file.aspx


Gracias por las respuestas :)

Etiquetas: clase, instancia, introducir
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:47.