1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 package org.openimaj.demos;
31
32 import gnu.trove.map.hash.TIntIntHashMap;
33
34 import java.io.File;
35 import java.util.ArrayList;
36 import java.util.List;
37
38 import org.openimaj.ml.clustering.FloatCentroidsResult;
39 import org.openimaj.ml.clustering.kmeans.FloatKMeans;
40 import org.openimaj.util.array.ArrayUtils;
41 import org.openimaj.util.iterator.TextLineIterable;
42
43 import cern.colt.Arrays;
44
45 public class ClusterTest {
46 public static void main(String[] args) {
47 final File f = new File("/Users/jsh2/sed/histograms-uploaded.txt");
48
49 System.out.println("Loading data");
50 final List<float[]> vectors = new ArrayList<float[]>();
51 float[] mean = null;
52 for (final String line : new TextLineIterable(f)) {
53 final String[] parts = line.split(" ");
54 final float[] vector = new float[parts.length];
55 for (int i = 0; i < vector.length; i++) {
56 vector[i] = Float.parseFloat(parts[i]);
57 }
58 vectors.add(vector);
59
60 if (mean == null) {
61 mean = vector.clone();
62 } else {
63 ArrayUtils.sum(mean, vector);
64 }
65 }
66
67 System.out.println("Done");
68
69 final boolean cluster = true;
70
71 ArrayUtils.divide(mean, vectors.size());
72
73
74 if (cluster) {
75 final FloatKMeans km = FloatKMeans.createExact(50);
76 final FloatCentroidsResult result = km.cluster(vectors.toArray(new float[vectors.size()][]));
77
78 final TIntIntHashMap map = new TIntIntHashMap();
79 for (final float[] vector : vectors) {
80 final int clustid = result.defaultHardAssigner().assign(vector);
81 map.adjustOrPutValue(clustid, 1, 1);
82 }
83
84 for (int i = 0; i < result.centroids.length; i++) {
85 float[] r = result.centroids[i];
86
87 r = ArrayUtils.divide(r, ArrayUtils.maxValue(r));
88
89 System.out.println(Arrays.toString(r).replace("[", "").replace("]", ""));
90 }
91 }
92 }
93 }