FeatureVectorPtr FeatureEncoder::EncodeAExample (FileDescConstPtr encodedFileDesc, FeatureVectorPtr src ) { FeatureVectorPtr encodedExample = new FeatureVector (numEncodedFeatures); encodedExample->MLClass (src->MLClass ()); encodedExample->PredictedClass (src->PredictedClass ()); //encodedExample->Version (src->Version ()); encodedExample->TrainWeight (src->TrainWeight ()); const float* featureData = src->FeatureData (); kkint32 x; for (x = 0; x < numOfFeatures; x++) { float featureVal = featureData [srcFeatureNums[x]]; kkint32 y = destFeatureNums[x]; switch (destWhatToDo[x]) { case FeWhatToDo::FeAsIs: { encodedExample->AddFeatureData (y, featureVal); } break; case FeWhatToDo::FeBinary: { for (kkint32 z = 0; z < cardinalityDest[x]; z++) { float bVal = ((kkint32)featureVal == z); encodedExample->AddFeatureData (y, bVal); y++; } } break; case FeWhatToDo::FeScale: { encodedExample->AddFeatureData (y, (featureVal / (float)cardinalityDest[x])); } break; } } return encodedExample; } /* EncodeAExample */
FeatureVectorListPtr FeatureEncoder::CreateEncodedFeatureVector (FeatureVectorList& srcData) { if (srcData.AllFieldsAreNumeric ()) return srcData.DuplicateListAndContents (); FeatureVectorListPtr encodedFeatureVectorList = new FeatureVectorList (destFileDesc, true); FeatureVectorList::iterator idx; for (idx = srcData.begin (); idx != srcData.end (); idx++) { FeatureVectorPtr srcExample = *idx; XSpacePtr encodedData = EncodeAExample (srcExample); kkint32 zed = 0; FeatureVectorPtr encodedFeatureVector = new FeatureVector (codedNumOfFeatures); while (encodedData[zed].index != -1) { encodedFeatureVector->AddFeatureData (encodedData[zed].index, (float)encodedData[zed].value); zed++; } encodedFeatureVector->MLClass (srcExample->MLClass ()); encodedFeatureVectorList->PushOnBack (encodedFeatureVector); delete encodedData; encodedData = NULL; } return encodedFeatureVectorList; } /* CreateEncodedFeatureVector */