KSquare Utilities
ClassificationBiasMatrix.h
Go to the documentation of this file.
1 #if !defined(_CLASSIFICATIONBIASMATRIX_)
2 #define _CLASSIFICATIONBIASMATRIX_
3 
4 #include "DateTime.h"
5 #include "KKStr.h"
6 #include "Matrix.h"
7 #include "RunLog.h"
8 
10 #include "MLClass.h"
11 
12 
13 // Job in Life: This module is the Managed version of "DataBaseServer".
14 //
15 // See the paper:
16 // "Estimating the Taxonomic composition of a sample when individuals are classified with error"
17 // by Andrew Solow, Cabll Davis, Qiao Hu
18 // Woods Hole Ocanographic Institution, Woods Hole Massachusetts
19 // Marine Ecology Progresss Series
20 // published 2006-july-06; vol 216:309-311
21 
22 
23 namespace KKMLL
24 {
25  /**
26  *@class ClassificationBiasMatrix
27  *@brief Assists in adjusting a Classifiers output for bias of a classifier.
28  *@details
29  *See the paper:
30  *@code
31  * "Estimating the Taxonomic composition of a sample when individuals are classified with error"
32  * by Andrew Solow, Cabll Davis, Qiao Hu
33  * Woods Hole Ocanographic Institution, Woods Hole Massachusetts
34  * Marine Ecology Progresss Series
35  * published 2006-july-06; vol 216:309-311
36  *@endcode
37  *This class uses the results of a previous 10 fold cross validation confusion matrix to adjust the results of a
38  *classification run. The application CrossValidation will create a parameter file in the directory
39  *"${xxxxxHomeDir}\\Classifier\\TrainingModels\\Save" that contains the confusion matrix. The option "-BiasMatrix"
40  *tells the CrossValidation program to generate this parameter file. It will have the same name as the Configuration
41  *file with the extension ".BiasMatrix.txt" appended to the end. There is a managed version of this class in
42  *PicesInterface called PicesInterface::ClassificationBiasMatrix
43  */
45  {
46  public:
48 
49  typedef KKB::RunLog RunLog;
50  typedef KKB::KKStr KKStr;
51  typedef KKB::DateTime DateTime;
52  typedef KKB::Matrix Matrix;
53  typedef KKB::MatrixPtr MatrixPtr;
54 
55 
56  /**
57  *@brief Will construct a ClassificationBiasMatrix instance from a input stream.
58  *@param[in] f Input Stream.
59  *@param[in] classes List of classes we expect to find in the input stream f.
60  *@param[in,out] log Logging File.
61  */
62  static
64  MLClassList& classes,
65  RunLog& log
66  );
67 
68 
69  /**
70  *@brief Will construct an instance as defined in the Paper.
71  */
72  ClassificationBiasMatrix (RunLog& _runLog);
73 
74 
76 
78  RunLog& _runLog
79  );
80 
81 
82  /**
83  *@brief Construct a ClassificationBiasMatrix instance from the parameter file for '_configFileName'.
84  *@param[in] _configFileName The name of the BiasMatrix file will be derived from the configuration
85  * file name. the term '_BiasMatrix.txt' will be appended onto the end.
86  *@param[in] _classes List of classes that you are expecting to be in the 'BiasMatrix' file.
87  *@param[in,out] _runLog Logging file to use.
88  */
89  ClassificationBiasMatrix (const KKStr& _configFileName,
90  MLClassList& _classes, // List of classes you expect to find in BiasMatrix file.
91  RunLog& _runLog
92  );
93 
94  /**
95  *@brief Construct a ClassificationBiasMatrix instance from a ConfusionMatrix object.
96  *@param[in] cm Confusion Matrix to get parameters from.
97  *@param[in,out] _runLog Logging file to use.
98  */
100  RunLog& _runLog
101  );
102 
104 
105  DateTime DateTimeFileWritten () const {return dateTimeFileWritten;}
106 
107 
108  void PerformAdjustmnts (const VectorDouble& classifiedCounts,
109  VectorDouble& adjCounts,
110  VectorDouble& stdErrors
111  );
112 
113  void PrintBiasMatrix (ostream& sw);
114 
115  void PrintAdjustedResults (ostream& sw,
116  const VectorDouble& classifiedCounts
117  );
118 
119  void TestPaperResults (ostream& sw);
120 
121  void WriteXML (ostream& o);
122 
123 
124  private:
125  void BuildFromConfusionMatrix (const ConfusionMatrix2& cm);
126  void BuildTestMatrix ();
127  void DeclareMatrix ();
128  void ReadXML (istream& r);
129  void ReadSimpleConfusionMatrix (istream& sr,
130  MLClassListPtr fileClasses
131  );
132 
133 
134  KKStr biasFileName;
135  MLClassListPtr classes;
136  KKStr configFileName;
137  KKStr configFileNameFromMatrixBiasFile;
138  DateTime configDateTime; /**< TimeStamp of config file when this BiasMatrix was written. */
139  MatrixPtr counts;
140  DateTime dateTimeFileWritten;
141  VectorKKStr errMsgs;
142  kkint32 numClasses;
143  MatrixPtr probabilities;
144  RunLog& runLog;
145  bool valid;
146  };
147 
148  typedef ClassificationBiasMatrix::ClassificationBiasMatrixPtr ClassificationBiasMatrixPtr;
149 } /* namespace KKMLL */
150 #endif
ClassificationBiasMatrix(const ClassificationBiasMatrix &cbm)
void PerformAdjustmnts(const VectorDouble &classifiedCounts, VectorDouble &adjCounts, VectorDouble &stdErrors)
__int32 kkint32
Definition: KKBaseTypes.h:88
ClassificationBiasMatrix(const KKStr &_configFileName, MLClassList &_classes, RunLog &_runLog)
Construct a ClassificationBiasMatrix instance from the parameter file for &#39;_configFileName&#39;.
void PrintAdjustedResults(ostream &sw, const VectorDouble &classifiedCounts)
ClassificationBiasMatrix(const ConfusionMatrix2 &cm, RunLog &_runLog)
Construct a ClassificationBiasMatrix instance from a ConfusionMatrix object.
ClassificationBiasMatrix(MLClassList &classes, RunLog &_runLog)
Assists in adjusting a Classifiers output for bias of a classifier.
Supports two dimensional matrices.
Definition: Matrix.h:46
static ClassificationBiasMatrixPtr BuildFromIstreamXML(istream &f, MLClassList &classes, RunLog &log)
Will construct a ClassificationBiasMatrix instance from a input stream.
KKTHread * KKTHreadPtr
static KKStr Concat(const std::vector< std::string > &values)
Concatenates the list of &#39;std::string&#39; strings.
Definition: KKStr.cpp:1082
Used for logging messages.
Definition: RunLog.h:49
void EncodeProblem(const struct svm_paramater &param, struct svm_problem &prob_in, struct svm_problem &prob_out)
MLClassList * MLClassListPtr
Definition: MLClass.h:49
Maintains a list of MLClass instances.
Definition: MLClass.h:233
ClassificationBiasMatrix * ClassificationBiasMatrixPtr
A confusion matrix object that is used to record the results from a CrossValidation. <see also cref="CrossValidation"
std::vector< double > VectorDouble
Vector of doubles.
Definition: KKBaseTypes.h:148
ClassificationBiasMatrix(RunLog &_runLog)
Will construct an instance as defined in the Paper.