19 using namespace KKMLL;
27 const svm_parameter& _param,
34 selectedFeatures (NULL),
37 if (_selectedFeatures)
45 class1 (binaryClassParms.class1),
46 class2 (binaryClassParms.class2),
47 param
(binaryClassParms.param
),
48 selectedFeatures (NULL),
49 weight (binaryClassParms.weight)
51 if (binaryClassParms.selectedFeatures)
59 delete selectedFeatures;
60 selectedFeatures = NULL;
72 delete selectedFeatures;
79 delete selectedFeatures;
108 if (!selectedFeatures)
110 return selectedFeatures;
122 if (selectedFeatures)
123 result <<
"SelectedFeatures" <<
"\t" << selectedFeatures
->ToString () <<
"\t";
125 result <<
"Weight" <<
"\t" << weight;
138 svm_parameter* svm_param = NULL;
149 if (field
== "CLASS1")
154 else if (field
== "CLASS2")
159 else if (field
== "SVM_PARAMETER")
161 svm_param =
new svm_parameter
(value
);
164 else if (field
== "SELECTEDFEATURES")
170 else if (field ==
"WEIGHT")
171 weight =
float (atof (value.Str ()));
176 delete selectedFeatures; selectedFeatures = NULL;
177 delete svm_param; svm_param = NULL;
179 return binaryClassParms;
189 if (selectedFeatures)
192 return memoryConsumedEstimated;
212 KKQueue<BinaryClassParms> (binaryClassList)
236 BinaryClassParmsList::const_iterator idx;
237 for (idx = begin (); idx != end (); ++idx)
238 memoryConsumedEstimated += (*idx)->MemoryConsumedEstimated ();
239 return memoryConsumedEstimated;
251 return binaryClassParmsList;
263 return binaryClassParmsList;
281 for (idx = begin (); idx != end (); idx++)
283 const BinaryClassParmsPtr bcp = *idx;
287 return (
float)featureCountTotal / (
float)size ();
297 KeyField kf (_class1, _class2);
298 ClassIndexType::const_iterator idx;
299 idx = classIndex.find (kf);
300 if (idx == classIndex.end ())
304 idx = classIndex.find (kf);
307 if (idx == classIndex.end ())
320 for (const_iterator idx = begin (); idx != end (); idx++)
322 BinaryClassParmsPtr e = *idx;
326 return duplicatedQueue;
334 o <<
"<BinaryClassParmsList>" << endl;
338 for (idx = begin (); idx != end (); idx++)
340 o <<
"<BinaryClassParms>" <<
"\t" 341 << (*idx)->ToTabDelString ().QuotedStr () <<
"\t" 342 <<
"</BinaryClassParms>" 346 o <<
"</BinaryClassParmsList>" << endl;
360 while (fgets (buff,
sizeof (buff), i))
364 KKStr field = ln.ExtractQuotedStr (
"\n\r\t",
true);
367 if (field ==
"</BINARYCLASSPARMSLIST>")
372 else if (field ==
"<BINARYCLASSPARMS>")
374 KKStr binaryClassParmsStr = ln.ExtractQuotedStr (
"\n\r\t",
true);
375 PushOnBack (BinaryClassParms::CreateFromTabDelStr (binaryClassParmsStr, log));
392 while (i.getline (buff,
sizeof (buff)))
396 KKStr field = ln.ExtractQuotedStr (
"\n\r\t",
true);
399 if (field ==
"</BINARYCLASSPARMSLIST>")
404 else if (field ==
"<BINARYCLASSPARMS>")
406 KKStr binaryClassParmsStr = ln.ExtractQuotedStr (
"\n\r\t",
true);
407 PushOnBack (BinaryClassParms::CreateFromTabDelStr (binaryClassParmsStr, log));
423 errMsg <<
"BinaryClassParmsList::PushOnBack ***ERROR*** Duplicate Entry " << binaryParms->Class1Name () <<
"\t" << binaryParms->Class2Name () << endl;
424 cerr << errMsg << endl;
428 KKQueue<BinaryClassParms>::PushOnBack (binaryParms);
430 classIndex.insert(ClassIndexPair (kf, binaryParms));
443 errMsg <<
"BinaryClassParmsList::PushOnFront ***ERROR*** Duplicate Entry " << binaryParms->Class1Name () <<
"\t" << binaryParms->Class2Name () << endl;
444 cerr << errMsg << endl;
448 KKQueue<BinaryClassParms>::PushOnFront (binaryParms);
450 classIndex.insert(ClassIndexPair (kf, binaryParms));
500 for (
auto idx : *
this)
502 XmlContent::WriteXml (idx->ToTabDelString (), o);
525 bool errorsFound =
false;
527 while (t && (!cancelFlag) && (!errorsFound))
KKStr(kkint32 size)
Creates a KKStr object that pre-allocates space for 'size' characters.
XmlTag(const KKStr &_name, TagTypes _tagType)
kkint32 MemoryConsumedEstimated() 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 SelectedFeatures(const FeatureNumListConst &_selectedFeatures)
Similar to SVMparam except it is specialized for two classes.
decision_function svm_train_one(const svm_problem *prob, const svm_parameter *param, double Cp, double Cn, std::set< kkint32 > &BSVIndex)
Keeps track of selected features.
FeatureNumList(FileDescPtr _fileDesc)
BinaryClassParmsPtr LookUp(MLClassPtr _class1, MLClassPtr _class2) const
virtual void ReadXML(XmlStream &s, XmlTagConstPtr tag, VolConstBool &cancelFlag, RunLog &log)
KKStr ToCmdLineStr() const
static BinaryClassParmsListPtr CreateFromXML(std::istream &i, FileDescPtr fileDesc, RunLog &log)
KKStr ToTabDelString() const
unsigned __int16 kkuint16
16 bit unsigned integer.
Represents a "Class" in the Machine Learning Sense.
kkuint16 NumOfFeatures(FileDescPtr fileDesc) const
XmlContent * XmlContentPtr
bool operator==(const char *rtStr) const
BinaryClassParmsList(bool _owner)
void ReadXML(std::istream &i, FileDescPtr fileDesc, RunLog &log)
static BinaryClassParmsListPtr CreateFromXML(std::FILE *i, FileDescPtr fileDesc, RunLog &log)
unsigned __int32 kkuint32
float FeatureCountNet(FileDescPtr fileDesc) const
Returns the Average number of selected features.
FeatureNumList(const FeatureNumList &featureNumList)
Copy constructor.
svm_parameter(KKStr ¶mStr)
BinaryClassParms(const BinaryClassParms &binaryClassParms)
void WriteXML(std::ostream &o) const
FeatureNumList * FeatureNumListPtr
KKStr(const KKStr &str)
Copy Constructor.
void AddAtribute(const KKStr &attributeName, const KKStr &attributeValue)
kkint32 NumOfFeatures() const
void SelectedFeatures(FeatureNumListConstPtr _selectedFeatures)
XmlTag const * XmlTagConstPtr
BinaryClassParmsList * BinaryClassParmsListPtr
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
BinaryClassParmsList(const BinaryClassParmsList &binaryClassList, bool _owner)
static KKStr Concat(const std::vector< std::string > &values)
Concatenates the list of 'std::string' strings.
void Upper()
Converts all characters in string to their Upper case equivalents via 'toupper'.
virtual void PushOnBack(BinaryClassParmsPtr binaryParms)
KKStr ExtractQuotedStr(const char *delChars, bool decodeEscapeCharacters)
MLClassPtr Class2() const
const KKStr & Name() const
void ReadXML(FILE *i, FileDescPtr fileDesc, RunLog &log)
kkint32 MemoryConsumedEstimated() const
KKStr ToString() const
Returns comma delimited list of all features selected; will make use of range specification.
static MLClassPtr CreateNewMLClass(const KKStr &_name, kkint32 _classId=-1)
Static method used to create a new instance of a MLClass object.
FeatureNumList(const KKStr &_featureListStr, bool &_valid)
Constructs a 'FeatureNumList' instance from a string that contains a list of selected features...
static BinaryClassParmsPtr CreateFromTabDelStr(const KKStr &_str, RunLog &_log)
void WriteXML(std::ostream &o)
FeatureNumListConst * FeatureNumListConstPtr
KKStrPtr const Content() const
Used for logging messages.
BinaryClassParmsList * DuplicateListAndContents() const
void EncodeProblem(const struct svm_paramater ¶m, struct svm_problem &prob_in, struct svm_problem &prob_out)
bool operator<(const KKStr &right) const
virtual void PushOnFront(BinaryClassParmsPtr binaryParms)
virtual TokenTypes TokenType()=0
kkint32 Compare(const KKStr &s2) const
virtual XmlTokenPtr GetNextToken(VolConstBool &cancelFlag, RunLog &log)
KKException(const KKStr &_exceptionStr)
svm_parameter(const svm_parameter ¶meters)
BinaryClassParms * BinaryClassParmsPtr
kkint32 MemoryConsumedEstimated() const
kkint32 MemoryConsumedEstimated() const
FeatureNumListConstPtr SelectedFeaturesFD(FileDescPtr fileDesc) const
#define XmlFactoryMacro(NameOfClass)
MLClassPtr Class1() const
volatile const bool VolConstBool