16 const std::string &sampleType,
float sampleRatio,
bool replacement,
bool shuffle,
20 fSampleType(sampleType),
21 fSampleRatio(sampleRatio),
22 fReplacement(replacement),
71 auto minRatio = std::to_string(std::round(
double(
fNumMinor) /
double(
fNumMajor) * 100.0) / 100.0);
72 minRatio.erase(minRatio.find(
'.') + 3);
73 throw std::invalid_argument(
74 "The sampling_ratio is too low: not enough entries in the majority class to sample from.\n"
75 "Choose sampling_ratio > " +
76 minRatio +
" or set replacement to True.");
132 std::size_t numResampled,
const std::vector<std::size_t> &OtherRows)
139 float *out = ShuffledTensor.
GetData();
141 const std::size_t entry = permutation.empty() ? i : permutation[i];
142 const std::size_t row = entry < numResampled ? ResampledRows[
fSamples[entry]] : OtherRows[entry - numResampled];
153 std::uniform_int_distribution<> dist(0, max - 1);
156 std::random_device rd;
167 for (std::size_t i = 0; i < n_samples; ++i) {
186 std::vector<std::size_t> UniqueSamples;
187 UniqueSamples.reserve(max);
191 for (std::size_t i = 0; i < max; ++i)
192 UniqueSamples.push_back(i);
195 std::random_device rd;
203 std::shuffle(UniqueSamples.begin(), UniqueSamples.end(),
g);
206 for (std::size_t i = 0; i < n_samples; ++i) {
207 fSamples.push_back(UniqueSamples[i]);
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
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 GatherSamples(RFlat2DMatrix &ShuffledTensor, const std::vector< std::size_t > &ResampledRows, std::size_t numResampled, const std::vector< std::size_t > &OtherRows)
Fill the sampled entries: the resampled entries followed by all the other ones, in shuffled order.
void RandomOversampler(RFlat2DMatrix &ShuffledTensor)
Oversample entries randomly from the minority dataset.
std::vector< std::vector< std::size_t > > & fRows
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.
const RFlat2DMatrix & fDataset
void SetupSampler()
Calculate fNumEntries and major/minor variables.
std::vector< std::size_t > fSamples
std::unique_ptr< RFlat2DMatrixOperators > fTensorOperators
void RandomUndersampler(RFlat2DMatrix &ShuffledTensor)
Undersample entries randomly from the majority dataset.
std::size_t fNumResampledMajor
RSampler(const RFlat2DMatrix &dataset, std::vector< std::vector< std::size_t > > &rows, const std::string &sampleType, float sampleRatio, bool replacement=false, bool shuffle=true, std::size_t setSeed=0)
void Sampler(RFlat2DMatrix &SampledTensor)
Collection of sampling types.
std::size_t fNumResampledMinor
Wrapper around ROOT::RVec<float> representing a 2D matrix.
void Resize(std::size_t rows, std::size_t cols)
std::size_t GetCols() const