From d4409491d7bd81bb032320df24d84c0b8de32e4f Mon Sep 17 00:00:00 2001 From: Relintai Date: Wed, 8 Feb 2023 12:58:01 +0100 Subject: [PATCH] Fix warnings in PCAOld. --- mlpp/pca/pca_old.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/mlpp/pca/pca_old.cpp b/mlpp/pca/pca_old.cpp index 96fefed..fef43f3 100644 --- a/mlpp/pca/pca_old.cpp +++ b/mlpp/pca/pca_old.cpp @@ -25,23 +25,27 @@ std::vector> MLPPPCAOld::principalComponents() { X_normalized = data.meanCentering(inputSet); U_reduce.resize(svr_res.U.size()); for (int i = 0; i < k; i++) { - for (int j = 0; j < svr_res.U.size(); j++) { + for (uint32_t j = 0; j < svr_res.U.size(); j++) { U_reduce[j].push_back(svr_res.U[j][i]); } } Z = alg.matmult(alg.transpose(U_reduce), X_normalized); return Z; } + // Simply tells us the percentage of variance maintained. real_t MLPPPCAOld::score() { MLPPLinAlg alg; std::vector> X_approx = alg.matmult(U_reduce, Z); - real_t num, den = 0; - for (int i = 0; i < X_normalized.size(); i++) { + real_t num = 0; + real_t den = 0; + + for (uint32_t i = 0; i < X_normalized.size(); i++) { num += alg.norm_sq(alg.subtraction(X_normalized[i], X_approx[i])); } + num /= X_normalized.size(); - for (int i = 0; i < X_normalized.size(); i++) { + for (uint32_t i = 0; i < X_normalized.size(); i++) { den += alg.norm_sq(X_normalized[i]); } @@ -49,6 +53,7 @@ real_t MLPPPCAOld::score() { if (den == 0) { den += 1e-10; // For numerical sanity as to not recieve a domain error } + return 1 - num / den; }