natural pca::reduced(const vec& eig, real percent) { if( percent < 0 || percent > 1 ) throw error("variance must be in [0, 1]"); vec c = cumul(eig); const natural n = eig.rows(); for(natural i = 0; i < n; ++i) { if( c(i) > percent ) return i; } assert(false); return n; }
item get_cumulative() { item cumul(0, 0); for(auto& wpi : members) { auto pi = wpi.lock(); if (pi) { cumul.current += pi->current; cumul.total += pi->total; } } return cumul; }
vec pca::cumul() const { return cumul( dev() ); }