25 UINT Classifier::numClassifierInstances = 0;
29 StringClassifierMap::iterator iter = getMap()->find( classifierType );
30 if( iter == getMap()->end() ){
33 return iter->second();
43 if( newInstance == NULL )
return NULL;
57 vector< string > registeredClassifiers;
59 StringClassifierMap::iterator iter = getMap()->begin();
60 while( iter != getMap()->end() ){
61 registeredClassifiers.push_back( iter->first );
64 return registeredClassifiers;
68 baseType = MLBase::CLASSIFIER;
69 classifierMode = STANDARD_CLASSIFIER_MODE;
70 classifierType =
"NOT_SET";
71 supportsNullRejection =
false;
72 useNullRejection =
false;
73 numInputDimensions = 0;
74 numOutputDimensions = 1;
76 predictedClassLabel = 0;
80 nullRejectionCoeff = 5;
81 numClassifierInstances++;
85 if( --numClassifierInstances == 0 ){
86 delete stringClassifierMap;
87 stringClassifierMap = NULL;
93 if( classifier == NULL ){
94 errorLog <<
"copyBaseVariables(const Classifier *classifier) - Classifier is NULL!" << endl;
102 this->classifierType = classifier->classifierType;
103 this->classifierMode = classifier->classifierMode;
104 this->supportsNullRejection = classifier->supportsNullRejection;
105 this->useNullRejection = classifier->useNullRejection;
106 this->numClasses = classifier->numClasses;
107 this->predictedClassLabel = classifier->predictedClassLabel;
108 this->nullRejectionCoeff = classifier->nullRejectionCoeff;
109 this->maxLikelihood = classifier->maxLikelihood;
110 this->bestDistance = classifier->bestDistance;
111 this->phase = classifier->phase;
112 this->classLabels = classifier->classLabels;
113 this->classLikelihoods = classifier->classLikelihoods;
114 this->classDistances = classifier->classDistances;
115 this->nullRejectionThresholds = classifier->nullRejectionThresholds;
116 this->ranges = classifier->ranges;
127 predictedClassLabel = GRT_DEFAULT_NULL_CLASS_LABEL;
132 classLikelihoods.clear();
133 classDistances.clear();
134 classLikelihoods.resize(numClasses,0);
135 classDistances.resize(numClasses,0);
146 predictedClassLabel = GRT_DEFAULT_NULL_CLASS_LABEL;
150 classLikelihoods.clear();
151 classDistances.clear();
152 nullRejectionThresholds.clear();
160 return classifierType;
164 return supportsNullRejection;
168 return useNullRejection;
172 return nullRejectionCoeff;
176 if( trained )
return maxLikelihood;
177 return DEFAULT_NULL_LIKELIHOOD_VALUE;
185 if( trained )
return bestDistance;
186 return DEFAULT_NULL_DISTANCE_VALUE;
194 for(UINT i=0; i<classLabels.size(); i++){
195 if( classLabel == classLabels[i] )
202 if( trained )
return predictedClassLabel;
207 if( trained )
return classLikelihoods;
208 return VectorDouble();
212 if( trained )
return classDistances;
213 return VectorDouble();
217 if( trained )
return nullRejectionThresholds;
218 return VectorDouble();
230 this->useNullRejection = useNullRejection;
235 if( nullRejectionCoeff > 0 ){
236 this->nullRejectionCoeff = nullRejectionCoeff;
244 nullRejectionThresholds = newRejectionThresholds;
256 if( !file.is_open() ){
257 errorLog <<
"saveBaseSettingsToFile(fstream &file) - The file is not open!" << endl;
263 file <<
"UseNullRejection: " << useNullRejection << endl;
264 file <<
"ClassifierMode: " << classifierMode << endl;
265 file <<
"NullRejectionCoeff: " << nullRejectionCoeff << endl;
269 file <<
"NumClasses: " << numClasses << endl;
271 file <<
"NullRejectionThresholds: ";
272 if (useNullRejection && nullRejectionThresholds.size()){
273 for(UINT i=0; i<nullRejectionThresholds.size(); i++){
274 file <<
" " << nullRejectionThresholds[i];
278 for(UINT i=0; i<numClasses; i++){
284 file <<
"ClassLabels: ";
285 for(UINT i=0; i<classLabels.size(); i++){
286 file <<
" " << classLabels[i];
291 file <<
"Ranges: " << endl;
292 for(UINT i=0; i<ranges.size(); i++){
293 file << ranges[i].minValue <<
"\t" << ranges[i].maxValue << endl;
303 if( !file.is_open() ){
304 errorLog <<
"loadBaseSettingsFromFile(fstream &file) - The file is not open!" << endl;
317 if( word !=
"UseNullRejection:" ){
318 errorLog <<
"loadBaseSettingsFromFile(fstream &file) - Failed to read UseNullRejection header!" << endl;
322 file >> useNullRejection;
326 if( word !=
"ClassifierMode:" ){
327 errorLog <<
"loadBaseSettingsFromFile(fstream &file) - Failed to read ClassifierMode header!" << endl;
331 file >> classifierMode;
335 if( word !=
"NullRejectionCoeff:" ){
336 errorLog <<
"loadBaseSettingsFromFile(fstream &file) - Failed to read NullRejectionCoeff header!" << endl;
340 file >> nullRejectionCoeff;
347 if( word !=
"NumClasses:" ){
348 errorLog <<
"loadBaseSettingsFromFile(fstream &file) - Failed to read NumClasses header!" << endl;
356 if( word !=
"NullRejectionThresholds:" ){
357 errorLog <<
"loadBaseSettingsFromFile(fstream &file) - Failed to read NullRejectionThresholds header!" << endl;
361 nullRejectionThresholds.resize(numClasses);
362 for(UINT i=0; i<nullRejectionThresholds.size(); i++){
363 file >> nullRejectionThresholds[i];
368 if( word !=
"ClassLabels:" ){
369 errorLog <<
"loadBaseSettingsFromFile(fstream &file) - Failed to read ClassLabels header!" << endl;
373 classLabels.resize( numClasses );
374 for(UINT i=0; i<classLabels.size(); i++){
375 file >> classLabels[i];
381 if( word !=
"Ranges:" ){
382 errorLog <<
"loadBaseSettingsFromFile(fstream &file) - Failed to read Ranges header!" << endl;
386 ranges.resize(numInputDimensions);
388 for(UINT i=0; i<ranges.size(); i++){
389 file >> ranges[i].minValue;
390 file >> ranges[i].maxValue;
const Classifier & getBaseClassifier() const
static Classifier * createInstanceFromString(string const &classifierType)
virtual bool setNullRejectionThresholds(VectorDouble newRejectionThresholds)
const Classifier * getClassifierPointer() const
virtual bool deepCopyFrom(const Classifier *classifier)
bool copyBaseVariables(const Classifier *classifier)
std::map< string, Classifier *(*)() > StringClassifierMap
bool loadBaseSettingsFromFile(fstream &file)
bool saveBaseSettingsToFile(fstream &file) const
bool loadBaseSettingsFromFile(fstream &file)
bool copyMLBaseVariables(const MLBase *mlBase)
virtual UINT getNumClasses() const
VectorDouble getClassLikelihoods() const
Classifier * deepCopy() const
VectorDouble getClassDistances() const
static vector< string > getRegisteredClassifiers()
double getMaximumLikelihood() const
bool saveBaseSettingsToFile(fstream &file) const
UINT getClassLabelIndexValue(UINT classLabel) const
double getNullRejectionCoeff() const
virtual ~Classifier(void)
VectorDouble getNullRejectionThresholds() const
bool getNullRejectionEnabled() const
This is the main base class that all GRT Classification algorithms should inherit from...
double getBestDistance() const
UINT getPredictedClassLabel() const
Classifier * createNewInstance() const
vector< MinMax > getRanges() const
string getClassifierType() const
bool enableNullRejection(bool useNullRejection)
vector< UINT > getClassLabels() const
virtual bool setNullRejectionCoeff(double nullRejectionCoeff)
bool getSupportsNullRejection() const