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

Function CreateFoldData

catboost/libs/train_lib/eval_feature.cpp:380–426  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

378}
379
380static void CreateFoldData(
381 typename TTrainingDataProviders::TDataPtr srcData,
382 ui64 cpuUsedRamLimit,
383 const TVector<NCB::TArraySubsetIndexing<ui32>>& trainSubsets,
384 const TVector<NCB::TArraySubsetIndexing<ui32>>& testSubsets,
385 TVector<TTrainingDataProviders>* foldsData,
386 TVector<TTrainingDataProviders>* testFoldsData,
387 NPar::ILocalExecutor* localExecutor
388) {
389 CB_ENSURE_INTERNAL(trainSubsets.size() == testSubsets.size(), "Number of train and test subsets do not match");
390 const NCB::EObjectsOrder objectsOrder = NCB::EObjectsOrder::Ordered;
391 const ui64 perTaskCpuUsedRamLimit = cpuUsedRamLimit / (2 * trainSubsets.size());
392
393 TVector<std::function<void()>> tasks;
394 for (ui32 foldIdx : xrange(trainSubsets.size())) {
395 tasks.emplace_back(
396 [&, foldIdx]() {
397 (*foldsData)[foldIdx].Learn = srcData->GetSubset(
398 GetSubset(
399 srcData->ObjectsGrouping,
400 NCB::TArraySubsetIndexing<ui32>(trainSubsets[foldIdx]),
401 objectsOrder
402 ),
403 perTaskCpuUsedRamLimit,
404 localExecutor
405 );
406 }
407 );
408 tasks.emplace_back(
409 [&, foldIdx]() {
410 (*testFoldsData)[foldIdx].Test.emplace_back(
411 srcData->GetSubset(
412 GetSubset(
413 srcData->ObjectsGrouping,
414 NCB::TArraySubsetIndexing<ui32>(testSubsets[foldIdx]),
415 objectsOrder
416 ),
417 perTaskCpuUsedRamLimit,
418 localExecutor
419 )
420 );
421 }
422 );
423 }
424
425 NCB::ExecuteTasksInParallel(&tasks, localExecutor);
426}
427
428static void TakeMiddleElements(
429 ui32 offset,

Callers 2

PrepareTimeSplitFoldsFunction · 0.85
PrepareFoldsFunction · 0.85

Calls 5

xrangeFunction · 0.85
GetSubsetFunction · 0.85
sizeMethod · 0.45
emplace_backMethod · 0.45
GetSubsetMethod · 0.45

Tested by

no test coverage detected