15RSampler::RSampler(std::vector<RFlat2DMatrix> &datasets,
const std::string &sampleType,
float sampleRatio,
16 bool replacement,
bool shuffle, std::size_t setSeed)
17 : fDatasets(datasets),
18 fSampleType(sampleType),
19 fSampleRatio(sampleRatio),
20 fReplacement(replacement),
69 auto minRatio = std::to_string(std::round(
double(
fNumMinor) /
double(
fNumMajor) * 100.0) / 100.0);
70 minRatio.erase(minRatio.find(
'.') + 3);
71 throw std::invalid_argument(
72 "The sampling_ratio is too low: not enough entries in the majority class to sample from.\n"
73 "Choose sampling_ratio > " +
74 minRatio +
" or set replacement to True.");
110 std::size_t cols =
fDatasets[0].GetCols();
114 std::size_t
index = 0;
126 ShuffledTensor = std::move(SampledTensor);
137 std::size_t cols =
fDatasets[0].GetCols();
141 std::size_t
index = 0;
153 ShuffledTensor = std::move(SampledTensor);
163 std::uniform_int_distribution<> dist(0, max - 1);
166 for (std::size_t i = 0; i < n_samples; ++i) {
169 std::random_device rd;
194 std::vector<std::size_t> UniqueSamples;
195 UniqueSamples.reserve(max);
199 for (std::size_t i = 0; i < max; ++i)
200 UniqueSamples.push_back(i);
203 std::random_device rd;
211 std::shuffle(UniqueSamples.begin(), UniqueSamples.end(),
g);
214 for (std::size_t i = 0; i < n_samples; ++i) {
215 fSamples.push_back(UniqueSamples[i]);
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
void SampleWithoutReplacement(std::size_t n_samples, std::size_t max)
Add indices without replacement to fSamples.
void SetupRandomUndersampler()
Calculate fNumEntries and major/minor variables for the random undersampler.
void RandomOversampler(RFlat2DMatrix &ShuffledTensor)
Oversample entries randomly from the minority dataset.
void SampleWithReplacement(std::size_t n_samples, std::size_t max)
Add indices with replacement to fSamples.
void SetupRandomOversampler()
Calculate fNumEntries and major/minor variables for the random oversampler.
void SetupSampler()
Calculate fNumEntries and major/minor variables.
std::vector< std::size_t > fSamples
std::unique_ptr< RFlat2DMatrixOperators > fTensorOperators
RSampler(std::vector< RFlat2DMatrix > &datasets, const std::string &sampleType, float sampleRatio, bool replacement=false, bool shuffle=true, std::size_t setSeed=0)
void RandomUndersampler(RFlat2DMatrix &ShuffledTensor)
Undersample entries randomly from the majority dataset.
std::size_t fNumResampledMajor
std::vector< RFlat2DMatrix > & fDatasets
void Sampler(RFlat2DMatrix &SampledTensor)
Collection of sampling types.
std::size_t fNumResampledMinor
Wrapper around ROOT::RVec<float> representing a 2D matrix.