/** * @file testFPClassifier.cpp * @brief main program for classifier evaluation * @author Erik Rodner * @date 2007-10-12 */ #include #include #include #include #include //---------- #include #include #include #include #include #include #include #include #include //---------- #undef DEBUG using namespace OBJREC; using namespace NICE; using namespace std; int main ( int argc, char **argv ) { fprintf ( stderr, "testClassifier: init\n" ); std::set_terminate ( __gnu_cxx::__verbose_terminate_handler ); Config conf ( argc, argv ); FPCGPHIK *classifier = new FPCGPHIK ( &conf, "ClassiferGPHIK" ); string trainfn = conf.gS ( "data", "trainfile" ); string testfn = conf.gS ( "data", "testfile" ); Examples trainex; ifstream intrain ( trainfn.c_str() ); int parts = 0; while ( intrain.good() ) { string line; getline ( intrain, line ); vector split; StringTools::split ( line, ' ', split ); if ( split.size() == 0 ) break; if ( parts > 0 ) assert ( parts == ( int ) split.size() ); parts = split.size(); int classno = atoi ( split[0].c_str() ); SparseVector *sv = new SparseVector(); for ( uint i = 1; i < split.size();i++ ) { vector split2; StringTools::split ( split[i], ':', split2 ); assert ( split2.size() == 2 ); ( *sv ) [atoi ( split2[0].c_str() ) ] = atof ( split2[1].c_str() ); } Example example; example.vec = NULL; example.svec = sv; trainex.push_back ( pair ( classno, example ) ); } cout << "trainex.size(): " << trainex.size() << endl; Examples testex; ifstream intest ( testfn.c_str() ); parts = 0; while ( intest.good() ) { string line; getline ( intest, line ); vector split; StringTools::split ( line, ' ', split ); if ( split.size() == 0 ) break; if ( parts > 0 ) assert ( parts == ( int ) split.size() ); parts = split.size(); int classno = atoi ( split[0].c_str() ); SparseVector *sv = new SparseVector(); for ( uint i = 1; i < split.size();i++ ) { vector split2; StringTools::split ( split[i], ':', split2 ); assert ( split2.size() == 2 ); double val = atof (split2[1].c_str()); if(val != 0.0) ( *sv ) [atoi ( split2[0].c_str() ) ] = val; } Example example; example.vec = NULL; example.svec = sv; testex.push_back ( pair ( classno, example ) ); } cout << "testex.size(): " << testex.size() << endl; FeaturePool fp; classifier->train ( fp, trainex ); int counter = 0; for ( uint e = 0; e < testex.size(); e++ ) { ClassificationResult r = classifier->classify ( testex[e].second ); int bestclass = 0; double bestval = r.scores[0]; for ( int j = 1 ; j < r.scores.size(); j++ ) { if(r.scores[j] > bestval) { bestclass = j; bestval = r.scores[j]; } } if(bestclass == testex[e].first) counter++; } cout << "avg: " << (double)counter/(double)testex.size() << endl; return 0; }