| 495 | } |
| 496 | |
| 497 | void ModelBasedEval( |
| 498 | const NCatboostOptions::TCatBoostOptions& catboostOptions, |
| 499 | const NCatboostOptions::TOutputFilesOptions& outputOptions, |
| 500 | TTrainingDataProviders trainingData, |
| 501 | const TLabelConverter& labelConverter, |
| 502 | NPar::ILocalExecutor* localExecutor) const override { |
| 503 | |
| 504 | CB_ENSURE(trainingData.Test.size() == 1, "Model based evaluation requires exactly one eval set on GPU"); |
| 505 | CB_ENSURE(!IsMultiTargetObjective(catboostOptions.LossFunctionDescription->LossFunction), |
| 506 | "Catboost does not support multitarget on GPU yet"); |
| 507 | |
| 508 | NCatboostOptions::TCatBoostOptions updatedCatboostOptions(catboostOptions); |
| 509 | |
| 510 | auto quantizedFeaturesInfo = trainingData.Learn->ObjectsData->GetQuantizedFeaturesInfo(); |
| 511 | |
| 512 | TFeatureEstimatorsPtr estimators; |
| 513 | TVector<TExclusiveFeaturesBundle> exclusiveBundlesCopy; |
| 514 | // TODO(kirillovs): check and enable in modelbased eval |
| 515 | /*exclusiveBundlesCopy.assign( |
| 516 | trainingData.Learn->ObjectsData->GetExclusiveFeatureBundlesMetaData().begin(), |
| 517 | trainingData.Learn->ObjectsData->GetExclusiveFeatureBundlesMetaData().end() |
| 518 | );*/ |
| 519 | ui32 objectsCount = trainingData.Learn->GetObjectCount() + trainingData.Test[0]->GetObjectCount(); |
| 520 | TBinarizedFeaturesManager featuresManager(updatedCatboostOptions.CatFeatureParams, |
| 521 | estimators, |
| 522 | *trainingData.Learn->MetaInfo.FeaturesLayout, |
| 523 | exclusiveBundlesCopy, |
| 524 | quantizedFeaturesInfo, |
| 525 | objectsCount); |
| 526 | |
| 527 | SetDataDependentDefaultsForGpu( |
| 528 | *trainingData.Learn, |
| 529 | trainingData.Test[0].Get(), |
| 530 | updatedCatboostOptions, |
| 531 | featuresManager, |
| 532 | localExecutor); |
| 533 | |
| 534 | NCB::TOnCpuGridBuilderFactory gridBuilderFactory; |
| 535 | featuresManager.SetTargetBorders( |
| 536 | NCB::TBordersBuilder( |
| 537 | gridBuilderFactory, |
| 538 | *trainingData.Learn->TargetData->GetOneDimensionalTarget())(featuresManager.GetTargetBinarizationDescription())); |
| 539 | |
| 540 | TSetLogging inThisScope(updatedCatboostOptions.LoggingLevel); |
| 541 | auto deviceRequestConfig = NCudaLib::CreateDeviceRequestConfig(updatedCatboostOptions); |
| 542 | auto stopCudaManagerGuard = StartCudaManager(deviceRequestConfig, |
| 543 | updatedCatboostOptions.LoggingLevel); |
| 544 | |
| 545 | ui32 approxDimension = GetApproxDimension( |
| 546 | updatedCatboostOptions, |
| 547 | labelConverter, |
| 548 | trainingData.Learn->TargetData->GetTargetDimension() |
| 549 | ); |
| 550 | |
| 551 | CheckMetrics(updatedCatboostOptions.MetricOptions); |
| 552 | |
| 553 | ModelBasedEvalImpl( |
| 554 | updatedCatboostOptions, |
no test coverage detected