Java weka.core.UnassignedClassException:类索引为负(未设置)!

Java weka.core.UnassignedClassException:类索引为负(未设置)!,java,weka,Java,Weka,我尝试在csv文件上实现线性回归。以下是csv文件的内容: X1;X2;X3;X4;X5;X6;X7;X8;Y1;Y2 0.98;514.50;294.00;110.25;7.00;2.0.00;0;15.55;21.33; 0.98;514.50;294.00;110.25;7.00;3.0.00;0;15.55;21.33; 0.98;514.50;294.00;110.25;7.00;4.0.00;0;15.55;21.33; 0.98;514.50;294.00;110.25;7.00;

我尝试在csv文件上实现线性回归。以下是csv文件的内容:

X1;X2;X3;X4;X5;X6;X7;X8;Y1;Y2

0.98;514.50;294.00;110.25;7.00;2.0.00;0;15.55;21.33; 0.98;514.50;294.00;110.25;7.00;3.0.00;0;15.55;21.33; 0.98;514.50;294.00;110.25;7.00;4.0.00;0;15.55;21.33; 0.98;514.50;294.00;110.25;7.00;5.0.00;0;15.55;21.33; 0.90;563.50;318.50;122.50;7.00;2.0.00;0;20.84;28.28; 0.90;563.50;318.50;122.50;7.00;3.0.00;0;21.46;25.38; 0.90;563.50;318.50;122.50;7.00;4.0.00;0;20.71;25.16; 0.90;563.50;318.50;122.50;7.00;5.0.00;0;19.68;29.60; 0.86;588.00;294.00;147.00;7.00;2.0.00;0;19.50;27.30; 0.86;588.00;294.00;147.00;7.00;3.0.00;0;19.95;21.97; 0.86;588.00;294.00;147.00;7.00;4.0.00;0;19.34;23.49; 0.86;588.00;294.00;147.00;7.00;5.0.00;0;18.31;27.87; 0.82;612.50;318.50;147.00;7.00;2.0.00;0;17.05;23.77;

0.71;710.50;269.50;220.50;3.50;2.0.40;5.12.43;15.59; 0.71;710.50;269.50;220.50;3.50;3.0.40;5.12.63;14.58; 0.71;710.50;269.50;220.50;3.50;4.0.40;5.12.76;15.33; 0.71;710.50;269.50;220.50;3.50;5.0.40;5.12.42;15.31; 0.69;735.00;294.00;220.50;3.50;2.0.40;5.14.12;16.63; 0.69;735.00;294.00;220.50;3.50;3.0.40;5.14.28;15.87; 0.69;735.00;294.00;220.50;3.50;4.0.40;5.14.37;16.54; 0.69;735.00;294.00;220.50;3.50;5.0.40;5.14.21;16.74; 0.66;759.50;318.50;220.50;3.50;2.0.40;5.14.96;17.64; 0.66;759.50;318.50;220.50;3.50;3.0.40;5.14.92;17.79; 0.66;759.50;318.50;220.50;3.50;4.0.40;5.14.92;17.55; 0.66;759.50;318.50;220.50;3.50;5.0.40;5.15.16;18.06; 0.64;784.00;343.00;220.50;3.50;2.0.40;5.17.69;20.82; 0.64;784.00;343.00;220.50;3.50;3.0.40;5.18.19;20.21; 0.64;784.00;343.00;220.50;3.50;4.0.40;5.18.16;20.71; 0.64;784.00;343.00;220.50;3.50;5.0.40;5.17.88;21.40; 0.62;808.50;367.50;220.50;3.50;2.0.40;5.16.54;16.88; 0.62;808.50;367.50;220.50;3.50;3.0.40;5.16.44;17.11; 0.62;808.50;367.50;220.50;3.50;4.0.40;5.16.48;16.61; 0.62;808.50;367.50;220.50;3.50;5.0.40;5.16.64;16.03;

我阅读了这个csv文件并实现了线性回归实现。以下是java的源代码:

 public static void main(String[] args) throws IOException 
     {

          
         String csvFile = null;       
         CSVLoader loader = null;         
         Remove remove =null;        
         Instances data =null;        
         LinearRegression model = null;
         int numberofFeatures = 0;
         
         try 
         {
        
             csvFile = "C:\\Users\\Taha\\Desktop/ENB2012_data.csv";         
             loader = new CSVLoader();
          
         
             // load CSV      
             loader.setSource(new File(csvFile));   
             data = loader.getDataSet();
             //System.out.println(data);
             numberofFeatures = data.numAttributes();
             
             System.out.println("number of features: " + numberofFeatures);
                     
             data.setClassIndex(data.numAttributes() - 2);
         
             //remove last attribute Y2
             remove = new Remove();         
             remove.setOptions(new String[]{"-R", data.numAttributes()+""});
             remove.setInputFormat(data);  
             
             data = Filter.useFilter(data, remove);
            
            // data.setClassIndex(data.numAttributes() - 2);
             
             model = new LinearRegression();
             model.buildClassifier(data); 
             System.out.println(model);
             
         } catch (Exception e) { 
                // TODO Auto-generated catch block
                e.printStackTrace();
         }
我得到一个错误,weka.core.UnassignedClassException:类索引为负(未设置)!在直线模型上,构建分类器(数据);特征数量为1,但预计为9。它们是X1;X2;X3;X4;X5;X6;X7;X8;Y1;Y2我错过了什么?
提前感谢。

因为我找不到解决该问题的任何方法,所以我决定将数据定位到Oracle数据库中,并从Oracle读取数据。Oracle Sql Developer中有一个导入实用程序,我使用了它。这就解决了我的问题。我为有同样问题的人写这篇文章。 以下是有关为weka连接Oracle数据库的详细信息


您可以在行
data=loader.getDataSet()
之后添加下一行来解决异常:

if (data.classIndex() == -1) {
        System.out.println("reset index...");
        instances.setClassIndex(data.numAttributes() - 1);
    }

这对我很有效。

代码似乎还可以。可能csv文件有问题。我建议在值之间使用逗号,或者尝试将csv转换为arff。谢谢,这似乎是源代码中的一个小错误,我的weka版本是3.8.2