从csv到weka的实例出错了

时间:2015-03-01 15:36:13

标签: java weka

 .csv
 100387C,254,73,93
 100388D,2047,60,98
 100388D,2736,62,9
 100389E,951,82,90
 100390F,2048,91,98
 100411C,254,50,96
 100412D,047,75,9

 .arff
 @relation test

 @attribute Admno {100387C,100388.0,100389E,100390.0,100411C,100412.0}
 @attribute Code {254,2047,2736,951,2048,254,047}
 @attribute ore numeric
 @attribute tend numeric
  100387C,254,73,93
  100388.0,2047,60,98
  100388.0,2736,62,9
  100389E,951,82,90
  100390.0,2048,91,98
  100411C,254,50,96
  100412.0,047,75,9

如果您注意到转换后这两个数据之间存在差异 在@attribute Admno上从D到.0。我正在使用的文件转换如下。所以我想知道转换出了什么问题。感谢

    CSVLoader loader = new CSVLoader();
    loader.setSource(new File("C:\\test.csv"));
    Instances data = loader.getDataSet();

    ArffSaver saver = new ArffSaver();
    saver.setInstances(data);
    saver.setFile(new File("C:\\test.arff"));
    saver.writeBatch();

1 个答案:

答案 0 :(得分:0)

您将100388D 100388.0100390F称为100390.0的原因是因为值分别以D和F结尾。在Java中,这意味着值为Double和Float(D代表Double,F代表Float)。这就是为什么当Weka将它们转换为名义值时,它相信值应该是Double或Float,因此.0而不是DF

您可以找到讨论here和相关文档here

据我所知,在Weka中没有直接的方法可以解决这个问题。但是,如果这是ID并且不参与分类或聚类,那么在基于此数据构建模型并将其应用于测试数据时,您可以忽略此属性。

另一种解决此问题的方法是将此属性的值更改为某些值,这些值不会以DF结尾。