[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