mlpack 3.4.2
quic_svd_method.hpp
Go to the documentation of this file.
1
14#ifndef MLPACK_METHODS_PCA_DECOMPOSITION_POLICIES_QUIC_SVD_METHOD_HPP
15#define MLPACK_METHODS_PCA_DECOMPOSITION_POLICIES_QUIC_SVD_METHOD_HPP
16
17#include <mlpack/prereqs.hpp>
19
20namespace mlpack {
21namespace pca {
22
27{
28 public:
35 QUICSVDPolicy(const double epsilon = 0.03, const double delta = 0.1) :
36 epsilon(epsilon),
37 delta(delta)
38 {
39 /* Nothing to do here */
40 }
41
53 void Apply(const arma::mat& data,
54 const arma::mat& centeredData,
55 arma::mat& transformedData,
56 arma::vec& eigVal,
57 arma::mat& eigvec,
58 const size_t /* rank */)
59 {
60 // This matrix will store the right singular values; we do not need them.
61 arma::mat v, sigma;
62
63 // Do singular value decomposition using the QUIC-SVD algorithm.
64 svd::QUIC_SVD quicsvd(centeredData, eigvec, v, sigma, epsilon, delta);
65
66 // Now we must square the singular values to get the eigenvalues.
67 // In addition we must divide by the number of points, because the
68 // covariance matrix is X * X' / (N - 1).
69 eigVal = arma::pow(arma::diagvec(sigma), 2) / (data.n_cols - 1);
70
71 // Project the samples to the principals.
72 transformedData = arma::trans(eigvec) * centeredData;
73 }
74
76 double Epsilon() const { return epsilon; }
78 double& Epsilon() { return epsilon; }
79
81 double Delta() const { return delta; }
83 double& Delta() { return delta; }
84
85 private:
87 double epsilon;
88
90 double delta;
91};
92
93} // namespace pca
94} // namespace mlpack
95
96#endif
Implementation of the QUIC-SVD policy.
void Apply(const arma::mat &data, const arma::mat &centeredData, arma::mat &transformedData, arma::vec &eigVal, arma::mat &eigvec, const size_t)
Apply Principal Component Analysis to the provided data set using the QUIC-SVD method.
QUICSVDPolicy(const double epsilon=0.03, const double delta=0.1)
Use QUIC-SVD method to perform the principal components analysis (PCA).
double & Epsilon()
Modify the error tolerance fraction for calculated subspace.
double & Delta()
Modify the cumulative probability for Monte Carlo error lower bound.
double Delta() const
Get the cumulative probability for Monte Carlo error lower bound.
double Epsilon() const
Get the error tolerance fraction for calculated subspace.
QUIC-SVD is a matrix factorization technique, which operates in a subspace such that A's approximatio...
Definition: quic_svd.hpp:54
Linear algebra utility functions, generally performed on matrices or vectors.
Definition: cv.hpp:1
The core includes that mlpack expects; standard C++ includes and Armadillo.