[mlpack-svn] r17174 - mlpack/trunk/src/mlpack/methods/pca
fastlab-svn at coffeetalk-1.cc.gatech.edu
fastlab-svn at coffeetalk-1.cc.gatech.edu
Thu Sep 11 13:24:47 EDT 2014
Author: marcus
Date: Thu Sep 11 13:24:46 2014
New Revision: 17174
Log:
Handle variance calculation with zero eigenvalues.
Modified:
mlpack/trunk/src/mlpack/methods/pca/pca.cpp
Modified: mlpack/trunk/src/mlpack/methods/pca/pca.cpp
==============================================================================
--- mlpack/trunk/src/mlpack/methods/pca/pca.cpp (original)
+++ mlpack/trunk/src/mlpack/methods/pca/pca.cpp Thu Sep 11 13:24:46 2014
@@ -9,6 +9,7 @@
#include <mlpack/core.hpp>
#include <iostream>
#include <complex>
+#include <algorithm>
using namespace std;
using namespace mlpack;
@@ -124,8 +125,12 @@
// Drop unnecessary rows.
data.shed_rows(newDimension, data.n_rows - 1);
+ // The svd method returns only non-zero eigenvalues so we have to calculate
+ // the right dimension before calculating the amount of variance retained.
+ double eigDim = std::min(newDimension - 1, (size_t) eigVal.n_elem - 1);
+
// Calculate the total amount of variance retained.
- return (sum(eigVal.subvec(0, newDimension - 1)) / sum(eigVal));
+ return (sum(eigVal.subvec(0, eigDim)) / sum(eigVal));
}
/**
More information about the mlpack-svn
mailing list