From 1a89e795741f21fd9acbdd78382ac017fb40aead Mon Sep 17 00:00:00 2001 From: conrad Date: Thu, 29 Aug 2019 00:41:49 +1000 Subject: [PATCH 1/2] avoid writing zero via sparse matrix iterator --- .../methods/cf/normalization/z_score_normalization.hpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/mlpack/methods/cf/normalization/z_score_normalization.hpp b/src/mlpack/methods/cf/normalization/z_score_normalization.hpp index e65841d77a..bd3f7bd23a 100644 --- a/src/mlpack/methods/cf/normalization/z_score_normalization.hpp +++ b/src/mlpack/methods/cf/normalization/z_score_normalization.hpp @@ -92,11 +92,14 @@ class ZScoreNormalization arma::sp_mat::iterator it_end = cleanedData.end(); for (; it != it_end; ++it) { - *it = (*it - mean) / stddev; + double tmp = (*it - mean) / stddev; + // The algorithm omits rating of zero. If normalized rating equals zero, // it is set to the smallest positive double value. - if (*it == 0) - *it = std::numeric_limits::min(); + if (tmp == 0) + tmp = std::numeric_limits::min(); + + *it = tmp; } } From 23204880a328027b456d68646115d47db99ca84e Mon Sep 17 00:00:00 2001 From: conrad Date: Thu, 29 Aug 2019 00:44:49 +1000 Subject: [PATCH 2/2] added TODO to consider using .transform() instead of iterators --- src/mlpack/methods/cf/normalization/z_score_normalization.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/mlpack/methods/cf/normalization/z_score_normalization.hpp b/src/mlpack/methods/cf/normalization/z_score_normalization.hpp index bd3f7bd23a..9e0d7f43d9 100644 --- a/src/mlpack/methods/cf/normalization/z_score_normalization.hpp +++ b/src/mlpack/methods/cf/normalization/z_score_normalization.hpp @@ -88,6 +88,8 @@ class ZScoreNormalization } // Subtract mean from existing rating and divide it by stddev. + // TODO: consider using spmat::transform() instead of spmat iterators + // TODO: http://arma.sourceforge.net/docs.html#transform arma::sp_mat::iterator it = cleanedData.begin(); arma::sp_mat::iterator it_end = cleanedData.end(); for (; it != it_end; ++it)