KSquare Utilities
SVMparam.h
Go to the documentation of this file.
1 #ifndef _SVMPARAM_
2 #define _SVMPARAM_
3 
4 
6 #include "FeatureNumList.h"
7 #include "FileDesc.h"
8 #include "KKStr.h"
9 #include "MLClass.h"
10 #include "RunLog.h"
11 #include "svm.h"
12 using namespace SVM233;
13 
14 
15 namespace KKMLL
16 {
17 
18  #ifndef _BINARYCLASSPARMS_
19  class BinaryClassParms;
20  typedef BinaryClassParms* BinaryClassParmsPtr;
22  typedef BinaryClassParmsList* BinaryClassParmsListPtr;
23  #endif
24 
25 
26  enum class SVM_MachineType: int
27  {Null,
28  OneVsOne,
29  OneVsAll,
31  BoostSVM
32  };
33 
34  enum class SVM_SelectionMethod: int
35  {Null,
36  Voting,
38  };
39 
40 
41  /***
42  *SVM_EncodingMethod refers to how Nominal and Symbolic features encoded.
43  *BinaryEncoding
44  */
45 
46  enum class SVM_EncodingMethod: int
47  {Null,
48  NoEncoding,
49  Binary,
50  Scaled
51  };
52 
53 
54  enum class SVM_KernalType: int
55  {Null,
56  Linear,
57  Polynomial,
58  RBF
59  };
60 
61 
62  #if !defined(_FeatureVectorList_Defined_)
63  class FeatureVectorList;
65  #endif
66 
67 
68  /**
69  *@brief This class encapsulates are the information necessary to build a SVMModel class.
70  *@see SVMModel
71  *@see SVM233
72  *@see BinaryClassParms
73  */
74  class SVMparam
75  {
76  public:
77  SVMparam (KKStr& _cmdLineStr,
78  FeatureNumListConstPtr _selectedFeatures, /**< Will make own instance; caller maintains ownership status. */
79  bool& _validFormat,
80  RunLog& _log
81  );
82 
83 
84  SVMparam ();
85 
86  SVMparam (const SVMparam& _svmParam);
87 
88  ~SVMparam ();
89 
90  void AddBinaryClassParms (BinaryClassParmsPtr binaryClassParms);
91 
92  /**@brief Adding parameters that are specific to a class pair; this is used when using the BFS version of SVM. */
93  void AddBinaryClassParms (MLClassPtr _class1, /**< First of two classes that is being added to this model. */
94  MLClassPtr _class2, /**< Second of two classes that is being added to this model. */
95  const svm_parameter& _param, /**< Parameters that are to be used by two-class classifier. */
96  FeatureNumListConstPtr _selectedFeatures, /**< makes own copy; caller will retain ownership status. */
97  float _weight /**< You can specify the weight that you want to give to this
98  * binary-class SVM when voting or computing probability.
99  */
100  );
101 
102  float AvgMumOfFeatures (FileDescPtr fileDesc) const;
103  float AvgNumOfFeatures (FeatureVectorListPtr trainExamples) const;
104 
105 
106  /** If binary class parms don't exist will return NULL. */
107  BinaryClassParmsPtr GetBinaryClassParms (MLClassPtr class1,
108  MLClassPtr class2
109  );
110 
111  BinaryClassParmsPtr GetParamtersToUseFor2ClassCombo (MLClassPtr class1,
112  MLClassPtr class2
113  );
114 
116 
118 
120  MLClassPtr class1,
121  MLClassPtr class2
122  ) const;
123 
124  void ProcessSvmParameter (svm_parameter& _param,
125  KKStr cmd,
126  KKStr value,
127  double valueNum,
128  bool& parmUsed
129  );
130 
131  // Member access methods
132  float A_Param () const {return param.A;}
133 
134  const
135  BinaryClassParmsListPtr BinaryParmsList () const {return binaryParmsList;}
136 
137  double C_Param () const {return param.C;}
138 
139  double C_Param (MLClassPtr class1,
140  MLClassPtr class2
141  ) const;
142 
143  SVM_EncodingMethod EncodingMethod () const {return encodingMethod;}
144 
145  float FeatureCountNet () const;
146 
147  double Gamma () const {return param.Gamma ();}
148 
150 
151  SVM_MachineType MachineType () const {return machineType;}
152 
154 
156  RunLog& log
157  ) const;
158 
159  const svm_parameter& Param () const {return param;}
160 
161  const VectorFloat& ProbClassPairs () const {return probClassPairs;}
162 
163  float SamplingRate () const {return samplingRate;}
164 
165  FeatureNumListConstPtr SelectedFeatures () const {return selectedFeatures;}
166 
168 
169  SVM_SelectionMethod SelectionMethod () const {return selectionMethod;}
170 
171  bool UseProbabilityToBreakTies () const {return useProbabilityToBreakTies;}
172 
173 
174  // Member update methods
175  void A_Param (float _A);
176  void C_Param (double _CC);
177 
178  void C_Param (MLClassPtr class1,
179  MLClassPtr class2,
180  double cParam
181  );
182  void EncodingMethod (SVM_EncodingMethod _encodingMethod) {encodingMethod = _encodingMethod;}
183  void Gamma (double _gamma) {param.Gamma (_gamma);}
184  void Gamma_Param (double _gamma) {Gamma (_gamma);}
185  void KernalType (SVM_KernalType _kernalType) {param.KernalType ((int)_kernalType);}
186 
187  void MachineType (SVM_MachineType _machineType) {machineType = _machineType;}
188  void SamplingRate (float _samplingRate) {samplingRate = _samplingRate;}
189  void SelectedFeatures (FeatureNumListConst& _selectedFeatures);
190  void SelectedFeatures (FeatureNumListConstPtr _selectedFeatures);
191 
192 
193 
194  void SetBinaryClassFields (MLClassPtr _class1, /**< First of two classes that is being added to this model. */
195  MLClassPtr _class2, /**< Second of two classes that is being added to this model. */
196  const svm_parameter& _param, /**< Parameters that are to be used by two-class classifier. */
197  FeatureNumListConstPtr _features, /**< makes own copy; caller will retain ownership status. */
198  float _weight /**< You can specify the weight that you want to give to this
199  * binary-class SVM when voting or computing probability.
200  */
201  );
202 
203  void SetFeatureNums (FeatureNumListConstPtr _features);
204 
205  void SetFeatureNums (FeatureNumListConst& _features);
206 
207 
208  /**
209  *@brief Sets the selected Features and Weight for the binary class SVM specified by _class1 and _class2.
210  *@details If this pair has not been defined yet will create a new entry and add to list of Binary-Class-Pair's.
211  */
212  void SetFeatureNums (MLClassPtr _class1, /**< First of two classes to set features for. */
213  MLClassPtr _class2, /**< Second of two classes to set features for. */
214  FeatureNumListConstPtr _features, /**< Makes own copy; caller will retain ownership status. */
215  float _weight = -1 /**< -1 Indicates use existing value. */
216  );
217 
218  void SelectionMethod (SVM_SelectionMethod _selectionMethod) {selectionMethod = _selectionMethod;}
219 
220 
221  // Other Methods
222  KKStr SvmParamToString (const svm_parameter& _param) const;
223 
224  KKStr ToString () const;
225 
226 
227  void ParseCmdLineParameter (const KKStr& parameter,
228  const KKStr& value,
229  bool& parameterUsed,
230  bool& _validFormat,
231  RunLog& log
232  );
233 
234  void ProbClassPairsInitialize (const ClassAssignments& assignments);
235 
236 
237  virtual void ReadXML (XmlStream& s,
238  XmlTagConstPtr tag,
239  VolConstBool& cancelFlag,
240  RunLog& log
241  );
242 
243 
244  virtual void WriteXML (const KKStr& varName,
245  std::ostream& o
246  ) const;
247 
248 
249  private:
250  //void DecodeParamStr (KKStr& _paramStr,
251  // svm_parameter& _param
252  // );
253 
254  void ParseCmdLine (KKStr _cmdLineStr,
255  bool& _validFormat,
256  RunLog& _log
257  );
258 
259  BinaryClassParmsListPtr binaryParmsList;
260 
261  SVM_EncodingMethod encodingMethod;
262 
263  KKStr fileName;
264 
265  SVM_MachineType machineType;
266 
267  svm_parameter param; // From SVMlib2
268 
269  VectorFloat probClassPairs;
270 
271  float samplingRate; // USed with BoostSVM
272 
273  mutable
274  FeatureNumListPtr selectedFeatures; /**< Feature Numbers to use. */
275 
276  SVM_SelectionMethod selectionMethod;
277 
278  bool useProbabilityToBreakTies; // When true use the probability function to break
279  // voting ties.
280 
281  bool validParam;
282 
283  }; /* SVMparam */
284 
285 
287 
288 
290  KKStr KernalTypeToStr (SVM_KernalType kernalType);
291  KKStr MachineTypeToStr (SVM_MachineType machineType);
293 
294 
295  SVM_EncodingMethod EncodingMethodFromStr (const KKStr& encodingMethodStr);
296  SVM_KernalType KernalTypeFromStr (const KKStr& kernalTypeStr);
297  SVM_MachineType MachineTypeFromStr (const KKStr& machineTypeStr);
298  SVM_SelectionMethod SelectionMethodFromStr (const KKStr& selectionMethodStr);
299 
300 
301 
304 
305 } /* namespace KKMLL */
306 
307 
308 
309 #endif
KKStr SvmParamToString(const svm_parameter &_param) const
Convert a svm_parameter struct to a cmdline str.
Definition: SVMparam.cpp:353
const BinaryClassParmsListPtr BinaryParmsList() const
Definition: SVMparam.h:135
void Gamma_Param(double _gamma)
Definition: SVMparam.h:184
kkint32 KernalType() const
Definition: svm.h:118
double Gamma() const
Definition: svm.h:117
void ParseCmdLineParameter(const KKStr &parameter, const KKStr &value, bool &parameterUsed, bool &_validFormat, RunLog &log)
Definition: SVMparam.cpp:202
SVM_SelectionMethod
Definition: SVMparam.h:34
__int32 kkint32
Definition: KKBaseTypes.h:88
SVM_KernalType
Definition: SVMparam.h:54
FeatureNumListConstPtr SelectedFeatures() const
Definition: SVMparam.h:165
void SetBinaryClassFields(MLClassPtr _class1, MLClassPtr _class2, const svm_parameter &_param, FeatureNumListConstPtr _features, float _weight)
Definition: SVMparam.cpp:721
void ProbClassPairsInitialize(const ClassAssignments &assignments)
Definition: SVMparam.cpp:153
float A_Param() const
Definition: SVMparam.h:132
Similar to SVMparam except it is specialized for two classes.
XmlElementTemplate< SVMparam > XmlElementSVMparam
Definition: SVMparam.h:302
decision_function svm_train_one(const svm_problem *prob, const svm_parameter *param, double Cp, double Cn, std::set< kkint32 > &BSVIndex)
Definition: svm.cpp:3154
kkint32 NumOfFeaturesAfterEncoding(FileDescPtr fileDesc, RunLog &log) const
Definition: SVMparam.cpp:567
SVM_MachineType
Definition: SVMparam.h:26
void SelectedFeatures(FeatureNumListConst &_selectedFeatures)
KKStr EncodingMethodToStr(SVM_EncodingMethod encodingMethod)
FeatureNumListConstPtr GetFeatureNums(FileDescPtr fileDesc) const
Definition: SVMparam.cpp:443
SVMparam(const SVMparam &_svmParam)
Definition: SVMparam.cpp:75
void AddBinaryClassParms(BinaryClassParmsPtr binaryClassParms)
Definition: SVMparam.cpp:475
void A_Param(float _A)
Definition: SVMparam.cpp:187
KKStr KernalTypeToStr(SVM_KernalType kernalType)
Definition: SVMparam.cpp:917
BinaryClassParmsPtr GetParamtersToUseFor2ClassCombo(MLClassPtr class1, MLClassPtr class2)
Definition: SVMparam.cpp:394
SVM_EncodingMethod EncodingMethodFromStr(const KKStr &encodingMethodStr)
Definition: SVMparam.cpp:899
FeatureNumList const FeatureNumListConst
SVM_KernalType KernalType() const
Definition: SVMparam.h:149
SVM_MachineType MachineTypeFromStr(const KKStr &machineTypeStr)
Definition: SVMparam.cpp:986
double C_Param(MLClassPtr class1, MLClassPtr class2) const
Definition: SVMparam.cpp:663
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...
Definition: SVMparam.cpp:614
float SamplingRate() const
Definition: SVMparam.h:163
const VectorFloat & ProbClassPairs() const
Definition: SVMparam.h:161
SVMparam * SVMparamPtr
Definition: SVMparam.h:286
SVM_MachineType MachineType() const
Definition: SVMparam.h:151
SVM_EncodingMethod
Definition: SVMparam.h:46
float AvgMumOfFeatures(FileDescPtr fileDesc) const
Definition: SVMparam.cpp:485
void Gamma(double _gamma)
Definition: SVMparam.h:183
void MachineType(SVM_MachineType _machineType)
Definition: SVMparam.h:187
SVM_EncodingMethod EncodingMethod() const
Definition: SVMparam.h:143
void SelectionMethod(SVM_SelectionMethod _selectionMethod)
Definition: SVMparam.h:218
SVMparam(KKStr &_cmdLineStr, FeatureNumListConstPtr _selectedFeatures, bool &_validFormat, RunLog &_log)
Definition: SVMparam.cpp:29
void SetFeatureNums(FeatureNumListConstPtr _features)
Definition: SVMparam.cpp:655
void KernalType(SVM_KernalType _kernalType)
Definition: SVMparam.h:185
double C_Param() const
Definition: SVMparam.h:137
void EncodingMethod(SVM_EncodingMethod _encodingMethod)
Definition: SVMparam.h:182
KKStr ToString() const
Convert all parameters to a command line string.
Definition: SVMparam.cpp:368
void SamplingRate(float _samplingRate)
Definition: SVMparam.h:188
FeatureNumList * FeatureNumListPtr
FeatureNumListConstPtr GetFeatureNums() const
Definition: SVMparam.cpp:436
XmlTag const * XmlTagConstPtr
Definition: KKStr.h:45
std::vector< float > VectorFloat
Definition: KKBaseTypes.h:149
Manages the reading and writing of objects in a simple XML format. For a class to be supported by Xml...
Definition: XmlStream.h:46
void KernalType(kkint32 _kernalType)
Definition: svm.h:115
Binds MLClass objects to the appropriate number that the Learning Algorithm expects.
#define _FeatureVectorList_Defined_
BinaryClassParmsPtr GetBinaryClassParms(MLClassPtr class1, MLClassPtr class2)
Definition: SVMparam.cpp:423
KKStr MachineTypeToStr(SVM_MachineType machineType)
Definition: SVMparam.cpp:965
static KKStr Concat(const std::vector< std::string > &values)
Concatenates the list of &#39;std::string&#39; strings.
Definition: KKStr.cpp:1082
SVM_SelectionMethod SelectionMethodFromStr(const KKStr &selectionMethodStr)
Definition: SVMparam.cpp:1022
float FeatureCountNet() const
This class encapsulates are the information necessary to build a SVMModel class.
Definition: SVMparam.h:74
SVM_KernalType KernalTypeFromStr(const KKStr &kernalTypeStr)
Definition: SVMparam.cpp:932
void ProcessSvmParameter(svm_parameter &_param, KKStr cmd, KKStr value, double valueNum, bool &parmUsed)
FileDesc * FileDescPtr
virtual void ReadXML(XmlStream &s, XmlTagConstPtr tag, VolConstBool &cancelFlag, RunLog &log)
Definition: SVMparam.cpp:815
void C_Param(MLClassPtr class1, MLClassPtr class2, double cParam)
Definition: SVMparam.cpp:692
void SetFeatureNums(FeatureNumListConst &_features)
SVM_SelectionMethod SelectionMethod() const
Definition: SVMparam.h:169
float AvgNumOfFeatures(FeatureVectorListPtr trainExamples) const
Returns back the class weighted average number of features per training example.
Definition: SVMparam.cpp:508
bool UseProbabilityToBreakTies() const
Definition: SVMparam.h:171
void SelectedFeatures(FeatureNumListConstPtr _selectedFeatures)
Definition: SVMparam.cpp:145
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...
Definition: SVMparam.cpp:756
double Gamma() const
Definition: SVMparam.h:147
FeatureNumListConst * FeatureNumListConstPtr
KKStr SelectionMethodToStr(SVM_SelectionMethod selectionMethod)
Definition: SVMparam.cpp:1008
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)
XmlElementSVMparam * XmlElementSVMparamPtr
Definition: SVMparam.h:303
FeatureNumListConstPtr GetFeatureNums(FileDescPtr fileDesc, MLClassPtr class1, MLClassPtr class2) const
Definition: SVMparam.cpp:453
FeatureVectorList * FeatureVectorListPtr
Definition: Model.h:46
virtual void WriteXML(const KKStr &varName, std::ostream &o) const
Definition: SVMparam.cpp:769
const svm_parameter & Param() const
Definition: SVMparam.h:159
void C_Param(double _CC)
Definition: SVMparam.cpp:195
kkint32 MemoryConsumedEstimated() const
Definition: SVMparam.cpp:124
FeatureNumListConstPtr SelectedFeatures(FileDescPtr fileDesc) const
Definition: SVMparam.cpp:112
volatile const bool VolConstBool
Definition: KKBaseTypes.h:163
void Gamma(double _gamma)
Definition: svm.h:114