Fix edge case for similarly-correlated dimensions.

This commit is contained in:
Ryan Curtin
2020-12-13 17:31:01 -05:00
parent ac500373a8
commit d6d97018dd
+10 -7
View File
@@ -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;
}
}