KSquare Utilities
KKMLL::CrossValidationVoting Class Reference

#include <CrossValidationVoting.h>

Public Member Functions

 CrossValidationVoting (TrainingConfiguration2ListPtr _configs, FeatureVectorListPtr _examples, MLClassListPtr _mlClasses, kkint32 _numOfFolds, bool _featuresAreAlreadyNormalized, FileDescPtr _fileDesc)
 
 ~CrossValidationVoting ()
 
float Accuracy ()
 
double ClassificationTime () const
 
ConfusionMatrix2Ptr ConfussionMatrix ()
 
float FoldAccuracy (kkint32 foldNum) const
 
KKStr FoldAccuracysToStr () const
 
KKStr FoldStr () const
 
kkint32 NumOfSupportVectors () const
 
void RunCrossValidation (RunLog &log)
 
void RunValidationOnly (FeatureVectorListPtr validationData, bool *classedCorrectly, RunLog &log)
 
double TrainingTime () const
 

Detailed Description

Definition at line 55 of file CrossValidationVoting.h.

Constructor & Destructor Documentation

CrossValidationVoting::CrossValidationVoting ( TrainingConfiguration2ListPtr  _configs,
FeatureVectorListPtr  _examples,
MLClassListPtr  _mlClasses,
kkint32  _numOfFolds,
bool  _featuresAreAlreadyNormalized,
FileDescPtr  _fileDesc 
)

Definition at line 31 of file CrossValidationVoting.cpp.

References KKMLL::FeatureVectorList::ExtractExamplesForClassList().

37  :
38 
39  configs (_configs),
40  featuresAreAlreadyNormalized (_featuresAreAlreadyNormalized),
41  fileDesc (_fileDesc),
42  foldAccuracies (NULL),
43  foldCounts (NULL),
44  confusionMatrix (NULL),
45  cmByNumOfConflicts (NULL),
46  examples (NULL),
47  mlClasses (_mlClasses),
48  examplesPerClass (0),
49  maxNumOfConflicts (0),
50  numOfFolds (_numOfFolds),
51  numOfSupportVectors (0),
52  numOfWinnersCounts (NULL),
53  numOfWinnersCorrects (NULL),
54  numOfWinnersOneOfTheWinners (NULL),
55  classificationTime (0.0),
56  trainingTime (0.0)
57 
58 {
59  examples = _examples->ExtractExamplesForClassList (mlClasses);
60  examplesPerClass = 999999;
61 }
FeatureVectorListPtr ExtractExamplesForClassList(MLClassListPtr classes)
CrossValidationVoting::~CrossValidationVoting ( )

Definition at line 65 of file CrossValidationVoting.cpp.

66 {
67  DeleteAllocatedMemory ();
68  delete examples; examples = NULL;
69 }

Member Function Documentation

float CrossValidationVoting::Accuracy ( )

Definition at line 467 of file CrossValidationVoting.cpp.

References KKMLL::ConfusionMatrix2::Accuracy().

468 {
469  if (confusionMatrix)
470  return (float)confusionMatrix->Accuracy ();
471  else
472  return 0.0;
473 } /* Accuracy */
double KKMLL::CrossValidationVoting::ClassificationTime ( ) const
inline

Definition at line 79 of file CrossValidationVoting.h.

79 {return classificationTime;}
ConfusionMatrix2Ptr KKMLL::CrossValidationVoting::ConfussionMatrix ( )
inline

Definition at line 76 of file CrossValidationVoting.h.

76 {return confusionMatrix;}
float CrossValidationVoting::FoldAccuracy ( kkint32  foldNum) const

Definition at line 496 of file CrossValidationVoting.cpp.

497 {
498  if (!foldAccuracies)
499  return 0.0f;
500 
501  if ((foldNum < 0) || (foldNum >= numOfFolds))
502  return 0.0f;
503 
504  return foldAccuracies[foldNum];
505 } /* FoldAccuracy */
KKStr CrossValidationVoting::FoldAccuracysToStr ( ) const

Definition at line 478 of file CrossValidationVoting.cpp.

References KKB::KKStr::Concat(), KKB::KKStr::KKStr(), and KKB::StrFormatDouble().

479 {
480  KKStr foldAccuracyStr (9 * numOfFolds); // Pre Reserving enough space for all Accuracies.
481 
482  for (kkint32 foldNum = 0; foldNum < numOfFolds; foldNum++)
483  {
484  if (foldNum > 0)
485  foldAccuracyStr << "\t";
486  foldAccuracyStr << StrFormatDouble (foldAccuracies[foldNum], "ZZ,ZZ0.00%");
487  }
488 
489  return foldAccuracyStr;
490 } /* FoldAccuracysToStr */
__int32 kkint32
Definition: KKBaseTypes.h:88
KKStr StrFormatDouble(double val, const char *mask)
Definition: KKStr.cpp:4819
KKStr CrossValidationVoting::FoldStr ( ) const

Definition at line 510 of file CrossValidationVoting.cpp.

References KKB::KKStr::Concat(), and KKB::KKStr::KKStr().

511 {
512  if ((numOfFolds <= 0) || (!foldAccuracies))
513  return "";
514 
515  kkint32 x;
516 
517  KKStr result (numOfFolds + 10);
518 
519  for (x = 0; x < numOfFolds; x++)
520  {
521  if (x > 0)
522  result << ",";
523  result << foldAccuracies[x];
524  }
525 
526  return result;
527 } /* FoldStr */
__int32 kkint32
Definition: KKBaseTypes.h:88
kkint32 KKMLL::CrossValidationVoting::NumOfSupportVectors ( ) const
inline

Definition at line 83 of file CrossValidationVoting.h.

83 {return numOfSupportVectors;}
void CrossValidationVoting::RunCrossValidation ( RunLog log)

Definition at line 144 of file CrossValidationVoting.cpp.

References KKMLL::FeatureVectorList::ManufactureEmptyList(), and KKMLL::FeatureVectorList::PushOnBack().

145 {
146  log.Level (10) << "CrossValidationVoting::RunCrossValidationVoting" << endl;
147 
148  if (numOfFolds < 1)
149  {
150  log.Level (-1) << endl
151  << endl
152  << "CrossValidationVoting::RunCrossValidationVoting **** ERROR ****" << endl
153  << endl
154  << " Invalid numOfFolds[" << numOfFolds << "]." << endl
155  << endl;
156  return;
157  }
158 
159  DeleteAllocatedMemory ();
160  AllocateMemory (log);
161 
162  kkint32 imageCount = examples->QueueSize ();
163  kkint32 numImagesPerFold = (imageCount + numOfFolds - 1) / numOfFolds;
164  kkint32 firstInGroup = 0;
165 
166  kkint32 foldNum;
167 
168  for (foldNum = 0; foldNum < numOfFolds; foldNum++)
169  {
170  kkint32 lastInGroup;
171 
172  // If We are doing the last Fold Make sure that we are including all the examples
173  // that have not been tested.
174  if (foldNum == (numOfFolds - 1))
175  lastInGroup = imageCount;
176  else
177  lastInGroup = firstInGroup + numImagesPerFold - 1;
178 
179 
180  cout << "Fold [" << (foldNum + 1) << "] of [" << numOfFolds << "]" << endl;
181 
182  FeatureVectorListPtr trainingExamples = examples->ManufactureEmptyList (true);
183  FeatureVectorListPtr testImages = examples->ManufactureEmptyList (true);
184 
185  log.Level (30) << "Fold Num[" << foldNum << "] "
186  << "FirstTestImage[" << firstInGroup << "] "
187  << "LastInGroup[" << lastInGroup << "]."
188  << endl;
189 
190  for (kkint32 x = 0; x < imageCount; x++)
191  {
192  FeatureVectorPtr newImage = examples->IdxToPtr (x)->Duplicate ();
193  if ((x >= firstInGroup) && (x <= lastInGroup))
194  testImages->PushOnBack (newImage);
195  else
196  trainingExamples->PushOnBack (newImage);
197  }
198 
199  cout << "Number Of Training Images : " << trainingExamples->QueueSize () << endl;
200  cout << "Number Of Test Images : " << testImages->QueueSize () << endl;
201 
202  CrossValidate (testImages, trainingExamples, foldNum, NULL, log);
203 
204  delete trainingExamples; trainingExamples = NULL;
205  delete testImages; testImages = NULL;
206  firstInGroup = firstInGroup + numImagesPerFold;
207  }
208 } /* RunCrossValidationVoting */
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
void PushOnBack(FeatureVectorPtr image)
Overloading the PushOnBack function in KKQueue so we can monitor the Version and Sort Order...
__int32 kkint32
Definition: KKBaseTypes.h:88
EntryPtr IdxToPtr(kkuint32 idx) const
Definition: KKQueue.h:732
virtual FeatureVectorListPtr ManufactureEmptyList(bool _owner) const
Creates an instance of a Empty FeatureVectorList.
RunLog & Level(kkint32 _level)
Definition: RunLog.cpp:220
virtual FeatureVectorPtr Duplicate() const
Container class for FeatureVector derived objects.
kkint32 QueueSize() const
Definition: KKQueue.h:313
Represents a Feature Vector of a single example, labeled or unlabeled.
Definition: FeatureVector.h:59
void CrossValidationVoting::RunValidationOnly ( FeatureVectorListPtr  validationData,
bool *  classedCorrectly,
RunLog log 
)

Definition at line 214 of file CrossValidationVoting.cpp.

References KKMLL::FeatureVectorList::DuplicateListAndContents().

218 {
219  log.Level (10) << "CrossValidationVoting::RunValidationOnly" << endl;
220  DeleteAllocatedMemory ();
221  AllocateMemory (log);
222 
223  // We need to get a duplicate copy of each image data because the trainer and classifier
224  // will normalize the data.
225  FeatureVectorListPtr trainingExamples = examples->DuplicateListAndContents ();
226  FeatureVectorListPtr testImages = validationData->DuplicateListAndContents ();
227 
228  CrossValidate (testImages, trainingExamples, 0, classedCorrectly, log);
229 
230  delete trainingExamples;
231  delete testImages;
232 } /* RunValidationOnly */
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
virtual FeatureVectorListPtr DuplicateListAndContents() const
Creates a duplicate of list and also duplicates it contents.
RunLog & Level(kkint32 _level)
Definition: RunLog.cpp:220
Container class for FeatureVector derived objects.
double KKMLL::CrossValidationVoting::TrainingTime ( ) const
inline

Definition at line 84 of file CrossValidationVoting.h.

84 {return trainingTime;}

The documentation for this class was generated from the following files: