You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
2.9 KiB
C++
120 lines
2.9 KiB
C++
#include <set>
|
|
#include "../thirdparty/boost/archive/text_oarchive.hpp"
|
|
#include "../thirdparty/boost/archive/text_iarchive.hpp"
|
|
#include "../thirdparty/boost/serialization/set.hpp"
|
|
#include <ostream>
|
|
#include "parameterresult.h"
|
|
#include <string>
|
|
|
|
struct svm_problem;
|
|
struct svm_parameter;
|
|
|
|
using namespace std;
|
|
|
|
|
|
typedef multiset<ParameterResult*, lessthan> ResultsSet;
|
|
|
|
struct RangeParameters
|
|
{
|
|
float fParam1Min;
|
|
float fParam1Max;
|
|
float fParam1Step;
|
|
bool bParam1UseLog;
|
|
|
|
float fParam2Min;
|
|
float fParam2Max;
|
|
float fParam2Step;
|
|
bool bParam2UseLog;
|
|
|
|
// members below could be moved to a derived class
|
|
float fParam1RefinementFactor;
|
|
float fParam2RefinementFactor;
|
|
int nLevels; // alternatively have a minimum refined step for each param
|
|
|
|
template<class Archive>
|
|
void serialize(Archive & ar, const unsigned int version)
|
|
{
|
|
ar & fParam1Min;
|
|
ar & fParam1Max;
|
|
ar & fParam1Step;
|
|
ar & bParam1UseLog;
|
|
ar & fParam2Min;
|
|
ar & fParam2Max;
|
|
ar & fParam2Step;
|
|
ar & bParam2UseLog;
|
|
ar & fParam1RefinementFactor;
|
|
ar & fParam2RefinementFactor;
|
|
}
|
|
|
|
// friend ostream& operator<<(ostream &os, const RangeParameters &rp);
|
|
friend ostream& operator<<(ostream &os, const RangeParameters &rp)
|
|
{
|
|
os << rp.fParam1Min << endl;
|
|
os << rp.fParam1Max << endl;
|
|
os << rp.fParam1Step << endl;
|
|
os << rp.bParam1UseLog << endl;
|
|
os << rp.fParam2Min << endl;
|
|
os << rp.fParam2Max << endl;
|
|
os << rp.fParam2Step << endl;
|
|
os << rp.bParam2UseLog << endl;
|
|
os << rp.fParam1RefinementFactor << endl;
|
|
os << rp.fParam2RefinementFactor << endl;
|
|
return os;
|
|
/* return os << rp.fParam1Min
|
|
<< rp.fParam1Max
|
|
<< rp.fParam1Step
|
|
<< rp.bParam1UseLog
|
|
<< rp.fParam2Min
|
|
<< rp.fParam2Max
|
|
<< rp.fParam2Step
|
|
<< rp.bParam2UseLog
|
|
<< rp.fParam1RefinementFactor
|
|
<< rp.fParam2RefinementFactor;*/
|
|
}
|
|
};
|
|
|
|
|
|
/*class SearchParameters : class RangeParameters
|
|
{
|
|
public:
|
|
float fRefinementFactor;
|
|
};*/
|
|
|
|
class CParameterSearch
|
|
{
|
|
public:
|
|
|
|
CParameterSearch(svm_problem* pProb, svm_parameter* pSvmParam, std::string);
|
|
~CParameterSearch();
|
|
|
|
bool SearchRange(ParameterResult* pResult, RangeParameters&);
|
|
bool GetRefinedParameters(int nLevel, float fParam1, float fParam2, RangeParameters& paramsOut);
|
|
ParameterResult* GetNextResult();
|
|
|
|
svm_problem* m_pProblem;
|
|
svm_parameter* m_pSvmParam;
|
|
ResultsSet m_searchResults;
|
|
RangeParameters m_rangeParameters;
|
|
|
|
|
|
private:
|
|
friend class boost::serialization::access;
|
|
friend std::ostream & operator<<(std::ostream &os, const CParameterSearch &ps);
|
|
|
|
template<class Archive>
|
|
void serialize(Archive & ar, const unsigned int version)
|
|
{
|
|
ar.register_type(static_cast<ParameterResult *>(NULL));
|
|
ar & m_rangeParameters;
|
|
ar & m_searchResults;
|
|
}
|
|
|
|
void ResetSerialization();
|
|
void SerializeData();
|
|
void SaveTextResults();
|
|
|
|
std::ofstream* m_pofs;
|
|
boost::archive::text_oarchive* m_pOA;
|
|
std::string m_strFilename;
|
|
};
|