NaiveBayesGibbs::NaiveBayesGibbs(std::string trainDir, std::string testDir, int parameter, int interval): DIRICHLET_HYPERPARAMETER(parameter), INTERVAL(interval) { //get all train files std::cout << "loading all files..." << std::endl; numCategories_ = stasticsFiles(trainDir, true); for (int c=0; c<numCategories_; c++) categoryFiles_.push_back(0); stasticsFiles(testDir, false); std::cout << "load "<< trainFiles_.size() << " files for train..." << std::endl; std::cout << "load "<< testFiles_.size() << " files for test..." << std::endl; std::cout << "num categories : " << numCategories_ << std::endl; //init sampling labels; std::cout << "init sampling labels..." << std::endl; initLabels(); //init sampling theta std::cout << "init sampling theta..." << std::endl; stasticsWords(); updateTheta(0); const int numTrainFiles = trainFiles_.size(); const double Z = (numTrainFiles + numCategories_*DIRICHLET_HYPERPARAMETER -1); logLabelNorm = log(Z); }
NaiveBayesModel NaiveBayesGibbs::train(int numIter) { double accuracy2 = checkMLE(); std::cout << "start training..." << std::endl; for (int t=1; t<=numIter; t++)//number iteration { std::cout << Utils::getTime() << " update theta" << std::endl; updateTheta(t); double accuracy = check(); std::cout << Utils::getTime() << " Iteratation num " << t << " Accuracy " << accuracy << " maximum likelihood " << accuracy2 << std::endl; std::cout << "dirichlet hyperparameter : " << DIRICHLET_HYPERPARAMETER << std::endl; } return NaiveBayesModel(numCategories_, labelNames_, thetaHistory_); }
void updateTheta(int *seed, const int *nTry, int *nAccept, const double *epsilon, double *theta, const int *Q, const int *G, const double *phi, const double *lambda) { unsigned int seedU = (unsigned int) *seed; updateTheta(&seedU,*nTry,nAccept,*epsilon,theta,*Q,*G,phi,lambda); *seed = (int) seedU; return; }
/*! Track the ellipse in the image I. \param I : Image in which the ellipse appears. */ void vpMeEllipse::track(const vpImage<unsigned char> &I) { vpCDEBUG(1) <<"begin vpMeEllipse::track()"<<std::endl ; static int iter =0 ; // 1. On fait ce qui concerne les ellipse (peut etre vide) { } //vpDisplay::display(I) ; // 2. On appelle ce qui n'est pas specifique { try{ vpMeTracker::track(I) ; } catch(...) { vpERROR_TRACE("Error caught") ; throw ; } // std::cout << "number of signals " << numberOfSignal() << std::endl ; } // 3. On revient aux ellipses { // Estimation des parametres de la droite aux moindres carre suppressPoints() ; setExtremities() ; try{ leastSquare() ; } catch(...) { vpERROR_TRACE("Error caught") ; throw ; } seekExtremities(I) ; setExtremities() ; try { leastSquare() ; } catch(...) { vpERROR_TRACE("Error caught") ; throw ; } // suppression des points rejetes par la regression robuste suppressPoints() ; setExtremities() ; //reechantillonage si necessaire reSample(I) ; // remet a jour l'angle delta pour chaque point de la liste updateTheta() ; computeMoments(); // Remise a jour de delta dans la liste de site me if (vpDEBUG_ENABLE(2)) { display(I,vpColor::red) ; vpMeTracker::display(I) ; vpDisplay::flush(I) ; } // computeAngle(iP1, iP2) ; // // if (iter%5==0) // { // sample(I) ; // try{ // leastSquare() ; } // catch(...) // { // vpERROR_TRACE("Error caught") ; // throw ; // } // computeAngle(iP1, iP2) ; // } // seekExtremities(I) ; // // vpMeTracker::display(I) ; // // vpDisplay::flush(I) ; // // // remet a jour l'angle theta pour chaque point de la liste // updateTheta() ; } iter++ ; vpCDEBUG(1) << "end vpMeEllipse::track()"<<std::endl ; }