MCPcopy Create free account
hub / github.com/catboost/catboost / LDLDecomposition

Function LDLDecomposition

library/cpp/linear_regression/linear_regression.cpp:197–238  ·  view source on GitHub ↗

LDL matrix decomposition, see http://en.wikipedia.org/wiki/Cholesky_decomposition#LDL_decomposition_2

Source from the content-addressed store, hash-verified

195namespace {
196 // LDL matrix decomposition, see http://en.wikipedia.org/wiki/Cholesky_decomposition#LDL_decomposition_2
197 bool LDLDecomposition(const TVector<double>& linearizedOLSMatrix,
198 const double regularizationThreshold,
199 const double regularizationParameter,
200 TVector<double>& decompositionTrace,
201 TVector<TVector<double>>& decompositionMatrix) {
202 const size_t featuresCount = decompositionTrace.size();
203
204 size_t olsMatrixElementIdx = 0;
205 for (size_t rowNumber = 0; rowNumber < featuresCount; ++rowNumber) {
206 double& decompositionTraceElement = decompositionTrace[rowNumber];
207 decompositionTraceElement = linearizedOLSMatrix[olsMatrixElementIdx] + regularizationParameter;
208
209 TVector<double>& decompositionRow = decompositionMatrix[rowNumber];
210 for (size_t i = 0; i < rowNumber; ++i) {
211 decompositionTraceElement -= decompositionRow[i] * decompositionRow[i] * decompositionTrace[i];
212 }
213
214 if (fabs(decompositionTraceElement) < regularizationThreshold) {
215 return false;
216 }
217
218 ++olsMatrixElementIdx;
219 decompositionRow[rowNumber] = 1.;
220 for (size_t columnNumber = rowNumber + 1; columnNumber < featuresCount; ++columnNumber) {
221 TVector<double>& secondDecompositionRow = decompositionMatrix[columnNumber];
222 double& decompositionMatrixElement = secondDecompositionRow[rowNumber];
223
224 decompositionMatrixElement = linearizedOLSMatrix[olsMatrixElementIdx];
225
226 for (size_t j = 0; j < rowNumber; ++j) {
227 decompositionMatrixElement -= decompositionRow[j] * secondDecompositionRow[j] * decompositionTrace[j];
228 }
229
230 decompositionMatrixElement /= decompositionTraceElement;
231
232 decompositionRow[columnNumber] = decompositionMatrixElement;
233 ++olsMatrixElementIdx;
234 }
235 }
236
237 return true;
238 }
239
240 void LDLDecomposition(const TVector<double>& linearizedOLSMatrix,
241 TVector<double>& decompositionTrace,

Callers 1

SolveFunction · 0.85

Calls 2

fabsFunction · 0.85
sizeMethod · 0.45

Tested by

no test coverage detected