You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by sq...@apache.org on 2013/03/11 23:22:12 UTC

svn commit: r1455350 - /mahout/trunk/core/src/main/java/org/apache/mahout/clustering/spectral/kmeans/SpectralKMeansDriver.java

Author: squinn
Date: Mon Mar 11 22:22:12 2013
New Revision: 1455350

URL: http://svn.apache.org/r1455350
Log:
Added SSVD optional parameters to spectral kmeans command line.

Modified:
    mahout/trunk/core/src/main/java/org/apache/mahout/clustering/spectral/kmeans/SpectralKMeansDriver.java

Modified: mahout/trunk/core/src/main/java/org/apache/mahout/clustering/spectral/kmeans/SpectralKMeansDriver.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/spectral/kmeans/SpectralKMeansDriver.java?rev=1455350&r1=1455349&r2=1455350&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/clustering/spectral/kmeans/SpectralKMeansDriver.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/clustering/spectral/kmeans/SpectralKMeansDriver.java Mon Mar 11 22:22:12 2013
@@ -51,6 +51,9 @@ import org.apache.mahout.math.hadoop.sto
 public class SpectralKMeansDriver extends AbstractJob {
 
 	public static final double OVERSHOOTMULTIPLIER = 2.0;
+	public static final int REDUCERS = 10;
+	public static final int BLOCKHEIGHT = 30000;
+	public static final int OVERSAMPLING = 15;
 
 	public static void main(String[] args) throws Exception {
 		ToolRunner.run(new SpectralKMeansDriver(), args);
@@ -70,6 +73,9 @@ public class SpectralKMeansDriver extend
 		addOption(DefaultOptionCreator.maxIterationsOption().create());
 		addOption(DefaultOptionCreator.overwriteOption().create());
 		addFlag("usessvd", "ssvd", "Uses SSVD as the eigensolver. Default is the Lanczos solver.");
+		addOption("ssvdreducers", "r", "Number of reducers for SSVD", String.valueOf(REDUCERS));
+		addOption("ssvdblockheight", "h", "Block height for SSVD", String.valueOf(BLOCKHEIGHT));
+		addOption("ssvdoversampling", "p", "Oversampling parameter for SSVD", String.valueOf(OVERSAMPLING));
 		
 		Map<String, List<String>> parsedArgs = parseArguments(arg0);
 		if (parsedArgs == null) {
@@ -90,11 +96,34 @@ public class SpectralKMeansDriver extend
 		
 		Path tempdir = new Path(getOption("tempDir"));
 		boolean ssvd = parsedArgs.containsKey("--usessvd");
-		
-		run(conf, input, output, numDims, clusters, measure, convergenceDelta, maxIterations, tempdir, ssvd);
+		if (ssvd) {
+		    int reducers = Integer.parseInt(getOption("ssvdreducers"));
+		    int blockheight = Integer.parseInt(getOption("ssvdblockheight"));
+		    int oversampling = Integer.parseInt(getOption("oversampling"));
+		    run(conf, input, output, numDims, clusters, measure, convergenceDelta,
+		            maxIterations, tempdir, true, reducers, blockheight, oversampling);
+		} else {
+		    run(conf, input, output, numDims, clusters, measure, convergenceDelta,
+		            maxIterations, tempdir, false);
+		}
 		
 		return 0;
 	}
+	
+	public static void run(
+	        Configuration conf,
+	        Path input,
+	        Path output,
+	        int numDims,
+	        int clusters,
+	        DistanceMeasure measure,
+	        double convergenceDelta,
+	        int maxIterations,
+	        Path tempDir,
+	        boolean ssvd) throws IOException, InterruptedException, ClassNotFoundException {
+	    run(conf, input, output, numDims, clusters, measure, convergenceDelta,
+	            maxIterations, tempDir, ssvd, REDUCERS, BLOCKHEIGHT, OVERSAMPLING);
+	}
 
   /**
    * Run the Spectral KMeans clustering on the supplied arguments
@@ -120,7 +149,10 @@ public class SpectralKMeansDriver extend
 		  double convergenceDelta,
 		  int maxIterations,
 		  Path tempDir,
-		  boolean ssvd)
+		  boolean ssvd,
+		  int numReducers,
+		  int blockHeight,
+		  int oversampling)
 				  throws IOException, InterruptedException, ClassNotFoundException {
     
 		Path outputCalc = new Path(tempDir, "calculations");
@@ -160,19 +192,15 @@ public class SpectralKMeansDriver extend
 					depConf, 
 					LPath, 
 					SSVDout, 
-					1000, // Vertical height of a q-block
+					blockHeight,
 					clusters, 
-					15, // Oversampling 
-					10);
+					oversampling, 
+					numReducers);
 			
 			solveIt.setComputeV(false); 
 			solveIt.setComputeU(true);
 			solveIt.setOverwrite(true);
 			solveIt.setQ(0);
-			
-			// May want to update SSVD documentation on this one: method doc
-			// says "false" is the default, yet it's set to true in the 
-			// variable definition.
 			//solveIt.setBroadcast(false);
 			solveIt.run();
 			data = new Path(solveIt.getUPath());