You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by je...@apache.org on 2010/09/28 20:09:04 UTC
svn commit: r1002306 - in /mahout/trunk/utils/src:
main/java/org/apache/mahout/clustering/evaluation/
test/java/org/apache/mahout/clustering/
test/java/org/apache/mahout/clustering/cdbw/
Author: jeastman
Date: Tue Sep 28 18:09:04 2010
New Revision: 1002306
URL: http://svn.apache.org/viewvc?rev=1002306&view=rev
Log:
MAHOUT-513: Added a sequential version of representativePoints extraction. Changed other tests to use it. All tests run
Modified:
mahout/trunk/utils/src/main/java/org/apache/mahout/clustering/evaluation/RepresentativePointsDriver.java
mahout/trunk/utils/src/main/java/org/apache/mahout/clustering/evaluation/RepresentativePointsMapper.java
mahout/trunk/utils/src/test/java/org/apache/mahout/clustering/TestClusterEvaluator.java
mahout/trunk/utils/src/test/java/org/apache/mahout/clustering/cdbw/TestCDbwEvaluator.java
Modified: mahout/trunk/utils/src/main/java/org/apache/mahout/clustering/evaluation/RepresentativePointsDriver.java
URL: http://svn.apache.org/viewvc/mahout/trunk/utils/src/main/java/org/apache/mahout/clustering/evaluation/RepresentativePointsDriver.java?rev=1002306&r1=1002305&r2=1002306&view=diff
==============================================================================
--- mahout/trunk/utils/src/main/java/org/apache/mahout/clustering/evaluation/RepresentativePointsDriver.java (original)
+++ mahout/trunk/utils/src/main/java/org/apache/mahout/clustering/evaluation/RepresentativePointsDriver.java Tue Sep 28 18:09:04 2010
@@ -18,6 +18,10 @@
package org.apache.mahout.clustering.evaluation;
import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
@@ -35,6 +39,7 @@ import org.apache.hadoop.util.ToolRunner
import org.apache.mahout.clustering.AbstractCluster;
import org.apache.mahout.clustering.Cluster;
import org.apache.mahout.clustering.WeightedVectorWritable;
+import org.apache.mahout.clustering.kmeans.OutputLogFilter;
import org.apache.mahout.common.AbstractJob;
import org.apache.mahout.common.commandline.DefaultOptionCreator;
import org.apache.mahout.common.distance.DistanceMeasure;
@@ -64,6 +69,7 @@ public final class RepresentativePointsD
addOutputOption();
addOption(DefaultOptionCreator.distanceMeasureOption().create());
addOption(DefaultOptionCreator.maxIterationsOption().create());
+ addOption(DefaultOptionCreator.methodOption().create());
if (parseArguments(args) == null) {
return -1;
}
@@ -72,10 +78,11 @@ public final class RepresentativePointsD
Path output = getOutputPath();
String distanceMeasureClass = getOption(DefaultOptionCreator.DISTANCE_MEASURE_OPTION);
int maxIterations = Integer.parseInt(getOption(DefaultOptionCreator.MAX_ITERATIONS_OPTION));
+ boolean runSequential = getOption(DefaultOptionCreator.METHOD_OPTION).equalsIgnoreCase(DefaultOptionCreator.SEQUENTIAL_METHOD);
ClassLoader ccl = Thread.currentThread().getContextClassLoader();
DistanceMeasure measure = ccl.loadClass(distanceMeasureClass).asSubclass(DistanceMeasure.class).newInstance();
- run(getConf(), input, null, output, measure, maxIterations);
+ run(getConf(), input, null, output, measure, maxIterations, runSequential);
return 0;
}
@@ -84,7 +91,8 @@ public final class RepresentativePointsD
Path clusteredPointsIn,
Path output,
DistanceMeasure measure,
- int numIterations) throws InstantiationException, IllegalAccessException, IOException,
+ int numIterations,
+ boolean runSequential) throws InstantiationException, IllegalAccessException, IOException,
InterruptedException, ClassNotFoundException {
Path stateIn = new Path(output, "representativePoints-0");
writeInitialState(stateIn, clustersIn);
@@ -93,7 +101,7 @@ public final class RepresentativePointsD
log.info("Iteration {}", iteration);
// point the output to a new directory per iteration
Path stateOut = new Path(output, "representativePoints-" + (iteration + 1));
- runIteration(clusteredPointsIn, stateIn, stateOut, measure);
+ runIteration(conf, clusteredPointsIn, stateIn, stateOut, measure, runSequential);
// now point the input to the old output directory
stateIn = stateOut;
}
@@ -124,9 +132,24 @@ public final class RepresentativePointsD
}
}
+ private static void runIteration(Configuration conf,
+ Path clusteredPointsIn,
+ Path stateIn,
+ Path stateOut,
+ DistanceMeasure measure,
+ boolean runSequential) throws IOException, InterruptedException, ClassNotFoundException,
+ InstantiationException, IllegalAccessException {
+ if (runSequential) {
+ runIterationSeq(conf, clusteredPointsIn, stateIn, stateOut, measure);
+ } else {
+ runIterationMR(conf, clusteredPointsIn, stateIn, stateOut, measure);
+ }
+ }
+
/**
- * Run the job using supplied arguments
- *
+ * Run the job using supplied arguments as a sequential process
+ * @param conf
+ * the Configuration to use
* @param input
* the directory pathname for input points
* @param stateIn
@@ -134,11 +157,70 @@ public final class RepresentativePointsD
* @param stateOut
* the directory pathname for output state
* @param measure
- * the DistanceMeasure
+ * the DistanceMeasure to use
*/
- private static void runIteration(Path input, Path stateIn, Path stateOut, DistanceMeasure measure) throws IOException,
- InterruptedException, ClassNotFoundException {
- Configuration conf = new Configuration();
+ private static void runIterationSeq(Configuration conf,
+ Path clusteredPointsIn,
+ Path stateIn,
+ Path stateOut,
+ DistanceMeasure measure) throws IOException, InstantiationException, IllegalAccessException {
+
+ Map<Integer, List<VectorWritable>> repPoints = RepresentativePointsMapper.getRepresentativePoints(conf, stateIn);
+ Map<Integer, WeightedVectorWritable> mostDistantPoints = new HashMap<Integer, WeightedVectorWritable>();
+ FileSystem fs = FileSystem.get(clusteredPointsIn.toUri(), conf);
+ FileStatus[] status = fs.listStatus(clusteredPointsIn, new OutputLogFilter());
+ int part = 0;
+ for (FileStatus s : status) {
+ SequenceFile.Reader reader = new SequenceFile.Reader(fs, s.getPath(), conf);
+ try {
+ IntWritable key = (IntWritable) reader.getKeyClass().asSubclass(Writable.class).newInstance();
+ WeightedVectorWritable vw = (WeightedVectorWritable) reader.getValueClass().asSubclass(Writable.class).newInstance();
+ while (reader.next(key, vw)) {
+ RepresentativePointsMapper.mapPoint(key, vw, measure, repPoints, mostDistantPoints);
+ }
+ } finally {
+ reader.close();
+ }
+ }
+ SequenceFile.Writer writer = new SequenceFile.Writer(fs,
+ conf,
+ new Path(stateOut, "part-m-" + part++),
+ IntWritable.class,
+ VectorWritable.class);
+ try {
+ for (Entry<Integer, List<VectorWritable>> entry : repPoints.entrySet()) {
+ for (VectorWritable vw : entry.getValue()) {
+ writer.append(new IntWritable(entry.getKey()), vw);
+ }
+ }
+ } finally {
+ writer.close();
+ }
+ writer = new SequenceFile.Writer(fs, conf, new Path(stateOut, "part-m-" + part++), IntWritable.class, VectorWritable.class);
+ try {
+ for (Map.Entry<Integer, WeightedVectorWritable> entry : mostDistantPoints.entrySet()) {
+ writer.append(new IntWritable(entry.getKey()), new VectorWritable(entry.getValue().getVector()));
+ }
+ } finally {
+ writer.close();
+ }
+ }
+
+ /**
+ * Run the job using supplied arguments as a Map/Reduce process
+ * @param conf
+ * the Configuration to use
+ * @param input
+ * the directory pathname for input points
+ * @param stateIn
+ * the directory pathname for input state
+ * @param stateOut
+ * the directory pathname for output state
+ * @param measure
+ * the DistanceMeasure to use
+ */
+ private static void runIterationMR(Configuration conf, Path input, Path stateIn, Path stateOut, DistanceMeasure measure)
+ throws IOException, InterruptedException, ClassNotFoundException {
conf.set(STATE_IN_KEY, stateIn.toString());
conf.set(DISTANCE_MEASURE_KEY, measure.getClass().getName());
Job job = new Job(conf);
Modified: mahout/trunk/utils/src/main/java/org/apache/mahout/clustering/evaluation/RepresentativePointsMapper.java
URL: http://svn.apache.org/viewvc/mahout/trunk/utils/src/main/java/org/apache/mahout/clustering/evaluation/RepresentativePointsMapper.java?rev=1002306&r1=1002305&r2=1002306&view=diff
==============================================================================
--- mahout/trunk/utils/src/main/java/org/apache/mahout/clustering/evaluation/RepresentativePointsMapper.java (original)
+++ mahout/trunk/utils/src/main/java/org/apache/mahout/clustering/evaluation/RepresentativePointsMapper.java Tue Sep 28 18:09:04 2010
@@ -54,12 +54,20 @@ public class RepresentativePointsMapper
@Override
protected void map(IntWritable clusterId, WeightedVectorWritable point, Context context) throws IOException, InterruptedException {
+ mapPoint(clusterId, point, measure, representativePoints, mostDistantPoints);
+ }
+
+ public static void mapPoint(IntWritable clusterId,
+ WeightedVectorWritable point,
+ DistanceMeasure measure,
+ Map<Integer, List<VectorWritable>> representativePoints,
+ Map<Integer, WeightedVectorWritable> mostDistantPoints) {
int key = clusterId.get();
WeightedVectorWritable currentMDP = mostDistantPoints.get(key);
- List<VectorWritable> refPoints = representativePoints.get(key);
+ List<VectorWritable> repPoints = representativePoints.get(key);
double totalDistance = 0.0;
- for (VectorWritable refPoint : refPoints) {
+ for (VectorWritable refPoint : repPoints) {
totalDistance += measure.distance(refPoint.get(), point.getVector());
}
if (currentMDP == null || currentMDP.getWeight() < totalDistance) {
@@ -98,11 +106,14 @@ public class RepresentativePointsMapper
public static Map<Integer, List<VectorWritable>> getRepresentativePoints(Configuration conf) {
String statePath = conf.get(RepresentativePointsDriver.STATE_IN_KEY);
+ return getRepresentativePoints(conf, new Path(statePath));
+ }
+
+ public static Map<Integer, List<VectorWritable>> getRepresentativePoints(Configuration conf, Path statePath) {
Map<Integer, List<VectorWritable>> representativePoints = new HashMap<Integer, List<VectorWritable>>();
try {
- Path path = new Path(statePath);
- FileSystem fs = FileSystem.get(path.toUri(), conf);
- FileStatus[] status = fs.listStatus(path, new OutputLogFilter());
+ FileSystem fs = FileSystem.get(statePath.toUri(), conf);
+ FileStatus[] status = fs.listStatus(statePath, new OutputLogFilter());
for (FileStatus s : status) {
SequenceFile.Reader reader = new SequenceFile.Reader(fs, s.getPath(), conf);
try {
Modified: mahout/trunk/utils/src/test/java/org/apache/mahout/clustering/TestClusterEvaluator.java
URL: http://svn.apache.org/viewvc/mahout/trunk/utils/src/test/java/org/apache/mahout/clustering/TestClusterEvaluator.java?rev=1002306&r1=1002305&r2=1002306&view=diff
==============================================================================
--- mahout/trunk/utils/src/test/java/org/apache/mahout/clustering/TestClusterEvaluator.java (original)
+++ mahout/trunk/utils/src/test/java/org/apache/mahout/clustering/TestClusterEvaluator.java Tue Sep 28 18:09:04 2010
@@ -41,6 +41,7 @@ import org.apache.mahout.clustering.fuzz
import org.apache.mahout.clustering.kmeans.KMeansDriver;
import org.apache.mahout.clustering.kmeans.TestKmeansClustering;
import org.apache.mahout.clustering.meanshift.MeanShiftCanopyDriver;
+import org.apache.mahout.common.HadoopUtil;
import org.apache.mahout.common.MahoutTestCase;
import org.apache.mahout.common.distance.DistanceMeasure;
import org.apache.mahout.common.distance.EuclideanDistanceMeasure;
@@ -114,9 +115,10 @@ public final class TestClusterEvaluator
generateSamples(300, 0, 2, 0.1);
}
- private void checkRefPoints(int numIterations) throws IOException {
+ private void printRepPoints(int numIterations) throws IOException {
for (int i = 0; i <= numIterations; i++) {
Path out = new Path(getTestTempDirPath("output"), "representativePoints-" + i);
+ System.out.println("Representative Points for iteration " + i);
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
for (FileStatus file : fs.listStatus(out)) {
@@ -161,6 +163,29 @@ public final class TestClusterEvaluator
}
@Test
+ public void testRepresentativePoints() throws Exception {
+ ClusteringTestUtils.writePointsToFile(referenceData, new Path(testdata, "file1"), fs, conf);
+ DistanceMeasure measure = new EuclideanDistanceMeasure();
+ Configuration conf = new Configuration();
+ // run using MR reference point calculation
+ CanopyDriver.run(conf, testdata, output, measure, 3.1, 1.1, true, true);
+ int numIterations = 2;
+ Path clustersIn = new Path(output, "clusters-0");
+ RepresentativePointsDriver.run(conf, clustersIn, new Path(output, "clusteredPoints"), output, measure, numIterations, false);
+ printRepPoints(numIterations);
+ ClusterEvaluator evaluatorMR = new ClusterEvaluator(conf, clustersIn);
+ // now run again using sequential reference point calculation
+ HadoopUtil.overwriteOutput(output);
+ CanopyDriver.run(conf, testdata, output, measure, 3.1, 1.1, true, true);
+ RepresentativePointsDriver.run(conf, clustersIn, new Path(output, "clusteredPoints"), output, measure, numIterations, true);
+ printRepPoints(numIterations);
+ ClusterEvaluator evaluatorSeq = new ClusterEvaluator(conf, clustersIn);
+ // compare results
+ assertEquals("InterCluster Density", evaluatorMR.interClusterDensity(), evaluatorSeq.interClusterDensity(), EPSILON);
+ assertEquals("IntraCluster Density", evaluatorMR.intraClusterDensity(), evaluatorSeq.intraClusterDensity(), EPSILON);
+ }
+
+ @Test
public void testCluster0() throws IOException {
ClusteringTestUtils.writePointsToFile(referenceData, new Path(testdata, "file1"), fs, conf);
DistanceMeasure measure = new EuclideanDistanceMeasure();
@@ -249,13 +274,13 @@ public final class TestClusterEvaluator
CanopyDriver.run(conf, testdata, output, measure, 3.1, 1.1, true, true);
int numIterations = 10;
Path clustersIn = new Path(output, "clusters-0");
- RepresentativePointsDriver.run(conf, clustersIn, new Path(output, "clusteredPoints"), output, measure, numIterations);
+ RepresentativePointsDriver.run(conf, clustersIn, new Path(output, "clusteredPoints"), output, measure, numIterations, true);
ClusterEvaluator evaluator = new ClusterEvaluator(conf, clustersIn);
// now print out the Results
System.out.println("Intra-cluster density = " + evaluator.intraClusterDensity());
System.out.println("Inter-cluster density = " + evaluator.interClusterDensity());
- checkRefPoints(numIterations);
+ printRepPoints(numIterations);
}
@Test
@@ -269,12 +294,12 @@ public final class TestClusterEvaluator
KMeansDriver.run(testdata, new Path(output, "clusters-0"), output, measure, 0.001, 10, true, true);
int numIterations = 10;
Path clustersIn = new Path(output, "clusters-2");
- RepresentativePointsDriver.run(conf, clustersIn, new Path(output, "clusteredPoints"), output, measure, numIterations);
+ RepresentativePointsDriver.run(conf, clustersIn, new Path(output, "clusteredPoints"), output, measure, numIterations, true);
ClusterEvaluator evaluator = new ClusterEvaluator(conf, clustersIn);
// now print out the Results
System.out.println("Intra-cluster density = " + evaluator.intraClusterDensity());
System.out.println("Inter-cluster density = " + evaluator.interClusterDensity());
- checkRefPoints(numIterations);
+ printRepPoints(numIterations);
}
@Test
@@ -288,12 +313,12 @@ public final class TestClusterEvaluator
FuzzyKMeansDriver.run(testdata, new Path(output, "clusters-0"), output, measure, 0.001, 10, 2, true, true, 0, true);
int numIterations = 10;
Path clustersIn = new Path(output, "clusters-4");
- RepresentativePointsDriver.run(conf, clustersIn, new Path(output, "clusteredPoints"), output, measure, numIterations);
+ RepresentativePointsDriver.run(conf, clustersIn, new Path(output, "clusteredPoints"), output, measure, numIterations, true);
ClusterEvaluator evaluator = new ClusterEvaluator(conf, clustersIn);
// now print out the Results
System.out.println("Intra-cluster density = " + evaluator.intraClusterDensity());
System.out.println("Inter-cluster density = " + evaluator.interClusterDensity());
- checkRefPoints(numIterations);
+ printRepPoints(numIterations);
}
@Test
@@ -304,12 +329,12 @@ public final class TestClusterEvaluator
new MeanShiftCanopyDriver().run(conf, testdata, output, measure, 2.1, 1.0, 0.001, 10, false, true, true);
int numIterations = 10;
Path clustersIn = new Path(output, "clusters-10");
- RepresentativePointsDriver.run(conf, clustersIn, new Path(output, "clusteredPoints"), output, measure, numIterations);
+ RepresentativePointsDriver.run(conf, clustersIn, new Path(output, "clusteredPoints"), output, measure, numIterations, true);
ClusterEvaluator evaluator = new ClusterEvaluator(conf, clustersIn);
// now print out the Results
System.out.println("Intra-cluster density = " + evaluator.intraClusterDensity());
System.out.println("Inter-cluster density = " + evaluator.interClusterDensity());
- checkRefPoints(numIterations);
+ printRepPoints(numIterations);
}
@Test
@@ -325,12 +350,13 @@ public final class TestClusterEvaluator
new Path(output, "clusteredPoints"),
output,
new EuclideanDistanceMeasure(),
- numIterations);
+ numIterations,
+ true);
ClusterEvaluator evaluator = new ClusterEvaluator(conf, clustersIn);
// now print out the Results
System.out.println("Intra-cluster density = " + evaluator.intraClusterDensity());
System.out.println("Inter-cluster density = " + evaluator.interClusterDensity());
- checkRefPoints(numIterations);
+ printRepPoints(numIterations);
}
}
Modified: mahout/trunk/utils/src/test/java/org/apache/mahout/clustering/cdbw/TestCDbwEvaluator.java
URL: http://svn.apache.org/viewvc/mahout/trunk/utils/src/test/java/org/apache/mahout/clustering/cdbw/TestCDbwEvaluator.java?rev=1002306&r1=1002305&r2=1002306&view=diff
==============================================================================
--- mahout/trunk/utils/src/test/java/org/apache/mahout/clustering/cdbw/TestCDbwEvaluator.java (original)
+++ mahout/trunk/utils/src/test/java/org/apache/mahout/clustering/cdbw/TestCDbwEvaluator.java Tue Sep 28 18:09:04 2010
@@ -71,9 +71,10 @@ public final class TestCDbwEvaluator ext
ClusteringTestUtils.writePointsToFile(sampleData, getTestTempFilePath("testdata/file1"), fs, conf);
}
- private void checkRefPoints(int numIterations) throws IOException {
+ private void printRepPoints(int numIterations) throws IOException {
for (int i = 0; i <= numIterations; i++) {
Path out = new Path(getTestTempDirPath("output"), "representativePoints-" + i);
+ System.out.println("Representative Points for iteration " + i);
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
for (FileStatus file : fs.listStatus(out)) {
@@ -204,7 +205,7 @@ public final class TestCDbwEvaluator ext
}
@Test
- public void testCanopy() throws Exception { // now run the Job
+ public void testCanopy() throws Exception {
DistanceMeasure measure = new EuclideanDistanceMeasure();
CanopyDriver.run(new Configuration(),
getTestTempDirPath("testdata"),
@@ -213,14 +214,14 @@ public final class TestCDbwEvaluator ext
3.1,
2.1,
true,
- false);
+ true);
int numIterations = 2;
Path output = getTestTempDirPath("output");
Configuration conf = new Configuration();
Path clustersIn = new Path(output, "clusters-0");
- RepresentativePointsDriver.run(conf, clustersIn, new Path(output, "clusteredPoints"), output, measure, numIterations);
+ RepresentativePointsDriver.run(conf, clustersIn, new Path(output, "clusteredPoints"), output, measure, numIterations, true);
CDbwEvaluator evaluator = new CDbwEvaluator(conf, clustersIn);
- checkRefPoints(numIterations);
+ printRepPoints(numIterations);
// now print out the Results
System.out.println("CDbw = " + evaluator.getCDbw());
System.out.println("Intra-cluster density = " + evaluator.intraClusterDensity());
@@ -239,16 +240,16 @@ public final class TestCDbwEvaluator ext
3.1,
2.1,
false,
- false);
+ true);
// now run the KMeans job
Path output = getTestTempDirPath("output");
- KMeansDriver.run(getTestTempDirPath("testdata"), new Path(output, "clusters-0"), output, measure, 0.001, 10, true, false);
+ KMeansDriver.run(getTestTempDirPath("testdata"), new Path(output, "clusters-0"), output, measure, 0.001, 10, true, true);
int numIterations = 2;
Configuration conf = new Configuration();
Path clustersIn = new Path(output, "clusters-2");
- RepresentativePointsDriver.run(conf, clustersIn, new Path(output, "clusteredPoints"), output, measure, numIterations);
+ RepresentativePointsDriver.run(conf, clustersIn, new Path(output, "clusteredPoints"), output, measure, numIterations, true);
CDbwEvaluator evaluator = new CDbwEvaluator(conf, clustersIn);
- checkRefPoints(numIterations);
+ printRepPoints(numIterations);
// now print out the Results
System.out.println("CDbw = " + evaluator.getCDbw());
System.out.println("Intra-cluster density = " + evaluator.intraClusterDensity());
@@ -267,7 +268,7 @@ public final class TestCDbwEvaluator ext
3.1,
2.1,
false,
- false);
+ true);
// now run the KMeans job
Path output = getTestTempDirPath("output");
FuzzyKMeansDriver.run(getTestTempDirPath("testdata"),
@@ -280,13 +281,13 @@ public final class TestCDbwEvaluator ext
true,
true,
0,
- false);
+ true);
int numIterations = 2;
Configuration conf = new Configuration();
Path clustersIn = new Path(output, "clusters-4");
- RepresentativePointsDriver.run(conf, clustersIn, new Path(output, "clusteredPoints"), output, measure, numIterations);
+ RepresentativePointsDriver.run(conf, clustersIn, new Path(output, "clusteredPoints"), output, measure, numIterations, true);
CDbwEvaluator evaluator = new CDbwEvaluator(conf, clustersIn);
- checkRefPoints(numIterations);
+ printRepPoints(numIterations);
// now print out the Results
System.out.println("CDbw = " + evaluator.getCDbw());
System.out.println("Intra-cluster density = " + evaluator.intraClusterDensity());
@@ -307,13 +308,14 @@ public final class TestCDbwEvaluator ext
0.001,
10,
false,
- true, false);
+ true,
+ true);
int numIterations = 2;
Path output = getTestTempDirPath("output");
Path clustersIn = new Path(output, "clusters-2");
- RepresentativePointsDriver.run(conf, clustersIn, new Path(output, "clusteredPoints"), output, measure, numIterations);
+ RepresentativePointsDriver.run(conf, clustersIn, new Path(output, "clusteredPoints"), output, measure, numIterations, true);
CDbwEvaluator evaluator = new CDbwEvaluator(conf, clustersIn);
- checkRefPoints(numIterations);
+ printRepPoints(numIterations);
// now print out the Results
System.out.println("CDbw = " + evaluator.getCDbw());
System.out.println("Intra-cluster density = " + evaluator.intraClusterDensity());
@@ -343,9 +345,10 @@ public final class TestCDbwEvaluator ext
new Path(output, "clusteredPoints"),
output,
new EuclideanDistanceMeasure(),
- numIterations);
+ numIterations,
+ true);
CDbwEvaluator evaluator = new CDbwEvaluator(conf, clustersIn);
- checkRefPoints(numIterations);
+ printRepPoints(numIterations);
// now print out the Results
System.out.println("CDbw = " + evaluator.getCDbw());
System.out.println("Intra-cluster density = " + evaluator.intraClusterDensity());