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

Function MakeUnimodal

library/cpp/linear_regression/unimodal.cpp:47–81  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

45}
46
47double MakeUnimodal(TVector<double>& values, const TOptimizationParams& optimizationParams) {
48 TOptimizationState state(values);
49 TOptimizationState bestState = state;
50
51 for (size_t modeStep = 0; modeStep <= optimizationParams.ModeParams.StepsCount; ++modeStep) {
52 state.Mode = optimizationParams.ModeParams.Point(modeStep);
53 for (size_t normalizerStep = 0; normalizerStep <= optimizationParams.NormalizerParams.StepsCount; ++normalizerStep) {
54 state.Normalizer = optimizationParams.NormalizerParams.Point(normalizerStep);
55
56 TSLRSolver solver;
57 for (size_t i = 0; i < values.size(); ++i) {
58 solver.Add(state.NoRegressionTransform(i), values[i]);
59 }
60
61 state.SSE = solver.SumSquaredErrors(optimizationParams.RegressionShrinkage);
62 if (state.SSE >= bestState.SSE) {
63 continue;
64 }
65
66 bestState = state;
67 solver.Solve(bestState.RegressionFactor, bestState.RegressionIntercept, optimizationParams.RegressionShrinkage);
68 }
69 }
70
71 for (size_t i = 0; i < values.size(); ++i) {
72 values[i] = bestState.RegressionTransform(i);
73 }
74
75 const double residualSSE = bestState.SSE;
76 const double totalSSE = InnerProduct(values, values);
77
78 const double determination = 1. - residualSSE / totalSSE;
79
80 return determination;
81}
82
83double MakeUnimodal(TVector<double>& values) {
84 return MakeUnimodal(values, TOptimizationParams::Default(values));

Callers

nothing calls this directly

Calls 11

InnerProductFunction · 0.85
DefaultFunction · 0.85
PointMethod · 0.80
NoRegressionTransformMethod · 0.80
RegressionTransformMethod · 0.80
sizeMethod · 0.45
AddMethod · 0.45
SumSquaredErrorsMethod · 0.45
SolveMethod · 0.45
reserveMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected