es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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?

Tags:  , , ,

Answer

  1. Avatar for 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:

    // crear el atributo nominal con el orden por defecto (no, yes)
    Attribute nominalAttr = new Attribute("atributo_nominal", Arrays.asList("no", "yes"));
    
    // establecer el orden deseado de los valores nominales
    nominalAttr.setNominalLabels(Arrays.asList("yes", "no"));
    
    // añadir el atributo al conjunto de datos
    dataset.insertAttributeAt(nominalAttr, dataset.numAttributes());
    
    // configurar y ejecutar ArffSaver
    ArffSaver saver = new ArffSaver();
    saver.setInstances(dataset);
    saver.setFile(outputFile);
    saver.writeBatch();
    

    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.

Comments are closed.