From d6d97018dd5ec0e2e9152c700e7e536f2f6942eb Mon Sep 17 00:00:00 2001 From: Ryan Curtin Date: Sun, 13 Dec 2020 17:31:01 -0500 Subject: [PATCH] Fix edge case for similarly-correlated dimensions. --- src/mlpack/methods/lars/lars.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/mlpack/methods/lars/lars.cpp b/src/mlpack/methods/lars/lars.cpp index b86c361a3f..03612406fc 100644 --- a/src/mlpack/methods/lars/lars.cpp +++ b/src/mlpack/methods/lars/lars.cpp @@ -366,13 +366,16 @@ double LARS::Train(const arma::mat& matX, if (isActive[ind] || isIgnored[ind]) continue; - double dirCorr = dot(dataRef.col(ind), yHatDirection); - double val1 = (maxCorr - corr(ind)) / (normalization - dirCorr); - double val2 = (maxCorr + corr(ind)) / (normalization + dirCorr); - if ((val1 > 0) && (val1 < gamma)) - gamma = val1; - if ((val2 > 0) && (val2 < gamma)) - gamma = val2; + const double dirCorr = dot(dataRef.col(ind), yHatDirection); + const double val1 = (maxCorr - corr(ind)) / (normalization - dirCorr); + const double val2 = (maxCorr + corr(ind)) / (normalization + dirCorr); + if ((val1 > 0.0) && (val1 < gamma)) + gamma = val1; + if ((val2 > 0.0) && (val2 < gamma)) + gamma = val2; + // Handle edge case where the largest actually is equal to 0. + if (std::max(val1, val2) == 0.0) + gamma = 0.0; } }