13 #ifndef MLPACK_METHODS_RANDOMIZED_SVD_RANDOMIZED_SVD_HPP
14 #define MLPACK_METHODS_RANDOMIZED_SVD_RANDOMIZED_SVD_HPP
88 const size_t iteratedPower = 0,
89 const size_t maxIterations = 2,
90 const size_t rank = 0,
91 const double eps = 1e-7);
104 const size_t maxIterations = 2,
105 const double eps = 1e-7);
117 void Apply(
const arma::sp_mat& data,
150 template<
typename MatType>
158 if (iteratedPower == 0)
159 iteratedPower = rank + 2;
161 arma::mat R, Q, Qdata;
164 if (data.n_cols >= data.n_rows)
166 R = arma::randn<arma::mat>(data.n_rows, iteratedPower);
167 Q = (data.t() * R) - arma::repmat(arma::trans(R.t() * rowMean),
172 R = arma::randn<arma::mat>(data.n_cols, iteratedPower);
173 Q = (data * R) - (rowMean * (arma::ones(1, data.n_cols) * R));
178 if (maxIterations == 0)
180 arma::qr_econ(Q, v, Q);
188 for (
size_t i = 0; i < maxIterations; ++i)
190 if (data.n_cols >= data.n_rows)
192 Q = (data * Q) - rowMean * (arma::ones(1, data.n_cols) * Q);
194 Q = (data.t() * Q) - arma::repmat(rowMean.t() * Q, data.n_cols, 1);
198 Q = (data.t() * Q) - arma::repmat(rowMean.t() * Q, data.n_cols, 1);
200 Q = (data * Q) - (rowMean * (arma::ones(1, data.n_cols) * Q));
207 if (i < (maxIterations - 1))
213 arma::qr_econ(Q, v, Q);
220 if (data.n_cols >= data.n_rows)
222 Qdata = (data * Q) - rowMean * (arma::ones(1, data.n_cols) * Q);
223 arma::svd_econ(u, s, v, Qdata);
228 Qdata = (Q.t() * data) - arma::repmat(Q.t() * rowMean, 1, data.n_cols);
229 arma::svd_econ(u, s, v, Qdata);
251 size_t iteratedPower;
254 size_t maxIterations;