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

Function RunComputeTest

catboost/cuda/methods/ut/test_multistat_histograms.cpp:473–532  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

471
472 //
473 void RunComputeTest(const TDocParallelDataSet& dataSet,
474 const ui32 numStats,
475 const ui32 maxLeaves,
476 double sampleRate,
477 const TComputeByBlocksConfig& byBlocksConfig,
478 const TBinarizedFeaturesManager& featuresManager) {
479 TRandom rand(10);
480
481 TComputeSplitPropertiesByBlocksHelper computeSplitPropertiesByBlocksHelper(dataSet,
482 byBlocksConfig);
483
484 TSplitPropertiesHelper splitPropertiesHelper(dataSet,
485 featuresManager,
486 computeSplitPropertiesByBlocksHelper);
487
488 TVector<float> featureWeights(featuresManager.GetFeatureCount(), 1.0f);
489 auto subsets = splitPropertiesHelper.CreateInitialSubsets(
490 CreateTestTarget(dataSet, numStats, sampleRate),
491 maxLeaves,
492 featureWeights);
493
494 while (subsets.Leaves.size() < maxLeaves) {
495 CATBOOST_DEBUG_LOG << "Leaves count #" << subsets.Leaves.size() << Endl;
496
497 splitPropertiesHelper.BuildNecessaryHistograms(&subsets);
498 CheckHistograms(dataSet, subsets);
499
500 TVector<ui32> leavesToSplit;
501 for (ui32 i = 0; i < subsets.Leaves.size(); ++i) {
502 if (subsets.Leaves[i].Size) {
503 leavesToSplit.push_back(i);
504 }
505 }
506 UNIT_ASSERT(leavesToSplit.size() > 0);
507
508 Shuffle(leavesToSplit.begin(), leavesToSplit.end(), rand);
509 leavesToSplit.resize(Max<ui32>(leavesToSplit.size() * 0.5, 1));
510 ui32 maxLeavesToSplit = leavesToSplit.size() + subsets.Leaves.size() > maxLeaves ? maxLeaves - subsets.Leaves.size() : leavesToSplit.size();
511 leavesToSplit.resize(maxLeavesToSplit);
512 // leavesToSplit.resize(1);
513
514 for (ui32 leafId : leavesToSplit) {
515 TBinarySplit bestSplit;
516 auto featureIds = dataSet.GetFeatures().GetFeatures();
517 auto localIdx = rand.NextUniformL() % featureIds.size();
518 bestSplit.FeatureId = featureIds[localIdx];
519 bestSplit.BinIdx = (featuresManager.GetBinCount(bestSplit.FeatureId) - 1) / 2;
520 bestSplit.SplitType = featuresManager.IsCat(localIdx) ? EBinSplitType::TakeBin
521 : EBinSplitType::TakeGreater;
522
523 subsets.Leaves[leafId].BestSplit.Score = static_cast<float>(-rand.NextUniform());
524 subsets.Leaves[leafId].BestSplit.FeatureId = bestSplit.FeatureId;
525 subsets.Leaves[leafId].BestSplit.BinId = bestSplit.BinIdx;
526 }
527
528 CheckAndMakeSplit(leavesToSplit,
529 splitPropertiesHelper,
530 subsets);

Callers 1

TestSplitPropsHelperFunction · 0.85

Calls 15

CheckHistogramsFunction · 0.85
CheckAndMakeSplitFunction · 0.85
GetFeaturesMethod · 0.80
NextUniformLMethod · 0.80
IsCatMethod · 0.80
NextUniformMethod · 0.80
CreateTestTargetFunction · 0.70
ShuffleFunction · 0.50
GetFeatureCountMethod · 0.45
CreateInitialSubsetsMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected