错误在 Java 代码中使用 WEKA API 时:未设置类属性? [英] ERROR While using WEKA API in java code: Class Attribute Not Set?

查看:25
本文介绍了错误在 Java 代码中使用 WEKA API 时:未设置类属性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在我的 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆