21 #define GRT_DLL_EXPORTS
27 UINT Classifier::numClassifierInstances = 0;
31 StringClassifierMap::iterator iter =
getMap()->find( classifierType );
32 if( iter ==
getMap()->end() ){
35 return iter->second();
45 if( newInstance == NULL )
return NULL;
61 StringClassifierMap::iterator iter =
getMap()->begin();
62 while( iter !=
getMap()->end() ){
63 registeredClassifiers.push_back( iter->first );
66 return registeredClassifiers;
70 baseType = MLBase::CLASSIFIER;
71 classifierMode = STANDARD_CLASSIFIER_MODE;
72 classifierType =
"NOT_SET";
73 supportsNullRejection =
false;
74 useNullRejection =
false;
75 numInputDimensions = 0;
76 numOutputDimensions = 1;
78 predictedClassLabel = 0;
82 nullRejectionCoeff = 5;
83 numClassifierInstances++;
87 if( --numClassifierInstances == 0 ){
88 delete stringClassifierMap;
89 stringClassifierMap = NULL;
95 if( classifier == NULL ){
96 errorLog <<
"copyBaseVariables(const Classifier *classifier) - Classifier is NULL!" << std::endl;
104 this->classifierType = classifier->classifierType;
105 this->classifierMode = classifier->classifierMode;
106 this->supportsNullRejection = classifier->supportsNullRejection;
107 this->useNullRejection = classifier->useNullRejection;
108 this->numClasses = classifier->numClasses;
109 this->predictedClassLabel = classifier->predictedClassLabel;
110 this->nullRejectionCoeff = classifier->nullRejectionCoeff;
111 this->maxLikelihood = classifier->maxLikelihood;
112 this->bestDistance = classifier->bestDistance;
113 this->phase = classifier->phase;
114 this->classLabels = classifier->classLabels;
115 this->classLikelihoods = classifier->classLikelihoods;
116 this->classDistances = classifier->classDistances;
117 this->nullRejectionThresholds = classifier->nullRejectionThresholds;
118 this->ranges = classifier->ranges;
129 predictedClassLabel = GRT_DEFAULT_NULL_CLASS_LABEL;
134 classLikelihoods.clear();
135 classDistances.clear();
136 classLikelihoods.
resize(numClasses,0);
137 classDistances.
resize(numClasses,0);
148 predictedClassLabel = GRT_DEFAULT_NULL_CLASS_LABEL;
152 classLikelihoods.clear();
153 classDistances.clear();
154 nullRejectionThresholds.clear();
162 return classifierType;
166 return supportsNullRejection;
170 return useNullRejection;
174 return nullRejectionCoeff;
178 if( trained )
return maxLikelihood;
187 if( trained )
return bestDistance;
188 return DEFAULT_NULL_DISTANCE_VALUE;
196 for(UINT i=0; i<classLabels.size(); i++){
197 if( classLabel == classLabels[i] )
204 if( trained )
return predictedClassLabel;
209 if( trained )
return classLikelihoods;
214 if( trained )
return classDistances;
219 if( trained )
return nullRejectionThresholds;
232 this->useNullRejection = useNullRejection;
237 if( nullRejectionCoeff > 0 ){
238 this->nullRejectionCoeff = nullRejectionCoeff;
246 nullRejectionThresholds = newRejectionThresholds;
258 if( !file.is_open() ){
259 errorLog <<
"saveBaseSettingsToFile(fstream &file) - The file is not open!" << std::endl;
265 file <<
"UseNullRejection: " << useNullRejection << std::endl;
266 file <<
"ClassifierMode: " << classifierMode << std::endl;
267 file <<
"NullRejectionCoeff: " << nullRejectionCoeff << std::endl;
271 file <<
"NumClasses: " << numClasses << std::endl;
273 file <<
"NullRejectionThresholds: ";
274 if (useNullRejection && nullRejectionThresholds.size()){
275 for(UINT i=0; i<nullRejectionThresholds.size(); i++){
276 file <<
" " << nullRejectionThresholds[i];
280 for(UINT i=0; i<numClasses; i++){
286 file <<
"ClassLabels: ";
287 for(UINT i=0; i<classLabels.size(); i++){
288 file <<
" " << classLabels[i];
293 file <<
"Ranges: " << std::endl;
294 for(UINT i=0; i<ranges.size(); i++){
295 file << ranges[i].minValue <<
"\t" << ranges[i].maxValue << std::endl;
305 if( !file.is_open() ){
306 errorLog <<
"loadBaseSettingsFromFile(fstream &file) - The file is not open!" << std::endl;
319 if( word !=
"UseNullRejection:" ){
320 errorLog <<
"loadBaseSettingsFromFile(fstream &file) - Failed to read UseNullRejection header!" << std::endl;
324 file >> useNullRejection;
328 if( word !=
"ClassifierMode:" ){
329 errorLog <<
"loadBaseSettingsFromFile(fstream &file) - Failed to read ClassifierMode header!" << std::endl;
333 file >> classifierMode;
337 if( word !=
"NullRejectionCoeff:" ){
338 errorLog <<
"loadBaseSettingsFromFile(fstream &file) - Failed to read NullRejectionCoeff header!" << std::endl;
342 file >> nullRejectionCoeff;
349 if( word !=
"NumClasses:" ){
350 errorLog <<
"loadBaseSettingsFromFile(fstream &file) - Failed to read NumClasses header!" << std::endl;
358 if( word !=
"NullRejectionThresholds:" ){
359 errorLog <<
"loadBaseSettingsFromFile(fstream &file) - Failed to read NullRejectionThresholds header!" << std::endl;
363 nullRejectionThresholds.
resize(numClasses);
364 for(UINT i=0; i<nullRejectionThresholds.size(); i++){
365 file >> nullRejectionThresholds[i];
370 if( word !=
"ClassLabels:" ){
371 errorLog <<
"loadBaseSettingsFromFile(fstream &file) - Failed to read ClassLabels header!" << std::endl;
375 classLabels.
resize( numClasses );
376 for(UINT i=0; i<classLabels.size(); i++){
377 file >> classLabels[i];
383 if( word !=
"Ranges:" ){
384 errorLog <<
"loadBaseSettingsFromFile(fstream &file) - Failed to read Ranges header!" << std::endl;
388 ranges.
resize(numInputDimensions);
390 for(UINT i=0; i<ranges.size(); i++){
391 file >> ranges[i].minValue;
392 file >> ranges[i].maxValue;
bool saveBaseSettingsToFile(std::fstream &file) const
bool saveBaseSettingsToFile(std::fstream &file) const
#define DEFAULT_NULL_LIKELIHOOD_VALUE
Classifier * deepCopy() const
Vector< UINT > getClassLabels() const
Vector< MinMax > getRanges() const
VectorFloat getNullRejectionThresholds() const
std::string getClassifierType() const
virtual UINT getNumClasses() const
virtual bool resize(const unsigned int size)
const Classifier * getClassifierPointer() const
static StringClassifierMap * getMap()
UINT getClassLabelIndexValue(UINT classLabel) const
Float getNullRejectionCoeff() const
virtual bool deepCopyFrom(const Classifier *classifier)
bool getSupportsNullRejection() const
virtual bool setNullRejectionThresholds(VectorFloat newRejectionThresholds)
bool getNullRejectionEnabled() const
UINT getPredictedClassLabel() const
bool copyMLBaseVariables(const MLBase *mlBase)
Float getBestDistance() const
static Classifier * createInstanceFromString(std::string const &classifierType)
bool copyBaseVariables(const Classifier *classifier)
virtual ~Classifier(void)
bool loadBaseSettingsFromFile(std::fstream &file)
Float getMaximumLikelihood() const
This is the main base class that all GRT Classification algorithms should inherit from...
bool loadBaseSettingsFromFile(std::fstream &file)
virtual bool setNullRejectionCoeff(Float nullRejectionCoeff)
VectorFloat getClassDistances() const
static Vector< std::string > getRegisteredClassifiers()
VectorFloat getClassLikelihoods() const
std::map< std::string, Classifier *(*)() > StringClassifierMap
bool enableNullRejection(bool useNullRejection)
Classifier * createNewInstance() const
const Classifier & getBaseClassifier() const