mlpack  2.0.1
sparse_coding.hpp
Go to the documentation of this file.
1 
15 #ifndef __MLPACK_METHODS_SPARSE_CODING_SPARSE_CODING_HPP
16 #define __MLPACK_METHODS_SPARSE_CODING_SPARSE_CODING_HPP
17 
18 #include <mlpack/core.hpp>
20 
21 // Include our three simple dictionary initializers.
22 #include "nothing_initializer.hpp"
24 #include "random_initializer.hpp"
25 
26 namespace mlpack {
27 namespace sparse_coding {
28 
118 {
119  public:
146  template<typename DictionaryInitializer = DataDependentRandomInitializer>
147  SparseCoding(const arma::mat& data,
148  const size_t atoms,
149  const double lambda1,
150  const double lambda2 = 0,
151  const size_t maxIterations = 0,
152  const double objTolerance = 0.01,
153  const double newtonTolerance = 1e-6,
154  const DictionaryInitializer& initializer =
155  DictionaryInitializer());
156 
173  SparseCoding(const size_t atoms,
174  const double lambda1,
175  const double lambda2 = 0,
176  const size_t maxIterations = 0,
177  const double objTolerance = 0.01,
178  const double newtonTolerance = 1e-6);
179 
183  template<typename DictionaryInitializer = DataDependentRandomInitializer>
184  void Train(const arma::mat& data,
185  const DictionaryInitializer& initializer =
186  DictionaryInitializer());
187 
195  void Encode(const arma::mat& data, arma::mat& codes);
196 
208  double OptimizeDictionary(const arma::mat& data,
209  const arma::mat& codes,
210  const arma::uvec& adjacencies);
211 
215  void ProjectDictionary();
216 
220  double Objective(const arma::mat& data, const arma::mat& codes) const;
221 
223  const arma::mat& Dictionary() const { return dictionary; }
225  arma::mat& Dictionary() { return dictionary; }
226 
228  size_t Atoms() const { return atoms; }
230  size_t& Atoms() { return atoms; }
231 
233  double Lambda1() const { return lambda1; }
235  double& Lambda1() { return lambda1; }
236 
238  double Lambda2() const { return lambda2; }
240  double& Lambda2() { return lambda2; }
241 
243  size_t MaxIterations() const { return maxIterations; }
245  size_t& MaxIterations() { return maxIterations; }
246 
248  double ObjTolerance() const { return objTolerance; }
250  double& ObjTolerance() { return objTolerance; }
251 
253  double NewtonTolerance() const { return newtonTolerance; }
255  double& NewtonTolerance() { return newtonTolerance; }
256 
258  template<typename Archive>
259  void Serialize(Archive& ar, const unsigned int /* version */);
260 
261  private:
263  size_t atoms;
264 
266  arma::mat dictionary;
267 
269  double lambda1;
271  double lambda2;
272 
276  double objTolerance;
279 };
280 
281 } // namespace sparse_coding
282 } // namespace mlpack
283 
284 // Include implementation.
285 #include "sparse_coding_impl.hpp"
286 
287 #endif
size_t Atoms() const
Access the number of atoms.
size_t MaxIterations() const
Get the maximum number of iterations.
Linear algebra utility functions, generally performed on matrices or vectors.
void ProjectDictionary()
Project each atom of the dictionary back onto the unit ball, if necessary.
double Lambda1() const
Access the L1 regularization term.
double newtonTolerance
Tolerance for Newton&#39;s method (dictionary training).
const arma::mat & Dictionary() const
Access the dictionary.
double & Lambda1()
Modify the L1 regularization term.
arma::mat & Dictionary()
Modify the dictionary.
double Lambda2() const
Access the L2 regularization term.
SparseCoding(const arma::mat &data, const size_t atoms, const double lambda1, const double lambda2=0, const size_t maxIterations=0, const double objTolerance=0.01, const double newtonTolerance=1e-6, const DictionaryInitializer &initializer=DictionaryInitializer())
Set the parameters to SparseCoding.
double ObjTolerance() const
Get the objective tolerance.
double objTolerance
Tolerance for main objective.
void Train(const arma::mat &data, const DictionaryInitializer &initializer=DictionaryInitializer())
Train the sparse coding model on the given dataset.
double lambda2
l2 regularization term.
An implementation of Sparse Coding with Dictionary Learning that achieves sparsity via an l1-norm reg...
arma::mat dictionary
Dictionary (columns are atoms).
double & ObjTolerance()
Modify the objective tolerance.
Include all of the base components required to write MLPACK methods, and the main MLPACK Doxygen docu...
void Serialize(Archive &ar, const unsigned int)
Serialize the sparse coding model.
size_t & Atoms()
Modify the number of atoms.
double lambda1
l1 regularization term.
double & NewtonTolerance()
Modify the tolerance for Newton&#39;s method (dictionary optimization step).
size_t & MaxIterations()
Modify the maximum number of iterations.
double NewtonTolerance() const
Get the tolerance for Newton&#39;s method (dictionary optimization step).
double Objective(const arma::mat &data, const arma::mat &codes) const
Compute the objective function.
double & Lambda2()
Modify the L2 regularization term.
double OptimizeDictionary(const arma::mat &data, const arma::mat &codes, const arma::uvec &adjacencies)
Learn dictionary via Newton method based on Lagrange dual.
size_t maxIterations
Maximum number of iterations during training.
void Encode(const arma::mat &data, arma::mat &codes)
Sparse code each point in the given dataset via LARS, using the current dictionary and store the enco...