parametersearch.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #include <set>
  2. #include "../thirdparty/boost/archive/text_oarchive.hpp"
  3. #include "../thirdparty/boost/archive/text_iarchive.hpp"
  4. #include "../thirdparty/boost/serialization/set.hpp"
  5. #include <ostream>
  6. #include "parameterresult.h"
  7. #include <string>
  8. struct svm_problem;
  9. struct svm_parameter;
  10. using namespace std;
  11. typedef multiset<ParameterResult*, lessthan> ResultsSet;
  12. struct RangeParameters
  13. {
  14. float fParam1Min;
  15. float fParam1Max;
  16. float fParam1Step;
  17. bool bParam1UseLog;
  18. float fParam2Min;
  19. float fParam2Max;
  20. float fParam2Step;
  21. bool bParam2UseLog;
  22. // members below could be moved to a derived class
  23. float fParam1RefinementFactor;
  24. float fParam2RefinementFactor;
  25. int nLevels; // alternatively have a minimum refined step for each param
  26. template<class Archive>
  27. void serialize(Archive & ar, const unsigned int version)
  28. {
  29. ar & fParam1Min;
  30. ar & fParam1Max;
  31. ar & fParam1Step;
  32. ar & bParam1UseLog;
  33. ar & fParam2Min;
  34. ar & fParam2Max;
  35. ar & fParam2Step;
  36. ar & bParam2UseLog;
  37. ar & fParam1RefinementFactor;
  38. ar & fParam2RefinementFactor;
  39. }
  40. // friend ostream& operator<<(ostream &os, const RangeParameters &rp);
  41. friend ostream& operator<<(ostream &os, const RangeParameters &rp)
  42. {
  43. os << rp.fParam1Min << endl;
  44. os << rp.fParam1Max << endl;
  45. os << rp.fParam1Step << endl;
  46. os << rp.bParam1UseLog << endl;
  47. os << rp.fParam2Min << endl;
  48. os << rp.fParam2Max << endl;
  49. os << rp.fParam2Step << endl;
  50. os << rp.bParam2UseLog << endl;
  51. os << rp.fParam1RefinementFactor << endl;
  52. os << rp.fParam2RefinementFactor << endl;
  53. return os;
  54. /* return os << rp.fParam1Min
  55. << rp.fParam1Max
  56. << rp.fParam1Step
  57. << rp.bParam1UseLog
  58. << rp.fParam2Min
  59. << rp.fParam2Max
  60. << rp.fParam2Step
  61. << rp.bParam2UseLog
  62. << rp.fParam1RefinementFactor
  63. << rp.fParam2RefinementFactor;*/
  64. }
  65. };
  66. /*class SearchParameters : class RangeParameters
  67. {
  68. public:
  69. float fRefinementFactor;
  70. };*/
  71. class CParameterSearch
  72. {
  73. public:
  74. CParameterSearch(svm_problem* pProb, svm_parameter* pSvmParam, std::string);
  75. ~CParameterSearch();
  76. bool SearchRange(ParameterResult* pResult, RangeParameters&);
  77. bool GetRefinedParameters(int nLevel, float fParam1, float fParam2, RangeParameters& paramsOut);
  78. ParameterResult* GetNextResult();
  79. svm_problem* m_pProblem;
  80. svm_parameter* m_pSvmParam;
  81. ResultsSet m_searchResults;
  82. RangeParameters m_rangeParameters;
  83. private:
  84. friend class boost::serialization::access;
  85. friend std::ostream & operator<<(std::ostream &os, const CParameterSearch &ps);
  86. template<class Archive>
  87. void serialize(Archive & ar, const unsigned int version)
  88. {
  89. ar.register_type(static_cast<ParameterResult *>(NULL));
  90. ar & m_rangeParameters;
  91. ar & m_searchResults;
  92. }
  93. void ResetSerialization();
  94. void SerializeData();
  95. void SaveTextResults();
  96. std::ofstream* m_pofs;
  97. boost::archive::text_oarchive* m_pOA;
  98. std::string m_strFilename;
  99. };