Error using Weka API: class attribute not set in Java code?

I tried to use the Weka API in my java code I use j48 tree classification to classify my dataset in MySQL database, but I have this error:

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

This is my code:

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

The dataset actually appears in 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

I will know why the error occurs (class attribute not set!!)

Solution

You should set the class index before passing the dataset into the classifier Your classifier must know which is your result variable

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

Add the following:

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

If hujan is your class attribute (result variable)

See API docs for more info

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>