MLPACK
1.0.4
|
00001 00023 #ifndef __MLPACK_METHODS_NMF_NMF_HPP 00024 #define __MLPACK_METHODS_NMF_NMF_HPP 00025 00026 #include <mlpack/core.hpp> 00027 #include "mult_dist_update_rules.hpp" 00028 #include "random_init.hpp" 00029 00030 namespace mlpack { 00031 namespace nmf { 00032 00081 template<typename InitializationRule = RandomInitialization, 00082 typename WUpdateRule = WMultiplicativeDistanceRule, 00083 typename HUpdateRule = HMultiplicativeDistanceRule> 00084 class NMF 00085 { 00086 public: 00106 NMF(const size_t maxIterations = 10000, 00107 const double minResidue = 1e-10, 00108 const InitializationRule initializeRule = InitializationRule(), 00109 const WUpdateRule wUpdate = WUpdateRule(), 00110 const HUpdateRule hUpdate = HUpdateRule()); 00111 00120 void Apply(const arma::mat& V, const size_t r, arma::mat& W, arma::mat& H) 00121 const; 00122 00123 private: 00125 size_t maxIterations; 00127 double minResidue; 00129 InitializationRule initializeRule; 00131 WUpdateRule wUpdate; 00133 HUpdateRule hUpdate; 00134 00135 public: 00137 size_t MaxIterations() const { return maxIterations; } 00139 size_t& MaxIterations() { return maxIterations; } 00141 double MinResidue() const { return minResidue; } 00143 double& MinResidue() { return minResidue; } 00145 const InitializationRule& InitializeRule() const { return initializeRule; } 00147 InitializationRule& InitializeRule() { return initializeRule; } 00149 const WUpdateRule& WUpdate() const { return wUpdate; } 00151 WUpdateRule& WUpdate() { return wUpdate; } 00153 const HUpdateRule& HUpdate() const { return hUpdate; } 00155 HUpdateRule& HUpdate() { return hUpdate; } 00156 00157 }; // class NMF 00158 00159 }; // namespace nmf 00160 }; // namespace mlpack 00161 00162 // Include implementation. 00163 #include "nmf_impl.hpp" 00164 00165 #endif