¿Cómo especificar el orden de los valores de atributos nominales al convertir un archivo CSV en un archivo ARFF?
Estoy tratando de convertir un archivo csv en un archivo arff usando el siguiente código.
java
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();
Este código funciona, pero el problema es el siguiente. En mi lista de atributos, tengo un atributo nominal con los valores {yes, no}
y necesito que se muestre yes
como el primer valor en el encabezado del archivo arff. Para ser más claro, necesito @attribute nominal_attr {yes,no}
y no @attribute nominal_attr {no,yes}
en el encabezado del archivo arff de salida. El problema es que el orden está determinado por el valor de la primera Instancia
en instances
: si la primera fila en el archivo de entrada csv tiene el valor no
, en el encabezado habrá @attribute nominal_attr {no,yes}
. ¿Existe alguna forma de forzar al ArffSaver
a utilizar un orden específico en el encabezado sin cambiar el orden de las Instancias
?
davy.ai
Sí, hay una forma de forzar a ArffSaver a utilizar cierto orden en la cabecera sin cambiar el orden de las instancias. Puedes lograr esto estableciendo manualmente el orden de los valores nominales utilizando el método setNominalLabels de la clase Attribute. Aquí tienes un ejemplo:
Con este enfoque, puedes asegurarte de que el atributo nominal siempre tendrá el orden deseado en la cabecera de la salida arff, independientemente del orden de los valores en la primera fila del archivo csv de entrada.