[mlpack-svn] r10673 - mlpack/trunk/src/mlpack/methods/radical
fastlab-svn at coffeetalk-1.cc.gatech.edu
fastlab-svn at coffeetalk-1.cc.gatech.edu
Thu Dec 8 16:30:14 EST 2011
Author: niche
Date: 2011-12-08 16:30:14 -0500 (Thu, 08 Dec 2011)
New Revision: 10673
Modified:
mlpack/trunk/src/mlpack/methods/radical/radical.cpp
mlpack/trunk/src/mlpack/methods/radical/radical.hpp
mlpack/trunk/src/mlpack/methods/radical/radical_main.cpp
Log:
put Radical in namespace mlpack::radical and moved WhitenFeatureMajorMatrix out of Radical class but into mlpack::radical namespace
Modified: mlpack/trunk/src/mlpack/methods/radical/radical.cpp
===================================================================
--- mlpack/trunk/src/mlpack/methods/radical/radical.cpp 2011-12-08 21:10:03 UTC (rev 10672)
+++ mlpack/trunk/src/mlpack/methods/radical/radical.cpp 2011-12-08 21:30:14 UTC (rev 10673)
@@ -7,17 +7,20 @@
#include "radical.hpp"
-//using namespace arma;
using namespace std;
+using namespace arma;
+namespace mlpack {
+namespace radical {
+
Radical::Radical(double noiseStdDev, size_t nReplicates, size_t nAngles,
size_t nSweeps) :
noiseStdDev(noiseStdDev),
nReplicates(nReplicates),
nAngles(nAngles),
nSweeps(nSweeps),
- m(-1)
+ m(0)
{
// nothing to do here
}
@@ -34,34 +37,34 @@
}
-void Radical::CopyAndPerturb(arma::mat& matXNew, const arma::mat& matX) {
- matXNew = arma::repmat(matX, nReplicates, 1);
- matXNew = matXNew + noiseStdDev * arma::randn(matXNew.n_rows, matXNew.n_cols);
+void Radical::CopyAndPerturb(mat& matXNew, const mat& matX) {
+ matXNew = repmat(matX, nReplicates, 1);
+ matXNew = matXNew + noiseStdDev * randn(matXNew.n_rows, matXNew.n_cols);
}
-double Radical::Vasicek(const arma::vec& z) {
- arma::vec v = sort(z);
+double Radical::Vasicek(const vec& z) {
+ vec v = sort(z);
size_t nPoints = v.n_elem;
- arma::vec logs = arma::log(v.subvec(m, nPoints - 1) - v.subvec(0, nPoints - 1 - m));
- return (double) arma::sum(logs);
+ vec logs = log(v.subvec(m, nPoints - 1) - v.subvec(0, nPoints - 1 - m));
+ return (double) sum(logs);
}
-double Radical::DoRadical2D(const arma::mat& matX) {
- arma::mat matXMod;
+double Radical::DoRadical2D(const mat& matX) {
+ mat matXMod;
CopyAndPerturb(matXMod, matX);
double theta;
double value;
- arma::mat matJacobi(2,2);
- arma::mat candidateY;
+ mat matJacobi(2,2);
+ mat candidateY;
double thetaOpt = 0;
double valueOpt = 1e99;
for(size_t i = 0; i < nAngles; i++) {
- theta = ((double) i) / ((double) nAngles) * arma::math::pi() / 2;
+ theta = ((double) i) / ((double) nAngles) * math::pi() / 2;
matJacobi(0,0) = cos(theta);
matJacobi(0,1) = sin(theta);
matJacobi(1,0) = -sin(theta);
@@ -79,7 +82,7 @@
}
-void Radical::DoRadical(const arma::mat& matX, arma::mat& matY, arma::mat& matW) {
+void Radical::DoRadical(const mat& matX, mat& matY, mat& matW) {
// matX is nPoints by nDims (although less intuitive than columns being points,
// and although this is the transpose of the ICA literature, this choice is
@@ -93,8 +96,8 @@
const size_t nDims = matX.n_cols;
const size_t nPoints = matX.n_rows;
- arma::mat matXWhitened;
- arma::mat matWhitening;
+ mat matXWhitened;
+ mat matWhitening;
WhitenFeatureMajorMatrix(matX, matXWhitened, matWhitening);
// in the RADICAL code, they do not copy and perturb initially, although the
@@ -103,18 +106,18 @@
//GeneratePerturbedX(X, X);
matY = matXWhitened;
- matW = arma::eye(nDims, nDims);
+ matW = eye(nDims, nDims);
- arma::mat matYSubspace(nPoints, 2);
+ mat matYSubspace(nPoints, 2);
for(size_t sweepNum = 0; sweepNum < nSweeps; sweepNum++) {
for(size_t i = 0; i < nDims - 1; i++) {
for(size_t j = i + 1; j < nDims; j++) {
matYSubspace.col(0) = matY.col(i);
matYSubspace.col(1) = matY.col(j);
- arma::mat matWSubspace;
+ mat matWSubspace;
double thetaOpt = DoRadical2D(matYSubspace);
- arma::mat matJ = arma::eye(nDims, nDims);
+ mat matJ = eye(nDims, nDims);
matJ(i,i) = cos(thetaOpt);
matJ(i,j) = sin(thetaOpt);
matJ(j,i) = -sin(thetaOpt);
@@ -126,16 +129,20 @@
}
// the final transpose provides W in the typical form from the ICA literature
- matW = arma::trans(matWhitening * matW);
+ matW = trans(matWhitening * matW);
}
-void Radical::WhitenFeatureMajorMatrix(const arma::mat& matX,
- arma::mat& matXWhitened,
- arma::mat& matWhitening) {
- arma::mat matU, matV;
- arma::vec s;
- arma::svd(matU, s, matV, cov(matX));
- matWhitening = matU * arma::diagmat(1 / sqrt(s)) * arma::trans(matV);
+void WhitenFeatureMajorMatrix(const mat& matX,
+ mat& matXWhitened,
+ mat& matWhitening) {
+ mat matU, matV;
+ vec s;
+ svd(matU, s, matV, cov(matX));
+ matWhitening = matU * diagmat(1 / sqrt(s)) * trans(matV);
matXWhitened = matX * matWhitening;
}
+
+
+}; // namespace radical
+}; // namespace mlpack
Modified: mlpack/trunk/src/mlpack/methods/radical/radical.hpp
===================================================================
--- mlpack/trunk/src/mlpack/methods/radical/radical.hpp 2011-12-08 21:10:03 UTC (rev 10672)
+++ mlpack/trunk/src/mlpack/methods/radical/radical.hpp 2011-12-08 21:30:14 UTC (rev 10673)
@@ -14,8 +14,9 @@
#include <stdio.h>
#include<float.h>
-using namespace std;
-
+namespace mlpack {
+namespace radical {
+
class Radical {
public:
Radical(double noiseStdDev, size_t nReplicates, size_t nAngles,
@@ -29,10 +30,6 @@
double Vasicek(const arma::vec& x);
double DoRadical2D(const arma::mat& matX);
void DoRadical(const arma::mat& matX, arma::mat& matY, arma::mat& matW);
-
- static void WhitenFeatureMajorMatrix(const arma::mat& matX,
- arma::mat& matXWhitened,
- arma::mat& matWhitening);
private:
/**
@@ -64,4 +61,13 @@
};
+
+ void WhitenFeatureMajorMatrix(const arma::mat& matX,
+ arma::mat& matXWhitened,
+ arma::mat& matWhitening);
+
+
+}; // namespace radical
+}; // namespace mlpack
+
#endif
Modified: mlpack/trunk/src/mlpack/methods/radical/radical_main.cpp
===================================================================
--- mlpack/trunk/src/mlpack/methods/radical/radical_main.cpp 2011-12-08 21:10:03 UTC (rev 10672)
+++ mlpack/trunk/src/mlpack/methods/radical/radical_main.cpp 2011-12-08 21:30:14 UTC (rev 10673)
@@ -29,12 +29,8 @@
*/
- //Radical rad;
- //rad.Init(0.01, 10, 200, 1, X);
+ mlpack::radical::Radical rad(0.01, 10, 200, 1);
- Radical rad(0.01, 10, 200, 1);
-
-
mat Y;
mat W;
rad.DoRadical(X, Y, W);
@@ -43,7 +39,7 @@
mat matXWhitened;
mat matWhitening;
- Radical::WhitenFeatureMajorMatrix(X, matXWhitened, matWhitening);
+ mlpack::radical::WhitenFeatureMajorMatrix(X, matXWhitened, matWhitening);
double val_init = 0;
for(size_t i = 0; i < nDims; i++) {
More information about the mlpack-svn
mailing list