从 csv 到 weka 的实例出错
Instances went wrong from csv to 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
如果您注意到转换后这两个数据之间的差异
从 D 到 .0 @attribute Admno。我使用的文件转换如下。所以我想知道转换出了什么问题。谢谢
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();
你得到 100388D
作为 100388.0
和 100390F
作为 100390.0
的原因是因为这些值分别以 D 和 F 结尾。在 Java 中,这意味着值是 Double 和 Float(D 代表 Double,F 代表 Float)。这就是为什么当 Weka 将它们转换为标称值时,它认为值应该是 Double 或 Float,因此 .0
而不是 D
和 F
。
你可以找到讨论here and the related documentation here。
据我所知,在 Weka
中没有直接的方法来克服这个问题。但是,如果这是一个 ID
并且不参与分类或聚类,那么当您基于此数据构建模型并将其应用于测试数据时,您可以忽略此属性。
另一种克服此问题的方法是将此属性的值更改为既不以 D
也不以 F
.
结尾的值
.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
如果您注意到转换后这两个数据之间的差异 从 D 到 .0 @attribute Admno。我使用的文件转换如下。所以我想知道转换出了什么问题。谢谢
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();
你得到 100388D
作为 100388.0
和 100390F
作为 100390.0
的原因是因为这些值分别以 D 和 F 结尾。在 Java 中,这意味着值是 Double 和 Float(D 代表 Double,F 代表 Float)。这就是为什么当 Weka 将它们转换为标称值时,它认为值应该是 Double 或 Float,因此 .0
而不是 D
和 F
。
你可以找到讨论here and the related documentation here。
据我所知,在 Weka
中没有直接的方法来克服这个问题。但是,如果这是一个 ID
并且不参与分类或聚类,那么当您基于此数据构建模型并将其应用于测试数据时,您可以忽略此属性。
另一种克服此问题的方法是将此属性的值更改为既不以 D
也不以 F
.