Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/07/2015, 12:44
Avatar de nolose
nolose
 
Fecha de Ingreso: diciembre-2007
Ubicación: España
Mensajes: 165
Antigüedad: 17 años, 1 mes
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!!