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

Function SetQuantization

library/cpp/grid_creator/binarization.cpp:888–951  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

886
887template <class TGetWeight>
888static TQuantization SetQuantization(
889 TConstArrayRef<float> sortedValues,
890
891 // (sortedValuedStartIdx, sortedValuesEndIdx) -> weight for values range
892 TGetWeight&& getWeight,
893 float totalWeight,
894 THashSet<float>&& bordersSet,
895 TMaybe<float> quantizedDefaultBinFraction) {
896
897 if (bordersSet.contains(-0.0f)) { // BestSplit might add negative zeros
898 bordersSet.erase(-0.0f);
899 bordersSet.insert(0.0f);
900 }
901
902 TQuantization result;
903 result.Borders.assign(bordersSet.begin(), bordersSet.end());
904 Sort(result.Borders);
905 if (quantizedDefaultBinFraction) {
906 ui32 currentBin = 0;
907
908 auto getBin = [&] (float value) -> ui32 {
909 ui32 bin = currentBin;
910 while ((bin < result.Borders.size()) && (value >= result.Borders[bin])) {
911 ++bin;
912 }
913 return bin;
914 };
915
916 size_t currentBinBeginIdx = 0;
917 currentBin = getBin(sortedValues[0]);
918
919 float maxBinWeight = 0.f;
920 ui32 maxBinIdx;
921
922 auto processCurrentBin = [&] (size_t currentBinEndIdx) {
923 const float currentBinWeight = getWeight(currentBinBeginIdx, currentBinEndIdx);
924 if (currentBinWeight > maxBinWeight) {
925 maxBinWeight = currentBinWeight;
926 maxBinIdx = currentBin;
927 }
928 };
929
930 size_t i = 1;
931 for (; i < sortedValues.size(); ++i) {
932 auto bin = getBin(sortedValues[i]);
933 if (bin != currentBin) {
934 processCurrentBin(i);
935 currentBin = bin;
936 currentBinBeginIdx = i;
937 if (currentBin == result.Borders.size()) {
938 i = sortedValues.size();
939 break;
940 }
941 }
942 }
943 processCurrentBin(i);
944
945 float maxBinFraction = maxBinWeight / totalWeight;

Calls 8

SortFunction · 0.50
containsMethod · 0.45
eraseMethod · 0.45
insertMethod · 0.45
assignMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected