public TrainingExample[] OverSample(TrainingExample[] trainingExamples, SamplingParams samplingParams) { if (!samplingParams.NeedSampling) return trainingExamples; var trainingSet = new TrainingSet(trainingExamples); var delta = Math.Min(trainingSet.Majority.Length - trainingSet.Minority.Length, trainingSet.Minority.Length * samplingParams.MinorityClassMaxOversampling); var additionalSamples = Enumerable.Range(0, delta).Select(x => OverSample(trainingSet, samplingParams)).ToArray(); return trainingExamples.Concat(additionalSamples).RandomShuffle().ToArray(); }
private TrainingExample OverSample(TrainingSet trainingSet, SamplingParams samplingParams) { switch (samplingParams.Strategy) { case SamplingStrategy.Random: return OverSampleRandomly(trainingSet); case SamplingStrategy.Generative: return OverSampleGeneratively(trainingSet); case SamplingStrategy.Perturbed: return OverSamplePerturbed(trainingSet); default: throw new InvalidOperationException(string.Format("No implementation for strategy {0}", samplingParams.Strategy)); } }