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_);
}
Пример #3
0
  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;
  }
Пример #4
0
/*!
  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 ;

}