diff options
author | Patrick Simianer <p@simianer.de> | 2011-08-29 22:02:45 +0200 |
---|---|---|
committer | Patrick Simianer <p@simianer.de> | 2011-09-23 19:13:58 +0200 |
commit | aceb387526478e34e41db6c046f707234953e0b5 (patch) | |
tree | 3cb19b9f1c3390d52c4a732e22a3b31b52e4f483 /dtrain/learner.h | |
parent | 2001f2c1c96049b78f9aa5aaa05aeca26e3fc55a (diff) |
big update: working iterating, pretty output, test scripts and more
Diffstat (limited to 'dtrain/learner.h')
-rw-r--r-- | dtrain/learner.h | 96 |
1 files changed, 0 insertions, 96 deletions
diff --git a/dtrain/learner.h b/dtrain/learner.h deleted file mode 100644 index 038749e2..00000000 --- a/dtrain/learner.h +++ /dev/null @@ -1,96 +0,0 @@ -#ifndef _DTRAIN_LEARNER_H_ -#define _DTRAIN_LEARNER_H_ - -#include <string> -#include <vector> -#include <map> - -#include "sparse_vector.h" -#include "score.h" - - -namespace dtrain -{ - - -class Learner -{ - public: - virtual void Init( const vector<SparseVector<double> >& kbest, const Scores& scores, - const bool invert_score = false ) {}; - virtual void Update( SparseVector<double>& lambdas ) {}; -}; - - -class SofiaLearner : public Learner -{ - public: - void - Init( const size_t sid, const vector<SparseVector<double> >& kbest, /*const FIXME*/ Scores& scores, - const bool invert_score = false ) - { - assert( kbest.size() == scores.size() ); - ofstream o; - unlink( "/tmp/sofia_ml_training" ); - o.open( "/tmp/sofia_ml_training", ios::trunc ); // TODO randomize, filename exists - int fid = 0; - map<int,int>::iterator ff; - - double score; - for ( size_t k = 0; k < kbest.size(); ++k ) { - map<int,double> m; - SparseVector<double>::const_iterator it = kbest[k].begin(); - score = scores[k].GetScore(); - if ( invert_score ) score = -score; - o << score; - for ( ; it != kbest[k].end(); ++it ) { - ff = fmap.find( it->first ); - if ( ff == fmap.end() ) { - fmap.insert( pair<int,int>(it->first, fid) ); - fmap1.insert( pair<int,int>(fid, it->first) ); - fid++; - } - m.insert( pair<int,double>(fmap[it->first], it->second) ); - } - map<int,double>::iterator ti = m.begin(); - for ( ; ti != m.end(); ++ti ) { - o << " " << ti->first << ":" << ti->second; - } - o << endl; - } - o.close(); - } - - void - Update(SparseVector<double>& lambdas) - { - string call = "./sofia-ml --training_file /tmp/sofia_ml_training --model_out /tmp/sofia_ml_model --loop_type stochastic --lambda 100 --dimensionality "; - std::stringstream out; - out << fmap.size(); - call += out.str(); - call += " &>/dev/null"; - system ( call.c_str() ); - ifstream i; - unlink( "/tmp/sofia_ml_model" ); - i.open( "/tmp/sofia_ml_model", ios::in ); - string model; - getline( i, model ); - vector<string> strs; - boost::split( strs, model, boost::is_any_of(" ") ); - int j = 0; - for ( vector<string>::iterator it = strs.begin(); it != strs.end(); ++it ) { - lambdas.set_value(fmap1[j], atof( it->c_str() ) ); - j++; - } - } - - private: - map<int,int> fmap; - map<int,int> fmap1; -}; - - -} // namespace - -#endif - |