Error using Weka API: class attribute not set in Java code?
•
Java
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
二维码