00001 00024 #ifndef __MLPACK_METHODS_RADICAL_RADICAL_HPP 00025 #define __MLPACK_METHODS_RADICAL_RADICAL_HPP 00026 00027 #include <mlpack/core.hpp> 00028 00029 namespace mlpack { 00030 namespace radical { 00031 00053 class Radical 00054 { 00055 public: 00069 Radical(const double noiseStdDev = 0.175, 00070 const size_t replicates = 30, 00071 const size_t angles = 150, 00072 const size_t sweeps = 0, 00073 const size_t m = 0); 00074 00084 void DoRadical(const arma::mat& matX, arma::mat& matY, arma::mat& matW); 00085 00092 double Vasicek(arma::vec& x) const; 00093 00099 void CopyAndPerturb(arma::mat& xNew, const arma::mat& x) const; 00100 00102 double DoRadical2D(const arma::mat& matX); 00103 00105 double NoiseStdDev() const { return noiseStdDev; } 00107 double& NoiseStdDev() { return noiseStdDev; } 00108 00110 size_t Replicates() const { return replicates; } 00112 size_t& Replicates() { return replicates; } 00113 00115 size_t Angles() const { return angles; } 00117 size_t& Angles() { return angles; } 00118 00120 size_t Sweeps() const { return sweeps; } 00122 size_t& Sweeps() { return sweeps; } 00123 00124 private: 00127 double noiseStdDev; 00128 00130 size_t replicates; 00131 00133 size_t angles; 00134 00137 size_t sweeps; 00138 00140 size_t m; 00141 00143 arma::mat perturbed; 00145 arma::mat candidate; 00146 }; 00147 00148 void WhitenFeatureMajorMatrix(const arma::mat& matX, 00149 arma::mat& matXWhitened, 00150 arma::mat& matWhitening); 00151 00152 }; // namespace radical 00153 }; // namespace mlpack 00154 00155 #endif