void RandomSplitJobManager::RetrieveRandomSplit (int splitNum, FeatureVectorListPtr& trainData, FeatureVectorListPtr& testData ) { trainData = NULL; testData = NULL; if ((splitNum < 0) || (splitNum >= (int)splits->NumOfOrderings ())) { log.Level (-1) << endl << endl << "RandomSplitJobManager::RetrieveRandomSplit ***ERROR*** Invalid SplitNum[" << splitNum << "]" << endl << endl; return; } const FeatureVectorListPtr ordering = splits->Ordering (splitNum); trainData = ordering->ManufactureEmptyList (false); testData = ordering->ManufactureEmptyList (false); MLClassList::const_iterator classIDX; for (classIDX = mlClasses->begin (); classIDX != mlClasses->end (); classIDX++) { MLClassPtr ic = *classIDX; FeatureVectorListPtr examplesThisClass = ordering->ExtractExamplesForAGivenClass (ic); int numTrainExamplesNeeded = (int)(0.5 + (double)(examplesThisClass->QueueSize ()) * (double)splitFraction); int numExamplesAddToTrainSet = 0; FeatureVectorList::const_iterator idx; for (idx = examplesThisClass->begin (); idx != examplesThisClass->end (); idx++) { FeatureVectorPtr example = *idx; if (numExamplesAddToTrainSet < numTrainExamplesNeeded) { trainData->PushOnBack (example); numExamplesAddToTrainSet++; } else { testData->PushOnBack (example); } } } } /* RetrieveRandomSplit */