2011-11-13 39 views
9

Tôi đang cố gắng sử dụng API weka trong mã java của mình. Tôi sử dụng J48 phân loại cây để Phân loại dữ liệu của tôi trong cơ sở dữ liệu MySQL, nhưng tôi có lỗi này:LRI Khi sử dụng API WEKA trong mã java: Thuộc tính lớp không được đặt?

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

Đây là mã của tôi:

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

Bộ dữ liệu thực sự xuất hiện trong 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 

Tôi sẽ biết lý do lỗi xuất hiện (Thuộc tính lớp không được đặt !!)

+1

tôi cũng sử dụng Metaclassifier. nhưng tôi có lỗi tương tự: chỉ số lớp (không được thiết lập)! –

Trả lời

32

Bạn nên đặt chỉ mục lớp cho tập dữ liệu của bạn trước khi chuyển nó vào bộ phân loại. Trình phân loại của bạn phải biết đó là biến kết quả của bạn.
Sau những dòng này ...

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

Thêm dòng sau:

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

Nếu Hujan là thuộc tính lớp học của bạn (kết quả biến)

Xem Api Docs for more Info

+0

@Angga Raditya tôi đề nghị bạn chấp nhận câu trả lời này. –

+0

@iinception Bạn có thể cho tôi biết việc sử dụng 'classIndex' là gì? –

+0

Nếu thuộc tính khác là thuộc tính lớp, có cách nào để di chuyển/hoán đổi thuộc tính này đến vị trí cuối cùng (thay vì chỉ sử dụng chỉ mục của nó) không? – brunodd

0

thử nó

data.setClassIndex(1); 
  1. bạn index lớp
Các vấn đề liên quan