2011-11-13 12 views
9

Estoy tratando de usar weka API en mi código java. Puedo utilizar la clasificación del árbol J48 para clasificar mi conjunto de datos en la base de datos MySQL, pero tengo este error:ERROR Al usar WEKA API en código Java: ¿Atributo de clase no establecido?

Trying to add database driver (JDBC): RmiJdbc.RJDriver - Error, not in CLASSPATH? 
Trying to add database driver (JDBC): jdbc.idbDriver - Error, not in CLASSPATH? 
Trying to add database driver (JDBC): com.mckoi.JDBCDriver - Error, not in CLASSPATH? 
Trying to add database driver (JDBC): org.hsqldb.jdbcDriver - Error, not in CLASSPATH? 
weka.core.UnassignedClassException: weka.classifiers.trees.j48.C45PruneableClassifierTree: Class attribute not set! 
     at weka.core.Capabilities.test(Capabilities.java:1086) 
     at weka.core.Capabilities.test(Capabilities.java:1018) 
     at weka.core.Capabilities.testWithFail(Capabilities.java:1297) 
..... 

Este es mi código:

try{ 
     DatabaseLoader loader = new DatabaseLoader(); 
     loader.setSource("jdbc:mysql://localhost:3306/cuaca","root","491754"); 
     loader.setQuery("select * from data_training"); 
     Instances data = loader.getDataSet(); 

     jTextArea1.append(data.toString()); 

     String[] options = new String[1]; 
     options[0] = "U"; // unpruned tree 
     J48 tree = new J48(); // new instance of tree 
     tree.setOptions(options); // set the option 
     tree.buildClassifier(data); // build classifier 
     //Evaluation eval=new Evaluation(data); 
     //eval.crossValidateModel(tree, data, 10, new Random(1)); 
     //jTextArea1.append(eval.toSummaryString("\n HASILNYA \n", false)); 

}catch(IOException ioe){ioe.printStackTrace();} 
     catch(Exception e){e.printStackTrace();} 

El conjunto de datos aparece realmente en el área de texto:

@relation data_training 

@attribute Tmean numeric 
@attribute Tmax numeric 
@attribute Td numeric 
@attribute RH numeric 
@attribute SLP numeric 
@attribute STP numeric 
@attribute Wind_ave numeric 
@attribute Wind_max numeric 
@attribute Hujan {Y,T} 

@data 
25.9,31.6,23.1,93.4,1008.5,998.2,2.6,12.9,Y 
27.6,31.4,22.3,87,1009.6,999.3,0.8,3.1,T 
27.4,32.6,21.9,86.1,1009.4,999.2,4.5,14.3,T 
27.6,32.2,22.4,87.3,1009.1,998.9,2.4,8.2,T 

Me gustaría saber por qué aparece el error (Atributo de clase no establecido)

+1

también uso Metaclassifier. pero tengo el error similar: índice de clase (no establecido)! –

Respuesta

32

Debe establecer índice de clase de su conjunto de datos antes de pasarlo al clasificador. Su clasificador debe saber cuál es su variable de resultado.
Después de estas líneas ...

loader.setQuery("select * from data_training"); 
Instances data = loader.getDataSet(); 

agregar lo siguiente:

data.setClassIndex(data.numAttributes() - 1); 

Si Hujan es su atributo de clase (variable de resultado)

Ver Api Docs for more Info

+0

@Angga Raditya te sugiero que aceptes esta respuesta. –

+0

@iinception ¿Me puede decir cuál es el uso de 'classIndex'? –

+0

Si se desea otro atributo como clase, ¿hay alguna forma de mover/cambiar este atributo a la posición final (en lugar de simplemente usar su índice)? – brunodd

0

intentarlo

data.setClassIndex(1); 
  1. índice de clase que
Cuestiones relacionadas