public static String getClusterName(Cluster cluster) { StringBuilder sb = new StringBuilder("{"); for (int i = 0; i < cluster.getPoints().size(); i++) { sb.append(cluster.getPoints().get(i).getPointName()).append(","); } return sb.substring(0, sb.length() - 1) + "}"; }
@Test public void testCertainSpace() { KMeansPlusPlusClusterer.EmptyClusterStrategy[] strategies = { KMeansPlusPlusClusterer.EmptyClusterStrategy.LARGEST_VARIANCE, KMeansPlusPlusClusterer.EmptyClusterStrategy.LARGEST_POINTS_NUMBER, KMeansPlusPlusClusterer.EmptyClusterStrategy.FARTHEST_POINT }; for (KMeansPlusPlusClusterer.EmptyClusterStrategy strategy : strategies) { int numberOfVariables = 27; // initialise testvalues int position1 = 1; int position2 = position1 + numberOfVariables; int position3 = position2 + numberOfVariables; int position4 = position3 + numberOfVariables; // testvalues will be multiplied int multiplier = 1000000; DoublePoint[] breakingPoints = new DoublePoint[numberOfVariables]; // define the space which will break the cluster algorithm for (int i = 0; i < numberOfVariables; i++) { int points[] = {position1, position2, position3, position4}; // multiply the values for (int j = 0; j < points.length; j++) { points[j] = points[j] * multiplier; } DoublePoint DoublePoint = new DoublePoint(points); breakingPoints[i] = DoublePoint; position1 = position1 + numberOfVariables; position2 = position2 + numberOfVariables; position3 = position3 + numberOfVariables; position4 = position4 + numberOfVariables; } for (int n = 2; n < 27; ++n) { KMeansPlusPlusClusterer<DoublePoint> transformer = new KMeansPlusPlusClusterer<DoublePoint>( n, 100, new EuclideanDistance(), random, strategy); List<? extends Cluster<DoublePoint>> clusters = transformer.cluster(Arrays.asList(breakingPoints)); Assert.assertEquals(n, clusters.size()); int sum = 0; for (Cluster<DoublePoint> cluster : clusters) { sum += cluster.getPoints().size(); } Assert.assertEquals(numberOfVariables, sum); } } }