| 289 | } |
| 290 | |
| 291 | void TMetricsPlotCalcer::ComputeNonAdditiveMetrics(ui32 begin, ui32 end) { |
| 292 | const auto& target = NonAdditiveMetricsData.Target; |
| 293 | const auto& weights = NonAdditiveMetricsData.Weights; |
| 294 | CB_ENSURE(target.size() == 1, "Multitarget metrics are not supported yet"); |
| 295 | |
| 296 | for (auto idx : xrange(begin, end)) { |
| 297 | auto approx = LoadApprox(idx); |
| 298 | auto results = EvalErrorsWithCaching( |
| 299 | approx, |
| 300 | /*approxDelts*/{}, |
| 301 | /*isExpApprox*/false, |
| 302 | To2DConstArrayRef<float>(target), |
| 303 | weights, |
| 304 | {}, |
| 305 | NonAdditiveMetrics, |
| 306 | &Executor |
| 307 | ); |
| 308 | |
| 309 | for (auto metricId : xrange(NonAdditiveMetrics.size())) { |
| 310 | NonAdditiveMetricPlots[metricId][idx] = results[metricId]; |
| 311 | } |
| 312 | |
| 313 | if (idx != 0) { |
| 314 | DeleteApprox(idx - 1); |
| 315 | } |
| 316 | } |
| 317 | } |
| 318 | |
| 319 | static TVector<TVector<float>> BuildTargets(const TVector<TProcessedDataProvider>& datasetParts) { |
| 320 | const auto targetDim = datasetParts.empty() ? 0 : datasetParts[0].TargetData->GetTargetDimension(); |
no test coverage detected