Как сохранить назначения кластера weka в Java? - PullRequest
0 голосов
/ 23 мая 2019

Я должен сохранить в новый файл, состоящий из входных данных и назначений кластера

Теперь я могу сохранить входные данные в новом файле

Я могу напечатать clusterNum: assignments, iНе удалось найти способ сохранения назначения кластеров

  import java.io.BufferedReader;
  import java.io.File;
  import java.io.FileNotFoundException;
  import java.io.FileReader;
  import weka.clusterers.ClusterEvaluation;
  import weka.clusterers.SimpleKMeans;
  import weka.core.Instances;
  import weka.core.converters.CSVSaver;
  import weka.core.converters.ConverterUtils.DataSource;
  import weka.filters.unsupervised.attribute.Remove;
  /**
  *
  * @author x2010s
  */
  public class automatizacion {

  public static BufferedReader readDataFile(String filename) {
    BufferedReader inputReader = null;

    try {
        inputReader = new BufferedReader(new FileReader(filename));
    } catch (FileNotFoundException ex) {
        System.err.println("File not found: " + filename);
    }

    return inputReader;
     }

        /**
       * @param args the command line arguments
   */
  public static void main(String[] args) throws Exception{

    SimpleKMeans kmeans = new SimpleKMeans();

    kmeans.setSeed(10);

    //important parameter to set: preserver order, number of cluster.
    kmeans.setPreserveInstancesOrder(true);
    kmeans.setNumClusters(2);

    DataSource source = new DataSource("C:/Users/x2010s/Documents/NetBeansProjects/transmisibles.csv"); 
    Instances data = source.getDataSet();
            Remove removeFilter = new Remove();
            removeFilter.setAttributeIndicesArray("Age");
            removeFilter.setInvertSelection(true);
            removeFilter.setInputFormat(data);


     kmeans.buildClusterer(data);
            ClusterEvaluation eval = new ClusterEvaluation();
            eval.setClusterer(kmeans);
            eval.evaluateClusterer(data);
     // This array returns the cluster number (starting with 0) for each instance
     // The array has as many elements as the number of instances
     int[] assignments = kmeans.getAssignments();

     int i=0;
     for(int clusterNum : assignments) {
        System.out.printf("Instance %d -> Cluster %d \n", i, clusterNum);
        i++;
     }
            System.out.println("\n Cluster Evaluation: "+eval.clusterResultsToString());
            CSVSaver saver = new CSVSaver();
        saver.setInstances(data);
        saver.setFile(new File("C:/Users/x2010s/Documents/NetBeansProjects/transmisiblesp.csv"));
        saver.writeBatch();
         // TODO code application logic here
       }

Я не нашел способа сохранить назначения кластеров в том же файле

...