KSquare Utilities
KKMLL::Orderings Class Reference

Used to maintain multiple orderings of a single list of FeatureVector objects. More...

#include <Orderings.h>

Public Types

typedef OrderingsOrderingsPtr
 

Public Member Functions

 Orderings (const FeatureVectorListPtr _data, kkuint32 _numOfOrderings, kkuint32 _numOfFolds, RunLog &_log)
 Constructs Orderings object from ImageFeatursList object. More...
 
 Orderings (const KKStr &_featureFileName, FeatureFileIOPtr _driver, RunLog &_log, bool &cancelFlag)
 Constructs Orderings of a FeatureVectorList from a previous construction that was saved in a data file. More...
 
 Orderings (const FeatureVectorListPtr _data, const KKStr &_indexFileName, kkuint32 _numOfOrderings, kkuint32 _numOfFolds, RunLog &_log)
 Constructs a Orderings object from a FeatureLectorList object. More...
 
 Orderings (FeatureVectorListPtr _data, RunLog &_log)
 Constructs a Orderings objects for a specified FeatureVectorList using a previously built Orderings data index file. More...
 
 ~Orderings ()
 
FeatureVectorListPtr Data () const
 
const KKStrFeatureFileName () const
 
const FileDescPtr FileDesc () const
 
const KKStrIndexFileName () const
 
const MLClassListPtr MLClasses () const
 
kkuint32 NumOfFolds () const
 
kkuint32 NumOfOrderings () const
 
const FeatureVectorListPtr Ordering (kkuint32 orderingIdx) const
 
void Save ()
 
void Save (const KKStr &_indexFileName, RunLog &_log)
 
kkuint32 Size () const
 
bool Valid () const
 

Static Public Member Functions

static OrderingsPtr CreateOrderingsObjFromFileIfAvaliable (const FeatureVectorListPtr _data, kkuint32 _numOfOrderings, kkuint32 _numOfFolds, RunLog &_log)
 Constructs a Orderings object for a specified FeatureVectorList. More...
 

Detailed Description

Used to maintain multiple orderings of a single list of FeatureVector objects.

Author
Kurt Kramer

Will maintain multiple orderings of a single FeatureVectorList. These orderings will be saved in a text file for recall later. This will allow the user to be able to repeat experiments using the same ordering of data again. The Idea is that the 1st time this orderings is created the order will be randomly driven with Stratification by Class. This ordering will then be saved in data Files for future recall. More than one order can be maintained for a single list. An example of a good use of this is RandomSplits.

Definition at line 58 of file Orderings.h.

Member Typedef Documentation

Definition at line 62 of file Orderings.h.

Constructor & Destructor Documentation

Orderings::Orderings ( const FeatureVectorListPtr  _data,
kkuint32  _numOfOrderings,
kkuint32  _numOfFolds,
RunLog _log 
)

Constructs Orderings object from ImageFeatursList object.

Use this when an existing list does not exist. Will create 'numOfOrderings' separate lists of 'data' that are randomly ordered and stratified by 'numOfFolds'.

Parameters
[in]_dataImagFeaturesList object,
[in]_numOfOrderingsNumber of separate orderings of data need.
[in]_numOfFoldsUsed to help stratify data in each fold.

Definition at line 25 of file Orderings.cpp.

References KKB::KKStr::Empty(), KKMLL::FeatureVectorList::ExtractListOfClasses(), KKMLL::FeatureVectorList::FeatureVectorList(), KKMLL::FeatureVectorList::FileDesc(), KKMLL::FeatureVectorList::FileName(), KKB::KKStr::operator+(), KKB::KKStr::operator=(), and KKB::osRemoveExtension().

29  :
30 
31  data (new FeatureVectorList (*_data, false)),
32  fileDesc (_data->FileDesc ()),
33  mlClasses (_data->ExtractListOfClasses ()),
34  numOfFolds (_numOfFolds),
35  numOfOrderings (_numOfOrderings),
36  valid (true)
37 
38 {
39  featureFileName = data->FileName ();
40  if (!featureFileName.Empty ())
41  indexFileName = osRemoveExtension (featureFileName) + ".idx";
42 
43  CreateOrderings (_log);
44 }
KKStr osRemoveExtension(const KKStr &_fullFileName)
MLClassListPtr ExtractListOfClasses() const
const FileDescPtr FileDesc() const
Container class for FeatureVector derived objects.
bool Empty() const
Definition: KKStr.h:241
const KKStr & FileName() const
Orderings::Orderings ( const KKStr _featureFileName,
FeatureFileIOPtr  _driver,
RunLog _log,
bool &  cancelFlag 
)

Constructs Orderings of a FeatureVectorList from a previous construction that was saved in a data file.

Will load object from the Feature File '_featureFileName' and retrieve the different orderings from a separate index file who's name will be osExtention (FeatureFileName) + ".idx". The load routine will validate that all FeatureVector instances are accounted for in each ordering. If the index file does not exist it then the 'successful' flag will bet to false.

Parameters
[in]_featureFileNameFile to load FeatureVector' objects from. This will be used as master list for 'Orderings'.
[in]_driverFeature File driver to utilize.
[in]_logLog file to write messages to.
[in]vIf flag turns to 'TRUE' then will terminate the load process and return to caller.

Definition at line 120 of file Orderings.cpp.

References KKMLL::FeatureVectorList::FileDesc(), KKB::KKStr::KKStr(), KKMLL::FeatureFileIO::LoadFeatureFile(), KKMLL::MLClassList::MLClassList(), KKB::KKStr::operator+(), KKB::KKStr::operator=(), and KKB::osRemoveExtension().

124  :
125 
126  data (NULL),
127  featureFileName (_featureFileName),
128  fileDesc (NULL),
129  mlClasses (NULL),
130  numOfFolds (0),
131  numOfOrderings (0),
132  valid (true)
133 
134 {
135  bool changesdMade = false;
136  bool successful = true;
137 
138  mlClasses = new MLClassList ();
139 
140  data = _driver->LoadFeatureFile (featureFileName,
141  *mlClasses,
142  -1, // Load in all data
143  _cancelFlag,
144  successful,
145  changesdMade,
146  _log
147  );
148 
149  if (_cancelFlag)
150  {
151  _log.Level (-1) << endl
152  << "Orderings ***ERROR*** CancelFlag was set, load was canceled." << endl
153  << endl;
154  valid = false;
155  return;
156  }
157 
158 
159  if (!successful)
160  {
161  _log.Level (-1) << endl
162  << "Orderings ***ERROR*** Loading Feature File[" << featureFileName << "]" << endl
163  << endl;
164  valid = false;
165  return;
166  }
167 
168  fileDesc = data->FileDesc ();
169 
170  indexFileName = osRemoveExtension (featureFileName) + ".idx";
171  Load (indexFileName, successful, _log);
172  if (!successful)
173  {
174  _log.Level (-1) << endl
175  << "Orderings *** ERROR *** Loading Index File[" << indexFileName << "]" << endl
176  << endl;
177  valid = false;
178  return;
179  }
180 }
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
KKStr osRemoveExtension(const KKStr &_fullFileName)
const FileDescPtr FileDesc() const
RunLog & Level(kkint32 _level)
Definition: RunLog.cpp:220
virtual FeatureVectorListPtr LoadFeatureFile(const KKStr &_fileName, MLClassList &_mlClasses, kkint32 _maxCount, VolConstBool &_cancelFlag, bool &_successful, bool &_changesMade, RunLog &_log)
Loads the contents of a feature data file and returns a ImageFeaturesList container object...
Maintains a list of MLClass instances.
Definition: MLClass.h:233
Orderings::Orderings ( const FeatureVectorListPtr  _data,
const KKStr _indexFileName,
kkuint32  _numOfOrderings,
kkuint32  _numOfFolds,
RunLog _log 
)

Constructs a Orderings object from a FeatureLectorList object.

Will use 'data' as master list of FeatureVector objects.The orderings will be loaded from 'indexFileName'. It is expected that the size of the files will match. The load routine will validate that all FeatureVector objects are accounted for in each ordering.

Parameters
[in]_dataMaster List of FeatureVector instances.
[in]_indexFileNameFile where orderings of 'data' are to be loaded from.
[in]_numOfOrderings
[in]_numOfFolds

Definition at line 49 of file Orderings.cpp.

References KKMLL::FeatureVectorList::ExtractListOfClasses(), KKMLL::FeatureVectorList::FeatureVectorList(), KKMLL::FeatureVectorList::FileDesc(), KKB::KKStr::KKStr(), KKB::osFileExists(), and Save().

Referenced by CreateOrderingsObjFromFileIfAvaliable().

54  :
55 
56  data (new FeatureVectorList (*_data, false)),
57  fileDesc (_data->FileDesc ()),
58  mlClasses (_data->ExtractListOfClasses ()),
59  indexFileName (_indexFileName),
60  numOfFolds (_numOfFolds),
61  numOfOrderings (_numOfOrderings),
62  valid (true)
63 
64 {
65  if (!osFileExists (indexFileName))
66  {
67  CreateOrderings (_log);
68  Save ();
69  }
70  else
71  {
72  Load (_log);
73  }
74 }
MLClassListPtr ExtractListOfClasses() const
const FileDescPtr FileDesc() const
Container class for FeatureVector derived objects.
bool osFileExists(const KKStr &_fileName)
Definition: OSservices.cpp:568
Orderings::Orderings ( FeatureVectorListPtr  _data,
RunLog _log 
)

Constructs a Orderings objects for a specified FeatureVectorList using a previously built Orderings data index file.

Will use FileName from "data" parameter to derive both 'featureFileName' and 'indexFileName' using the 'FileName' method from FeatureVectorList. It is expected that a separate index file by the name osDeletExtention (FeatureFileName) + ".idx" will exist. The orderings will be loaded from that file.

Parameters
[in]_dataFeatureVectorList that we want different orderings of.
[in]_logLogger.

Definition at line 77 of file Orderings.cpp.

References KKB::KKStr::Empty(), KKMLL::FeatureVectorList::ExtractListOfClasses(), KKMLL::FeatureVectorList::FeatureVectorList(), KKMLL::FeatureVectorList::FileDesc(), KKMLL::FeatureVectorList::FileName(), KKB::KKStr::KKStr(), KKB::KKStr::operator+(), KKB::KKStr::operator=(), and KKB::osRemoveExtension().

79  :
80 
81  data (new FeatureVectorList (*_data, false)),
82  fileDesc (_data->FileDesc ()),
83  mlClasses (_data->ExtractListOfClasses ()),
84  indexFileName (),
85  numOfFolds (0),
86  numOfOrderings (0),
87  valid (true)
88 
89 {
90  featureFileName = data->FileName ();
91  if (featureFileName.Empty ())
92  {
93  _log.Level (-1) << endl << endl
94  << "Orderings *** ERROR *** No File Name in FeatureVectorList object." << endl
95  << endl;
96  valid = false;
97  return;
98  }
99 
100  bool successful = true;
101  indexFileName = osRemoveExtension (featureFileName) + ".idx";
102 
103  Load (indexFileName, successful, _log);
104  if (!successful)
105  {
106  _log.Level (-1) << endl
107  << "Orderings::Orderings Error Loading existing ordering[" << indexFileName << "]" << endl
108  << endl;
109  valid = false;
110  }
111 
112  return;
113 }
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
KKStr osRemoveExtension(const KKStr &_fullFileName)
MLClassListPtr ExtractListOfClasses() const
const FileDescPtr FileDesc() const
RunLog & Level(kkint32 _level)
Definition: RunLog.cpp:220
Container class for FeatureVector derived objects.
bool Empty() const
Definition: KKStr.h:241
const KKStr & FileName() const
Orderings::~Orderings ( )

Definition at line 185 of file Orderings.cpp.

186 {
187  DeleteOrderings ();
188  delete data;
189 }

Member Function Documentation

OrderingsPtr Orderings::CreateOrderingsObjFromFileIfAvaliable ( const FeatureVectorListPtr  _data,
kkuint32  _numOfOrderings,
kkuint32  _numOfFolds,
RunLog _log 
)
static

Constructs a Orderings object for a specified FeatureVectorList.

Will use FileName from "_data" parameter to derive both 'featureFileName' and 'indexFileName' using the 'FileName' method from FeatureVectorList. If a separate Index file does not exist it will randomly create orderings and save the orderings in a new Index file.

Parameters
[in]_dataFeatureVectorList that we want different orderings of.
[in]_numOfOrderingsExpected number of orderings.
[in]_numOfFoldsNumber of folds each ordering should be stratified by.
[in]_logLogger.

Definition at line 193 of file Orderings.cpp.

References KKB::KKStr::Concat(), KKB::KKStr::Empty(), KKMLL::FeatureVectorList::FileName(), NumOfFolds(), NumOfOrderings(), KKB::KKStr::operator+(), Orderings(), KKB::osRemoveExtension(), Save(), and Valid().

198 {
199  KKStr _featureFileName = _data->FileName ();
200 
201  if (_featureFileName.Empty ())
202  {
203  _log.Level (-1) << endl
204  << "CreateOrderingsObjFromFileIfAvaliable *** ERROR *** FileName empty." << endl
205  << endl;
206  return NULL;
207  }
208 
209  KKStr _indexFileName = osRemoveExtension (_featureFileName) + ".idx";
210 
211  OrderingsPtr orderings = new Orderings (_data, _indexFileName, _numOfOrderings, _numOfFolds, _log);
212  if (orderings->Valid ())
213  {
214  if ((orderings->NumOfOrderings () != _numOfOrderings) ||
215  (orderings->NumOfFolds () != _numOfFolds)
216  )
217  {
218  _log.Level (-1) << endl
219  << "CreateOrderingsObjFromFileIfAvaliable *** ERROR *** Dimension Mismatched." << endl
220  << endl
221  << "Dimensions Expected NumOfOrderings[" << _numOfOrderings << "] NumOfFolds[" << _numOfFolds << "]" << endl
222  << "Dimensions Found NumOfOrderings[" << orderings->NumOfOrderings () << "] NumOfFolds[" << orderings->NumOfFolds () << "]" << endl
223  << endl;
224  delete orderings;
225  return NULL;
226  }
227  }
228  else
229  {
230  delete orderings;
231  orderings = new Orderings (_data, _numOfOrderings, _numOfFolds, _log);
232  if (!orderings->Valid ())
233  {
234  delete orderings;
235  return NULL;
236  }
237  else
238  {
239  orderings->Save ();
240  }
241  }
242 
243  return orderings;
244 } /* CreateOrderingsObjFromFileIfAvaliable */
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
Used to maintain multiple orderings of a single list of FeatureVector objects.
Definition: Orderings.h:58
kkuint32 NumOfFolds() const
Definition: Orderings.h:168
Orderings(const FeatureVectorListPtr _data, kkuint32 _numOfOrderings, kkuint32 _numOfFolds, RunLog &_log)
Constructs Orderings object from ImageFeatursList object.
Definition: Orderings.cpp:25
KKStr osRemoveExtension(const KKStr &_fullFileName)
kkuint32 NumOfOrderings() const
Definition: Orderings.h:169
RunLog & Level(kkint32 _level)
Definition: RunLog.cpp:220
bool Valid() const
Definition: Orderings.h:171
bool Empty() const
Definition: KKStr.h:241
const KKStr & FileName() const
FeatureVectorListPtr KKMLL::Orderings::Data ( ) const
inline

Definition at line 163 of file Orderings.h.

163 {return data;}
const KKStr& KKMLL::Orderings::FeatureFileName ( ) const
inline

Definition at line 164 of file Orderings.h.

164 {return featureFileName;}
const FileDescPtr KKMLL::Orderings::FileDesc ( ) const
inline

Definition at line 165 of file Orderings.h.

165 {return fileDesc;}
const KKStr& KKMLL::Orderings::IndexFileName ( ) const
inline

Definition at line 167 of file Orderings.h.

167 {return indexFileName;}
const MLClassListPtr KKMLL::Orderings::MLClasses ( ) const
inline

Definition at line 166 of file Orderings.h.

Referenced by KKMLL::CrossValidationMxN::RunTrainAndTest(), and KKMLL::CrossValidationMxN::RunValidations().

166 {return mlClasses;}
kkuint32 KKMLL::Orderings::NumOfFolds ( ) const
inline

Definition at line 168 of file Orderings.h.

Referenced by CreateOrderingsObjFromFileIfAvaliable().

168 {return numOfFolds;}
kkuint32 KKMLL::Orderings::NumOfOrderings ( ) const
inline

Definition at line 169 of file Orderings.h.

Referenced by CreateOrderingsObjFromFileIfAvaliable().

169 {return numOfOrderings;}
const FeatureVectorListPtr Orderings::Ordering ( kkuint32  orderingIdx) const

Definition at line 614 of file Orderings.cpp.

Referenced by KKMLL::CrossValidationMxN::RunTrainAndTest(), and KKMLL::CrossValidationMxN::RunValidations().

615 {
616  if ((orderingIdx >= orderings.size ()))
617  {
618  KKStr errMsg;
619  errMsg << "Orderings::Ordering ***ERROR*** Index Out Of Range; Number Of Orderings [" << (kkuint32)orderings.size () << "] OrderingIdx [" << (kkuint32)orderingIdx << "]";
620  cerr << endl << errMsg << endl << endl;
621  throw KKException (errMsg);
622  }
623 
624  return orderings[orderingIdx];
625 } /* Ordering */
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
unsigned __int32 kkuint32
Definition: KKBaseTypes.h:89
void Orderings::Save ( )

Definition at line 551 of file Orderings.cpp.

References KKB::KKStr::Concat(), KKB::KKStr::Empty(), and KKB::KKStr::operator=().

Referenced by CreateOrderingsObjFromFileIfAvaliable(), Orderings(), and Save().

552 {
553  // Build an index by relative location in master list data, so that we can
554  // quickly determine index for other orderings.
555  map<FeatureVectorPtr,kkint32> index;
556  kkint32 idx = 0;
557  for (idx = 0; idx < data->QueueSize (); idx++)
558  {
559  FeatureVectorPtr example = data->IdxToPtr (idx);
560  index.insert (pair<FeatureVectorPtr,kkint32>(example, idx));
561  }
562 
563  KKStr tempName = featureFileName;
564  if (tempName.Empty ())
565  tempName = indexFileName;
566 
567  map<FeatureVectorPtr,kkint32>::const_iterator indexIDX;
568 
569  ofstream o (indexFileName.Str ());
570 
571  o << "//Orderings" << endl;
572  o << "//FeatureFileName" << "\t" << tempName << endl;
573  o << "//NumOfOrderings" << "\t" << numOfOrderings << endl;
574  o << "//NumOfFolds" << "\t" << numOfFolds << endl;
575  o << "//DateCreated" << "\t" << osGetLocalDateTime () << endl;
576  o << "//EndOfHeader" << endl;
577 
578  kkuint32 orderingIDX;
579 
580  for (orderingIDX = 0; orderingIDX < orderings.size (); orderingIDX++)
581  {
582  FeatureVectorListPtr ordering = orderings[orderingIDX];
583  o << "//OrderingNum" << "\t" << orderingIDX << "\t" << "Count" << "\t" << ordering->QueueSize () << endl;
584 
586  for (idx = ordering->begin (); idx != ordering->end (); idx++)
587  {
588  const FeatureVectorPtr example = *idx;
589  indexIDX = index.find (example);
590  if (indexIDX == index.end ())
591  {
592  // We have a very serious problem, for some reason we
593  // could not locate the FeatureVector object in the master list.
594 
595  KKStr errMsg;
596  errMsg << "Orderings::Save ***ERROR*** FileName[" << indexFileName << "] Could not locate Image in data list";
597  cerr << endl << errMsg << endl << endl;
598  throw KKException (errMsg);
599  }
600 
601  o << indexIDX->second << endl;
602  }
603  o << "//EndOfOrdering" << "\t" << orderingIDX << endl;
604 
605  cout << "Saved " << orderingIDX << " of " << orderings.size () << endl;
606  }
607 
608  o.close ();
609 } /* Save */
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
__int32 kkint32
Definition: KKBaseTypes.h:88
KKB::DateTime osGetLocalDateTime()
Returned the current local date and time.
std::vector< FeatureVector * >::const_iterator const_iterator
Definition: KKQueue.h:89
EntryPtr IdxToPtr(kkuint32 idx) const
Definition: KKQueue.h:732
unsigned __int32 kkuint32
Definition: KKBaseTypes.h:89
Container class for FeatureVector derived objects.
bool Empty() const
Definition: KKStr.h:241
const char * Str() const
Returns a pointer to a ascii string.
Definition: KKStr.h:422
kkint32 QueueSize() const
Definition: KKQueue.h:313
Represents a Feature Vector of a single example, labeled or unlabeled.
Definition: FeatureVector.h:59
void Orderings::Save ( const KKStr _indexFileName,
RunLog _log 
)

Definition at line 528 of file Orderings.cpp.

References KKB::KKStr::Empty(), KKB::KKStr::operator=(), KKB::osWaitForEnter(), and Save().

531 {
532  if (indexFileName.Empty ())
533  {
534  // We have a problem, no way of creating a file name.
535  _log.Level (-1) << endl << endl
536  << "Orderings::Save *** ERROR *** No Index File Name Specified." << endl
537  << endl;
538  osWaitForEnter ();
539  exit (-1);
540  return;
541  }
542 
543  indexFileName = _indexFileName;
544  Save ();
545 } /* Save */
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
void osWaitForEnter()
RunLog & Level(kkint32 _level)
Definition: RunLog.cpp:220
bool Empty() const
Definition: KKStr.h:241
kkuint32 KKMLL::Orderings::Size ( ) const
inline

Definition at line 170 of file Orderings.h.

170 {return (kkuint32)orderings.size ();}
unsigned __int32 kkuint32
Definition: KKBaseTypes.h:89
bool KKMLL::Orderings::Valid ( ) const
inline

Definition at line 171 of file Orderings.h.

Referenced by CreateOrderingsObjFromFileIfAvaliable().

171 {return valid;}

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