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());


Reply via email to