Esta publicación muestra cómo ejecutar el algoritmo de agrupación en clústeres k-means en Java usando Weka.
Primero, descargue el archivo weka.jar aquí.
Cuando está descomprimido, tiene archivos como este:
Agregue el archivo weka.jar a la ruta de construcción de su proyecto y luego eche un vistazo al archivo .arff en el directorio de datos. Al leer uno o dos de ellos, debería poder ver qué tipo de formato toma Weka como entrada.
En segundo lugar, prepare sus datos correctamente y use el siguiente código para ejecutar el algoritmo de agrupación en clústeres de k-means. La salida es la instancia y su grupo correspondiente.
package greenblocks.statistics; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import weka.clusterers.SimpleKMeans; import weka.core.Instances; public class Cluster { 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; } 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(5); BufferedReader datafile = readDataFile("C:/Users/ryan/workspace/data.arff"); Instances data = new Instances(datafile); kmeans.buildClusterer(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++; } } } |
Producción:
Instance 0 -> Cluster 4 Instance 1 -> Cluster 0 Instance 2 -> Cluster 2 Instance 3 -> Cluster 4 Instance 4 -> Cluster 0 Instance 5 -> Cluster 3 Instance 6 -> Cluster 1 Instance 7 -> Cluster 3 Instance 8 -> Cluster 4 ...