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 00083 template<typename InitializationRule = RandomInitialization, 00084 typename WUpdateRule = WMultiplicativeDistanceRule, 00085 typename HUpdateRule = HMultiplicativeDistanceRule> 00086 class NMF 00087 { 00088 public: 00108 NMF(const size_t maxIterations = 10000, 00109 const double minResidue = 1e-10, 00110 const InitializationRule initializeRule = InitializationRule(), 00111 const WUpdateRule wUpdate = WUpdateRule(), 00112 const HUpdateRule hUpdate = HUpdateRule()); 00113 00122 template<typename MatType> 00123 void Apply(const MatType& V, 00124 const size_t r, 00125 arma::mat& W, 00126 arma::mat& H) const; 00127 00128 private: 00130 size_t maxIterations; 00132 double minResidue; 00134 InitializationRule initializeRule; 00136 WUpdateRule wUpdate; 00138 HUpdateRule hUpdate; 00139 00140 public: 00142 size_t MaxIterations() const { return maxIterations; } 00144 size_t& MaxIterations() { return maxIterations; } 00146 double MinResidue() const { return minResidue; } 00148 double& MinResidue() { return minResidue; } 00150 const InitializationRule& InitializeRule() const { return initializeRule; } 00152 InitializationRule& InitializeRule() { return initializeRule; } 00154 const WUpdateRule& WUpdate() const { return wUpdate; } 00156 WUpdateRule& WUpdate() { return wUpdate; } 00158 const HUpdateRule& HUpdate() const { return hUpdate; } 00160 HUpdateRule& HUpdate() { return hUpdate; } 00161 00162 }; // class NMF 00163 00164 }; // namespace nmf 00165 }; // namespace mlpack 00166 00167 // Include implementation. 00168 #include "nmf_impl.hpp" 00169 00170 #endif