Audit finding
- ID:
AUD-016
- Status: Verified defect
- Severity: High
- Confidence: High
- Audited revision:
2f479320d805a1f9f35ebe4afaaeeded48913a94
Problem
Linear and polynomial regression call QrDecomposition::Decompose() but discard its Boolean result before back substitution. Constant/collinear feature columns and repeated abscissae reach zero-diagonal triangular solves. Their void Fit() APIs cannot report failure.
Sources:
|
qr.Decompose(X_design); |
|
coefficients = qr.SolveLeastSquares(y); |
|
} |
|
|
|
template<typename T, std::size_t Samples, std::size_t Features> |
|
OPTIMIZE_FOR_SPEED |
|
T |
|
LinearRegression<T, Samples, Features>::Predict(const InputMatrix& X) const |
|
{ |
|
T result = coefficients.at(0, 0); |
|
|
|
for (size_t i = 0; i < Features; ++i) |
|
result += X.at(i, 0) * coefficients.at(i + 1, 0); |
|
|
|
return result; |
|
} |
|
|
|
template<typename T, std::size_t Samples, std::size_t Features> |
|
const typename LinearRegression<T, Samples, Features>::CoefficientsMatrix& LinearRegression<T, Samples, Features>::Coefficients() const |
|
qr.Decompose(v); |
|
coefficients = qr.SolveLeastSquares(y); |
|
} |
|
|
|
template<typename T, std::size_t Samples, std::size_t Degree> |
|
T PolynomialFitting<T, Samples, Degree>::Predict(T xVal) const |
|
{ |
|
T acc = coefficients.at(Degree, 0); |
|
for (std::size_t j = Degree; j > 0; --j) |
|
acc = acc * xVal + coefficients.at(j - 1, 0); |
|
return acc; |
|
} |
|
|
|
template<typename T, std::size_t Samples, std::size_t Degree> |
|
const typename PolynomialFitting<T, Samples, Degree>::CoefficientsVector& |
|
PolynomialFitting<T, Samples, Degree>::Coefficients() const |
|
{ |
|
return coefficients; |
Acceptance criteria
Audit finding
AUD-0162f479320d805a1f9f35ebe4afaaeeded48913a94Problem
Linear and polynomial regression call
QrDecomposition::Decompose()but discard its Boolean result before back substitution. Constant/collinear feature columns and repeated abscissae reach zero-diagonal triangular solves. Theirvoid Fit()APIs cannot report failure.Sources:
numerical-toolbox-cpp/numerical/estimators/offline/LinearRegression.hpp
Lines 48 to 66 in 2f47932
numerical-toolbox-cpp/numerical/estimators/offline/PolynomialFitting.hpp
Lines 47 to 64 in 2f47932
Acceptance criteria
Fit()exposes explicit success/failure or returns an optional result.