@Override public int[][] performClustering(double[][] data) { DoubleCentroidsResult res = this.cluster(data); return new IndexClusters(res.defaultHardAssigner().assign(data)).clusters(); }
@Override public int[][] performClustering(double[][] data) { DoubleCentroidsResult clusters = this.cluster(data); return new IndexClusters(clusters.defaultHardAssigner().assign(data)).clusters(); }
/** * Compute HierarchicalDoubleKMeans clustering. * * @param data Data to cluster. * @param K Number of clusters for this node. * @param height Tree height. * * @return a new HierarchicalDoubleKMeans node representing a sub-clustering. **/ private Node trainLevel(final double[][] data, int K, int height) { Node node = new Node(); node.children = (height == 1) ? null : new Node[K]; DoubleKMeans kmeans = newDoubleKMeans(K); node.result = kmeans.cluster(data); HardAssigner<double[], double[], IntDoublePair> assigner = node.result.defaultHardAssigner(); if (height > 1) { int[] ids = assigner.assign(data); for (int k = 0; k < K; k++) { double[][] partition = extractSubset(data, ids, k); int partitionK = Math.min(K, partition.length); node.children[k] = trainLevel(partition, partitionK, height - 1); } } return node; }
node.result = kmeans.cluster(data); HardAssigner<double[], double[], IntDoublePair> assigner = node.result.defaultHardAssigner();