[mlpack-svn] r10693 - mlpack/trunk/src/mlpack/methods/radical

fastlab-svn at coffeetalk-1.cc.gatech.edu fastlab-svn at coffeetalk-1.cc.gatech.edu
Fri Dec 9 23:47:48 EST 2011


Author: niche
Date: 2011-12-09 23:47:48 -0500 (Fri, 09 Dec 2011)
New Revision: 10693

Modified:
   mlpack/trunk/src/mlpack/methods/radical/radical_main.cpp
Log:
you can now set the input and output filenames, as well as the options, as paramters

Modified: mlpack/trunk/src/mlpack/methods/radical/radical_main.cpp
===================================================================
--- mlpack/trunk/src/mlpack/methods/radical/radical_main.cpp	2011-12-10 04:18:14 UTC (rev 10692)
+++ mlpack/trunk/src/mlpack/methods/radical/radical_main.cpp	2011-12-10 04:47:48 UTC (rev 10693)
@@ -4,107 +4,79 @@
  *
  * Executable for RADICAL
  */
+
+#include <mlpack/core.hpp>
 #include <armadillo>
 #include "radical.hpp"
 
 using namespace std;
 using namespace arma;
 
+PROGRAM_INFO("RADICAL", "An implementation of RADICAL, a method for independent "
+	     "component analysis (ICA)");
 
+PARAM_STRING_REQ("X", "Input dataset filename for ICA", "");
+PARAM_STRING_REQ("Y", "Independent components filename", "");
+PARAM_STRING_REQ("W", "Unmixing matrix filename", "");
 
-void test() {
-  
-  mat X;
-  X.load("/net/hu15/niche/matlab/toolboxes/RADICAL/examples/data_3d_mixed");
-  
-  mlpack::radical::Radical rad(0.175, 5, 100, X.n_rows - 1);
-  mat Y;
-  mat W;
-  
-  rad.DoRadical(X, Y, W);
-  
-  
-  mat YT = trans(Y);
-  double valEst = 0;
-  for(u32 i = 0; i < YT.n_cols; i++) {
-    vec Yi = vec(YT.col(i));
-    valEst += rad.Vasicek(Yi);
-  }
-  printf("objective(estimate) = %f\n", valEst);
+PARAM_DOUBLE("noise_std_dev", "Standard deviation of Gaussian noise", "",
+	     0.175);
+PARAM_INT("n_replicates", "Number of Gaussian-perturbed replicates to use "
+	  "(per point) in Radical2D", "",
+	  30);
+PARAM_INT("n_angles", "Number of angles to consider in brute-force search "
+	  "during Radical2D", "",
+	  150);
+PARAM_INT("n_sweeps", "Number of sweeps (each sweep calls Radical2D once for "
+	  "each pair of dimensions", "",
+	  0);
 
 
+int main(int argc, char* argv[]) {
+
+  // Handle parameters
+  CLI::ParseCommandLine(argc, argv);
   
+  // load the data
+  const std::string matXFilename = CLI::GetParam<std::string>("X");
+  mat matX;
+  data::Load(matXFilename, matX);
   
-  mat S;
-  S.load("/net/hu15/niche/matlab/toolboxes/RADICAL/examples/data_3d_ind");
-  rad.DoRadical(S, Y, W);
-  YT = trans(Y);
-  double valBest = 0;
-  for(u32 i = 0; i < YT.n_cols; i++) {
-    vec Yi = vec(YT.col(i));
-    valBest += rad.Vasicek(Yi);
+  
+  // load parameters
+  double noiseStdDev = CLI::GetParam<double>("noise_std_dev");
+  u32 nReplicates = CLI::GetParam<int>("n_replicates");
+  u32 nAngles = CLI::GetParam<int>("n_angles");
+  u32 nSweeps = CLI::GetParam<int>("n_sweeps");
+  if(nSweeps == 0) {
+    nSweeps = matX.n_rows - 1;
   }
-  printf("objective(sources) = %f\n", valBest);
   
+  // run RADICAL
+  mlpack::radical::Radical rad(noiseStdDev, nReplicates, nAngles, nSweeps);
+  mat matY;
+  mat matW;
+  rad.DoRadical(matX, matY, matW);
   
+  // save results
+  const std::string matYFilename = CLI::GetParam<std::string>("Y");
+  data::Save(matYFilename, matY);
   
+  const std::string matWFilename = CLI::GetParam<std::string>("W");
+  data::Save(matWFilename, matW);
   
-    
-}
-
-
-
-
-
-int main(int argc, char* argv[]) {
-  test();
   
-  return 1;
-  
-  size_t nPoints = 1000;
-  size_t nDims = 2;
-
-  mat S = randu(nDims, nPoints);
-  //S.print("S");
-  mat Mixing = randn(nDims, nDims);
-  Mixing.print("Mixing");
-  mat X = Mixing * S;
-  
   /*
-  mat U, V;
-  vec s;
-  svd(U, s, V, cov(X));
-  mat Whitening = U * diagmat(pow(s, -0.5)) * trans(V);
-  X = X * Whitening;
+  // compute and print objective  
+  mat matYT = trans(matY);
+  double valEst = 0;
+  for(u32 i = 0; i < matYT.n_cols; i++) {
+    vec Yi = vec(matYT.col(i));
+    valEst += rad.Vasicek(Yi);
+  }
+  printf("objective(estimate) = %f\n", valEst);
   */
-
   
-  mlpack::radical::Radical rad(0.01, 10, 200, 1);
-
-  mat Y;
-  mat W;
-  rad.DoRadical(X, Y, W);
   
-  W.print("W");
   
-  X = trans(X);
-  mat XWhitened;
-  mat Whitening;
-  mlpack::radical::WhitenFeatureMajorMatrix(X, XWhitened, Whitening);
-  
-  double val_init = 0;
-  for(size_t i = 0; i < nDims; i++) {
-    //val_init += rad.Vasicek(XWhitened.col(i));
-  }
-  printf("initial objective value: %f\n", val_init);
-  
-  Y = trans(Y);
-  double val_final = 0;
-  for(size_t i = 0; i < nDims; i++) {
-    //val_final += rad.Vasicek(Y.col(i));
-  }
-  printf("final objective value: %f\n", val_final);
-  printf("improvement: %f\n", val_init - val_final);
-
-
 }




More information about the mlpack-svn mailing list