I'm trying to use 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 the 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 would to know why the error appear(Class Attribute Not Set!!)
You should set class index of for your dataset before passing it into classifier. Your classifier must know which is your outcome variable.
After these lines...
loader.setQuery("select * from data_training");
Instances data = loader.getDataSet();
Add the following:
data.setClassIndex(data.numAttributes() - 1);
If Hujan is your class attribute (outcome variable)