25 using namespace KKMLL;
35 binaryParmsList (NULL),
43 useProbabilityToBreakTies (
false),
46 if (_selectedFeatures)
48 ParseCmdLine (_cmdLineStr, _validFormat, _log);
57 binaryParmsList (NULL),
64 selectedFeatures (NULL),
66 useProbabilityToBreakTies (
false),
77 binaryParmsList (NULL),
78 encodingMethod (_svmParam.encodingMethod),
79 fileName
(_svmParam.fileName
),
80 machineType (_svmParam.machineType),
81 param
(_svmParam.param
),
82 probClassPairs (_svmParam.probClassPairs),
83 samplingRate (_svmParam.samplingRate),
84 selectedFeatures (_svmParam.selectedFeatures),
85 selectionMethod (_svmParam.selectionMethod),
86 useProbabilityToBreakTies (_svmParam.useProbabilityToBreakTies),
87 validParam (_svmParam.validParam)
89 if (_svmParam.selectedFeatures)
92 if (_svmParam.binaryParmsList)
99 param
= _svmParam.param;
106 delete binaryParmsList; binaryParmsList = NULL;
107 delete selectedFeatures; selectedFeatures = NULL;
114 if (!selectedFeatures)
119 return selectedFeatures;
127 if (selectedFeatures)
133 return memoryConsumedEstimated;
140 delete selectedFeatures;
147 delete selectedFeatures;
155 kkuint32 numClasses = assignments.size ();
159 kkuint32 numPairs = numClasses * (numClasses - 1) / 2;
160 probClassPairs.clear ();
161 if (binaryParmsList == NULL)
163 for (kkuint32 x = 0; x < numPairs; ++x)
164 probClassPairs.push_back (param.A);
168 for (
kkuint32 class1IDX = 0; class1IDX < (numClasses - 1); ++class1IDX)
171 for (
kkuint32 class2IDX = class1IDX + 1; class2IDX < numClasses; ++class2IDX)
174 BinaryClassParmsPtr bcp = binaryParmsList
->LookUp (class1
, class2
);
176 probClassPairs.push_back ((
float)bcp->AParam ());
178 probClassPairs.push_back ((
float)param.A);
209 parameterUsed =
true;
212 KKStr field = parameter;
223 parameterUsed =
true;
225 if ((field
== "-ENCODE"))
230 else if (field
== "-MT")
235 _validFormat =
false;
236 log.Level (-1) << endl
237 <<
"SVMparam::ParseCmdLineParameter *** ERROR ***" << endl
238 <<
" Invalid -MT Parm[" << value <<
"]" << endl
243 else if ((field
== "-SM") || (field
== "-SELECTIONMETHOD"))
248 log.Level (-1) << endl
249 <<
"SVMparam::ParseCmdLineParameter *** ERROR ***" << endl
250 <<
" Invalid SelectionMethod (-SM)[" << value <<
"]." << endl
252 _validFormat =
false;
256 else if ((field
== "-SR") || (field
== "-SAMPLINGRATE"))
258 samplingRate =
float (atof (value.Str ()));
262 else if ((field
== "-UP") || (field
== "-USEPROBABILITY"))
264 useProbabilityToBreakTies =
true;
270 parameterUsed =
false;
296 useProbabilityToBreakTies =
false;
303 while (!field
.Empty () && _validFormat)
307 _log.Level (-1) <<
"SVMparam::ParseCmdLine *** Invalid Parameter[" 310 _validFormat =
false;
317 if (_cmdLineStr
.Len () > 0)
323 valueNum = atof (value.Str ());
330 bool parameterUsed =
false;
334 _log.Level (-1) <<
"SVMparam::ParseCmdLine - Invalid Parameter[" 335 << field <<
"] Value[" << value <<
"]." 337 _validFormat =
false;
344 validParam = _validFormat;
382 cmdStr <<
" -SamplingRate " << samplingRate;
385 if (useProbabilityToBreakTies)
386 cmdStr <<
" -UseProbability";
398 BinaryClassParmsPtr twoClassComboParms = NULL;
400 if (binaryParmsList == NULL)
403 twoClassComboParms = NULL;
407 twoClassComboParms = binaryParmsList
->LookUp (class1
, class2
);
410 if (!twoClassComboParms)
416 return twoClassComboParms;
427 if (binaryParmsList == NULL)
438 return selectedFeatures;
445 if (selectedFeatures == NULL)
448 return selectedFeatures;
458 if (!binaryParmsList)
465 BinaryClassParmsPtr twoClassComboParm = binaryParmsList
->LookUp (class1
, class2
);
466 if (!twoClassComboParm)
477 if (!binaryParmsList)
487 float avgNumOfFeatures = 0.0f;
492 if (avgNumOfFeatures == 0.0f)
495 return avgNumOfFeatures;
511 if (!selectedFeatures)
519 kkint32 totalNumFeaturesUsed = 0;
529 for (idx1 = 0; idx1 < (stats->size() - 1); idx1++)
535 for (idx2 = idx1 + 1; idx2 < (stats->size()); idx2++)
541 kkint32 numFeaturesThisCombo = 0;
546 kkint32 numExamplesThisCombo = class1Qty + class2Qty;
548 totalNumFeaturesUsed += numFeaturesThisCombo * numExamplesThisCombo;
549 toatlNumExamples += numExamplesThisCombo;
552 delete stats; stats = NULL;
553 return (
float)totalNumFeaturesUsed / (
float)toatlNumExamples;
555 else if (!selectedFeatures)
571 if (!selectedFeatures)
578 if (!selectedFeatures)
582 kkint32 numFeaturesAfterEncoding = 0;
588 for (z = 0; z < numOfFeaturesSelected; z++)
596 numFeaturesAfterEncoding ++;
608 return numFeaturesAfterEncoding;
620 if (!binaryParmsList)
628 BinaryClassParmsPtr binaryParms = binaryParmsList
->LookUp (_class1
, _class2
);
648 delete selectedFeatures;
657 delete selectedFeatures;
667 if (!binaryParmsList)
670 <<
"SVMparam::C_Param ***ERROR*** 'binaryParmsList' is not defined." << endl
675 BinaryClassParmsPtr binaryParms = binaryParmsList
->LookUp (class1
, class2
);
679 <<
"SVMparam::C_Param ***ERROR*** No entry for Class[" << class1->Name () <<
", " << class2->Name () <<
"]" << endl
685 return binaryParms
->C ();
697 if (!binaryParmsList)
700 <<
"SVMparam::C_Param ***ERROR*** 'binaryParmsList' is not defined." << endl
705 BinaryClassParmsPtr binaryParms = binaryParmsList
->LookUp (class1
, class2
);
714 binaryParms
->C (cParam
);
728 if (!binaryParmsList)
734 BinaryClassParmsPtr binaryParms = binaryParmsList
->LookUp (_class1
, _class2
);
783 headerFields
->Add ("FileName", fileName
);
785 if (selectedFeatures)
789 headerFields
->Add ("samplingRate", samplingRate
);
793 headerFields
->Add ("useProbabilityToBreakTies", useProbabilityToBreakTies
);
801 XmlElementVectorFloat::WriteXML (probClassPairs,
"probClassPairs", o);
822 while (t && (!cancelFlag))
829 if (kvp && (kvp->Value() != NULL))
831 for (
auto idx: *(kvp->Value ()))
833 if (idx.first.EqualIgnoreCase (
"EncodingMethod"))
834 encodingMethod = EncodingMethodFromStr (idx.second);
836 else if (idx.first.EqualIgnoreCase (
"FileName"))
837 fileName = idx.second;
839 else if (idx.first.EqualIgnoreCase (
"MachineType"))
840 machineType = MachineTypeFromStr (idx.second);
842 else if (idx.first.EqualIgnoreCase (
"SelectedFeatures"))
844 bool successful =
false;
845 selectedFeatures =
new FeatureNumList (idx.second, successful);
848 else if (idx.first.EqualIgnoreCase (
"Param"))
849 param.ParseTabDelStr (idx.second);
851 else if (idx.first.EqualIgnoreCase (
"SamplingRate"))
852 samplingRate = idx.second.ToFloat ();
854 else if (idx.first.EqualIgnoreCase (
"SelectionMethod"))
855 selectionMethod = SelectionMethodFromStr (idx.second);
857 else if (idx.first.EqualIgnoreCase (
"UseProbabilityToBreakTies"))
858 useProbabilityToBreakTies = idx.second.ToBool ();
862 log.Level (-1) << endl
863 <<
"SVMparam::ReadXML ***ERROR*** UnRecognozed Header Field: " << idx.first <<
":" << idx.second << endl
903 if ((encodingMethodUpper
== "BINARY") || (encodingMethodUpper
== "BIN"))
906 if (encodingMethodUpper
== "SCALE")
909 if (encodingMethodUpper
== "NONE")
924 default:
return "UnKnown";
934 KKStr kernalTypeUpper = kernalTypeStr;
937 if ((kernalTypeUpper
== "LINEAR") ||
938 (kernalTypeUpper
== "LIN") ||
939 (kernalTypeUpper
== "L")
943 if ((kernalTypeUpper
== "POLYNOMIAL") ||
944 (kernalTypeUpper
== "POLY") ||
945 (kernalTypeUpper
== "P") ||
946 (kernalTypeUpper
== "PN")
951 if ((kernalTypeUpper
== "RBF") ||
952 (kernalTypeUpper
== "R") ||
953 (kernalTypeUpper
== "RADIALBASIS") ||
954 (kernalTypeUpper
== "RADIALBASISFUNC") ||
955 (kernalTypeUpper
== "RADIALBASISFUNCTION")
990 if (machineTypeUpper
== "ONEVSONE")
993 else if (machineTypeUpper
== "ONEVSALL")
996 else if (machineTypeUpper
== "BINARY")
999 else if (machineTypeUpper
== "BOOSTSVM")
1014 return "Probability";
1026 if ((selectionMethodUpper
== "VOTE") || (selectionMethodUpper
== "VOTING"))
1029 if ((selectionMethodUpper
== "P") ||
1030 (selectionMethodUpper
== "PROB") ||
1031 (selectionMethodUpper
== "PROBABILITY")
__int16 kkint16
16 bit signed integer.
KKStr(kkint32 size)
Creates a KKStr object that pre-allocates space for 'size' characters.
XmlTag(const KKStr &_name, TagTypes _tagType)
KKStr SvmParamToString(const svm_parameter &_param) const
Convert a svm_parameter struct to a cmdline str.
char operator[](kkint16 i) const
bool EqualIgnoreCase(const char *s2) const
BinaryClassParms(MLClassPtr _class1, MLClassPtr _class2, const svm_parameter &_param, FeatureNumListConstPtr _selectedFeatures, float _weight)
Constructor for 'BinaryClassParms' where caller supplies the two classes and parameters for that spec...
void ParseCmdLineParameter(const KKStr ¶meter, const KKStr &value, bool ¶meterUsed, bool &_validFormat, RunLog &log)
kkint32 MemoryConsumedEstimated() const
FeatureNumListConstPtr SelectedFeatures() const
void SetBinaryClassFields(MLClassPtr _class1, MLClassPtr _class2, const svm_parameter &_param, FeatureNumListConstPtr _features, float _weight)
MLClassPtr MLClass() const
void ProbClassPairsInitialize(const ClassAssignments &assignments)
Similar to SVMparam except it is specialized for two classes.
void Add(const KKStr &key, float v)
MLClassPtr GetMLClass(kkint16 num) const
Keeps track of selected features.
FeatureNumList(FileDescPtr _fileDesc)
kkint32 NumOfFeaturesAfterEncoding(FileDescPtr fileDesc, RunLog &log) const
BinaryClassParmsPtr LookUp(MLClassPtr _class1, MLClassPtr _class2) const
KKMLL::AttributeType Type(kkint32 fieldNum) const
KKStr ExtractToken(const char *delStr="\n\t\r ")
void SelectedFeatures(FeatureNumListConst &_selectedFeatures)
KKStr EncodingMethodToStr(SVM_EncodingMethod encodingMethod)
FeatureNumListConstPtr GetFeatureNums(FileDescPtr fileDesc) const
SVMparam(const SVMparam &_svmParam)
KKStr ToCmdLineStr() const
void AddBinaryClassParms(BinaryClassParmsPtr binaryClassParms)
void Weight(float _weight)
KKStr KernalTypeToStr(SVM_KernalType kernalType)
BinaryClassParmsPtr GetParamtersToUseFor2ClassCombo(MLClassPtr class1, MLClassPtr class2)
const FileDescPtr FileDesc() const
SVM_EncodingMethod EncodingMethodFromStr(const KKStr &encodingMethodStr)
SVM_MachineType MachineTypeFromStr(const KKStr &machineTypeStr)
bool operator==(const char *rtStr) const
BinaryClassParmsList(bool _owner)
double C_Param(MLClassPtr class1, MLClassPtr class2) const
void SetFeatureNums(MLClassPtr _class1, MLClassPtr _class2, FeatureNumListConstPtr _features, float _weight=-1)
Sets the selected Features and Weight for the binary class SVM specified by _class1 and _class2...
ClassStatistic * ClassStatisticPtr
float AvgMumOfFeatures(FileDescPtr fileDesc) const
SVM_EncodingMethod EncodingMethod() const
void Param(const svm_parameter &_param)
unsigned __int32 kkuint32
SVMparam(KKStr &_cmdLineStr, FeatureNumListConstPtr _selectedFeatures, bool &_validFormat, RunLog &_log)
void SetFeatureNums(FeatureNumListConstPtr _features)
float FeatureCountNet(FileDescPtr fileDesc) const
Returns the Average number of selected features.
FeatureNumList(const FeatureNumList &featureNumList)
Copy constructor.
void Add(const KKStr &key, bool v)
KKStr & operator=(KKStr &&src)
kkuint32 Len() const
Returns the number of characters in the string.
KKStr ToString() const
Convert all parameters to a command line string.
svm_parameter(KKStr ¶mStr)
kkuint16 operator[](kkint32 idx) const
Returns back the selected feature.
KKStr operator+(const char *left, const KKStr &right)
void Add(const KKStr &key, const KKStr &v)
KKStr(const KKStr &str)
Copy Constructor.
void AddAtribute(const KKStr &attributeName, const KKStr &attributeValue)
kkint32 NumOfFeatures() const
void SelectedFeatures(FeatureNumListConstPtr _selectedFeatures)
void TrimLeft(const char *whiteSpaceChars="\n\r\t ")
FeatureNumListConstPtr GetFeatureNums() const
KKStr ToTabDelStr() const
XmlTag const * XmlTagConstPtr
Manages the reading and writing of objects in a simple XML format. For a class to be supported by Xml...
virtual void WriteXML(const KKStr &varName, std::ostream &o) const
void SetAllFeatures(FileDescPtr fileDesc)
Selects all features except those flagged as 'IgnoreAttribute' in the associated FileDesc.
Binds MLClass objects to the appropriate number that the Learning Algorithm expects.
BinaryClassParmsPtr GetBinaryClassParms(MLClassPtr class1, MLClassPtr class2)
KKStr MachineTypeToStr(SVM_MachineType machineType)
static KKStr Concat(const std::vector< std::string > &values)
Concatenates the list of 'std::string' strings.
ClassStatisticListPtr GetClassStatistics() const
Returns the number of FeatureVectors per class.
void Upper()
Converts all characters in string to their Upper case equivalents via 'toupper'.
SVM_SelectionMethod SelectionMethodFromStr(const KKStr &selectionMethodStr)
This class encapsulates are the information necessary to build a SVMModel class.
SVM_KernalType KernalTypeFromStr(const KKStr &kernalTypeStr)
virtual void PushOnBack(BinaryClassParmsPtr binaryParms)
virtual void ReadXML(XmlStream &s, XmlTagConstPtr tag, VolConstBool &cancelFlag, RunLog &log)
void C_Param(MLClassPtr class1, MLClassPtr class2, double cParam)
ClassStatisticList * ClassStatisticListPtr
void SetFeatureNums(FeatureNumListConst &_features)
XmlElementKeyValuePairs * XmlElementKeyValuePairsPtr
kkint32 MemoryConsumedEstimated() const
KKStr ToString() const
Returns comma delimited list of all features selected; will make use of range specification.
kkint32 NumSelFeatures() const
void ProcessSvmParameter(KKStr cmd, KKStr value, double valueNum, bool &parmUsed)
float AvgNumOfFeatures(FeatureVectorListPtr trainExamples) const
Returns back the class weighted average number of features per training example.
void SelectedFeatures(FeatureNumListConstPtr _selectedFeatures)
void AddBinaryClassParms(MLClassPtr _class1, MLClassPtr _class2, const svm_parameter &_param, FeatureNumListConstPtr _selectedFeatures, float _weight)
Adding parameters that are specific to a class pair; this is used when using the BFS version of SVM...
void WriteXML(std::ostream &o)
FeatureNumListConst * FeatureNumListConstPtr
KKStr SelectionMethodToStr(SVM_SelectionMethod selectionMethod)
Used for logging messages.
BinaryClassParmsList * DuplicateListAndContents() const
void EncodeProblem(const struct svm_paramater ¶m, struct svm_problem &prob_in, struct svm_problem &prob_out)
svm_parameter & operator=(const svm_parameter &right)
virtual XmlTokenPtr GetNextToken(VolConstBool &cancelFlag, RunLog &log)
kkint32 Cardinality(kkint32 fieldNum) const
svm_parameter(const svm_parameter ¶meters)
FeatureNumListConstPtr GetFeatureNums(FileDescPtr fileDesc, MLClassPtr class1, MLClassPtr class2) const
virtual void WriteXML(const KKStr &varName, std::ostream &o) const
XmlElementKeyValuePairs()
Used to construct an instance that will be written out to a XML file.
kkint32 MemoryConsumedEstimated() const
FeatureNumListConstPtr SelectedFeaturesFD(FileDescPtr fileDesc) const
virtual const KKStr & VarName() const
#define XmlFactoryMacro(NameOfClass)
kkint32 MemoryConsumedEstimated() const
FeatureNumListConstPtr SelectedFeatures(FileDescPtr fileDesc) const
void WriteXML(const KKStr &varName, std::ostream &o)
volatile const bool VolConstBool