[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