Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从csv到weka的实例出错_Java_Weka - Fatal编程技术网

Java 从csv到weka的实例出错

Java 从csv到weka的实例出错,java,weka,Java,Weka,如果您注意到转换后这两个数据之间的差异 在@attribute Admno上从D到.0。下面是我使用的文件转换。所以我想知道转换时出了什么问题。谢谢 .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 @attribut

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

 .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

100388D
as
100388.0
100390F
as
100390.0
获取的原因是,这些值分别以D和F结尾。在Java中,这意味着值是Double和Float(D代表Double,F代表Float)。这就是为什么当Weka将它们转换为标称值时,它认为值应该是双精度或浮点值,因此是
.0
,而不是
D
F

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

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


另一种克服此问题的方法是将此属性的值更改为一些既不以
D
结尾也不以
F

结尾的值。可以通过编辑DatabaseUtis.props中的数据类型来完成吗?@johny,您可以尝试。我在MS Excel上更改了字段的数据类型,但没有任何效果。看起来Weka正在以纯文本的形式读取这些值。但是如果你有办法的话,就在这里发帖子。
    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();