public virtual void GenerateNewBag() { int[] trainDocs = new int[CompleteTrainingSet.NumDocs]; int[] outOfBagDocs = new int[CompleteTrainingSet.NumDocs]; int trainSize = 0; int outOfBagSize = 0; for (int i = 0; i < CompleteTrainingSet.NumQueries; i++) { int begin = CompleteTrainingSet.Boundaries[i]; int numDocuments = CompleteTrainingSet.Boundaries[i + 1] - begin; for (int d = 0; d < numDocuments; d++) { if (RndGenerator.NextDouble() < TrainFraction) { trainDocs[trainSize] = begin + d; trainSize++; } else { outOfBagDocs[outOfBagSize] = begin + d; outOfBagSize++; } } } CurrentTrainPartition = new DocumentPartitioning(trainDocs, trainSize, MaxLeaves); CurrentOutOfBagPartition = new DocumentPartitioning(outOfBagDocs, outOfBagSize, MaxLeaves); CurrentTrainPartition.Initialize(); CurrentOutOfBagPartition.Initialize(); }
public override void GenerateNewBag() { int[] trainDocs = new int[CompleteTrainingSet.NumDocs]; int[] outOfBagDocs = new int[CompleteTrainingSet.NumDocs]; int trainSize = 0; int outOfBagSize = 0; int[] tmpTrainQueryIndices = new int[CompleteTrainingSet.NumQueries]; bool[] selectedTrainQueries = new bool[CompleteTrainingSet.NumQueries]; int qIdx = 0; for (int i = 0; i < CompleteTrainingSet.NumQueries; i++) { int begin = CompleteTrainingSet.Boundaries[i]; int numDocuments = CompleteTrainingSet.Boundaries[i + 1] - begin; if (RndGenerator.NextDouble() < TrainFraction) { for (int d = 0; d < numDocuments; d++) { trainDocs[trainSize] = begin + d; trainSize++; } tmpTrainQueryIndices[qIdx] = i; qIdx++; selectedTrainQueries[i] = true; } } int outOfBagQueriesCount = CompleteTrainingSet.NumQueries - qIdx; var currentTrainQueryIndices = new int[CompleteTrainingSet.NumQueries - outOfBagQueriesCount]; Array.Copy(tmpTrainQueryIndices, currentTrainQueryIndices, currentTrainQueryIndices.Length); var currentOutOfBagQueryIndices = new int[outOfBagQueriesCount]; int outOfBagQIdx = 0; for (int q = 0; q < CompleteTrainingSet.NumQueries; q++) { if (!selectedTrainQueries[q]) { int begin = CompleteTrainingSet.Boundaries[q]; int numDocuments = CompleteTrainingSet.Boundaries[q + 1] - begin; for (int d = 0; d < numDocuments; d++) { outOfBagDocs[outOfBagSize] = begin + d; outOfBagSize++; } currentOutOfBagQueryIndices[outOfBagQIdx] = q; outOfBagQIdx++; } } CurrentTrainPartition = new DocumentPartitioning(trainDocs, trainSize, MaxLeaves); CurrentOutOfBagPartition = new DocumentPartitioning(outOfBagDocs, outOfBagSize, MaxLeaves); CurrentTrainPartition.Initialize(); CurrentOutOfBagPartition.Initialize(); }