将csv文件转换为arff文件时如何指定标称属性值的顺序?

how to specify nominal attribute value's order when converting csv file into arff file?

我正在尝试使用以下代码将 csv 文件转换为 arff 文件。

var csvFile = new File("/path/to/input/file.csv");
var arffOutputFile = new File("/path/to/output/file.arff");
var loader = new CSVLoader();
loader.setSource(csvFile);
var instances = loader.getDataSet();
var saver = new ArffSaver();
saver.setInstances(instances);
saver.setFile(arffOutputFile);
saver.writeBatch();

此代码有效,但问题如下。在我的属性列表中,我有一个标称属性,其值为 {yes, no},我需要 arff header 显示为第一个值 yes。为了更清楚,我需要 @attribute nominal_attr {yes,no} 而不是 arff 输出 header 中的 @attribute nominal_attr {no,yes}。问题是顺序由 instances 中第一个 Instance 的值决定:如果 csv 输入文件中的第一行具有 no 值,则在 header会有@attribute nominal_attr {no,yes}
有没有办法强制 ArffSaver 在 header 中使用特定顺序而不更改 Instances 的顺序?

与其修复输出(即 ArffSaver),更容易修复输入(即 CSVLoader)。 -L 命令行选项(GUI 中的 nominalLabelSpecs 属性)允许您指定名义属性的标签。这样,如果其中一个 CSV 文件不包含所有标签,您可以强制执行顺序和可用标签。

也可以使用以下过滤器来更改标签的顺序: