2011-11-13 11 views
9

Sto provando ad usare le API di weka nel mio codice java. Io uso la classificazione albero J48 per classificare il mio set di dati nel database MySQL, ma ho questo errore:ERRORE Mentre si utilizza l'API WEKA nel codice java: Attributo di classe non impostato?

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) 
..... 

Questo è il mio codice:

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();} 

Il set di dati in realtà appare nella textarea:

@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 

Vorrei sapere perché compare l'errore (Attributo di classe non impostato !!)

+1

io uso anche Metaclassifier. ma ho l'errore simile: indice di classe (non impostato)! –

risposta

32

È necessario impostare indice di classe per il set di dati prima di passarlo nel classificatore. Il tuo classificatore deve sapere quale è la tua variabile di risultato.
Dopo queste righe ...

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

Aggiungere il seguente:

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

Se Hujan è l'attributo di classe (variabile dipendente)

Vedere Api Docs for more Info

+0

@Angga Raditya suggerisco di accettare questa risposta. –

+0

@iinception Puoi dirmi a cosa serve 'classIndex'? –

+0

Se un altro attributo è ricercato come attributo di classe, c'è un modo per spostare/scambiare questo attributo nella posizione finale (invece di usare solo il suo indice)? – brunodd

0

provarlo

data.setClassIndex(1); 
  1. si indice di classe
Problemi correlati