错误在 Java 代码中使用 WEKA API 时:未设置类属性? [英] ERROR While using WEKA API in java code: Class Attribute Not Set?
问题描述
我正在尝试在我的 Java 代码中使用 weka API.我使用 J48 树分类对 MySQL 数据库中的数据集进行分类,但出现此错误:
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)
.....
这是我的代码:
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();}
数据集实际出现在textarea中:
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!!)
推荐答案
在将数据集传递给分类器之前,您应该为数据集设置 class index of.您的分类器必须知道哪个是您的结果变量.
在这些行之后...
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();
添加以下内容:
data.setClassIndex(data.numAttributes() - 1);
如果 Hujan 是你的类属性(结果变量)
If Hujan is your class attribute (outcome variable)
请参阅 Api 文档了解更多信息
这篇关于错误在 Java 代码中使用 WEKA API 时:未设置类属性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!