コード例 #1
0
ファイル: like.c プロジェクト: reaktor/topic-models
double likelihood_DIRalpha() {
  /*
   *   Dirichlet for topics
   */
  int i,t;
  double likelihood = 0;
  for (i=0; i<ddN.DT; i++) {
    for (t=0; t<ddN.T; t++) {
      if ( ddS.Ndt[i][t]>0 ) {
#ifdef L_CACHE
        if ( ddP.alphac>0 )
          likelihood += gcache_value(&ddC.lgalphac, (int)ddS.Ndt[i][t]);
        else
#endif
          likelihood += gammadiff((int)ddS.Ndt[i][t], ddP.alphapr[t], 0.0);
      }
    }
#ifdef L_CACHE
    likelihood -= gcache_value(&ddC.lgalphatot, (int)ddS.NdT[i]);
#else
    likelihood -= gammadiff((int)ddS.NdT[i], ddP.alphatot, 0.0);
#endif
  }
  //yap_infinite(likelihood);
  return likelihood;
}
コード例 #2
0
ファイル: like.c プロジェクト: reaktor/topic-models
double likelihood_PYalpha() {
  int i,t;
  double likelihood = 0;
  double la = 0;
  double lb = log(ddP.bpar);
  if ( ddP.apar>0 ) la = log(ddP.apar);
  for (i=0; i<ddN.DT; i++) {
    uint16_t Td_ = 0;
    for (t=0; t<ddN.T; t++) {
      if ( ddS.Ndt[i][t]>0 ) {
	Td_ += ddS.Tdt[i][t];
	if ( ddS.Ndt[i][t]>1 ) {
	  likelihood += S_S(ddC.SX,ddS.Ndt[i][t],ddS.Tdt[i][t]);
	}
      }
    }
    if ( ddP.apar==0 ) {
      likelihood += Td_*lb;
    } else {
      likelihood += Td_*la + gcache_value(&ddC.lgba, (int)Td_);
    }
    likelihood -= gcache_value(&ddC.lgb, (int)ddS.NdT[i]);
    //yap_infinite(likelihood);
  }  
  return likelihood;
}
コード例 #3
0
ファイル: like.c プロジェクト: reaktor/topic-models
double likelihood_DIRbeta() {
  int j,t;
  double likelihood = 0;
  double val = 0;
  for (t=0; t<ddN.T; t++) {
    for (j=0; j<ddN.W; j++) {
      if ( ddS.Nwt[j][t]>0 ) {
	assert(ddP.betapr[j]>0);
#ifdef L_CACHE
	if ( ddP.betac>0 )
	  val += gcache_value(&ddC.lgbetac, (int)ddS.Nwt[j][t]);
	else
#endif
          val += gammadiff((int)ddS.Nwt[j][t], ddP.betapr[j], 0.0);
      }      
    }
#ifdef L_CACHE
    val -= gcache_value(&ddC.lgbetatot, (int)ddS.NWt[t]);
#else
    val -= gammadiff((int)ddS.NWt[t], ddP.betatot, 0.0);
#endif
  }
  likelihood += val;
  //yap_infinite(likelihood);
  return likelihood;
}
コード例 #4
0
ファイル: like.c プロジェクト: reaktor/topic-models
double likelihood_PYbeta() {
  int i,t;
  double likelihood = 0;
  double lbw = log(ddP.bwpar);
  double law = log(ddP.awpar);
  likelihood += pctl_gammaprior(ddP.bwpar);
  /*
   *    term for k-th node
   */
#ifdef BWPAR0
  for (t=1; t<ddN.T; t++) {
#else
  for (t=0; t<ddN.T; t++) {
#endif
    uint32_t Tw_ = 0;
    for (i=0; i<ddN.W; i++) {
      int tt = ddS.Twt[i][t];
      int nn = ddS.Nwt[i][t];
      if ( nn>0 ) {
        Tw_ += tt;
	likelihood += S_S(ddC.SY,nn,tt);
#if 1
	if ( !finite(likelihood) || isinf(likelihood) || isnan(likelihood)  ) 
	  yap_quit("Like=%lf:  Nwt[%d][%d]=%d  Twt[i][t]=%d S.M=%d S.N=%d\n",
		   likelihood,
		   i, t, (int)ddS.Nwt[i][t],(int)ddS.Twt[i][t],ddC.SY->usedM, ddC.SY->usedN);
#endif
      }
    }
    yap_infinite(likelihood);   
    if ( ddP.awpar==0 ) {
      likelihood += Tw_*lbw;
    } else {
#ifdef L_CACHE
      likelihood += Tw_*law + gcache_value(&ddC.lgbaw, (int)Tw_);
#else
      likelihood += Tw_*law + gammadiff((int)Tw_, ddP.bwpar/ddP.awpar, 0.0);
#endif
    }
#ifdef L_CACHE
    likelihood -= gcache_value(&ddC.lgbw, (int)ddS.NWt[t]);
#else
    likelihood -= gammadiff((int)ddS.NWt[t], ddP.bwpar, 0.0);
#endif
    yap_infinite(likelihood);   
  }  
  yap_infinite(likelihood);   
  return likelihood;
}

double likelihood_PYbeta_PDP() {
  /*
   *    the constant prior
   */
  int j;
  double likelihood = 0;
  for (j=0; j<ddN.W; j++) {
    if ( ddS.TwT[j]>0 ) {
      likelihood += ddS.TwT[j]*log(ddP.betapr[j]);
    }
  }      
  //yap_infinite(likelihood);
  return likelihood;
}
コード例 #5
0
ファイル: samplea.c プロジェクト: euxoa/libstb
static double aterms2(double x, void *mydata) {
  int i, k;
  ALData *mp = (ALData *)mydata;
  double val = 0;
#ifdef LGCACHE
  struct gcache_s lgp;
#else
  double lg1a = lgamma(1-x);
#endif
  stcnt_int *mm = mp->m;
  if ( x<=0 ) {
    fprintf(stderr,"Illegal discount value in aterms2()\n");
    exit(1);
  }
#ifdef LGCACHE
  gcache_init(&lgp, 1-x);
#endif
  for (i=0; i<mp->I; i++) {
    val += mp->T[i] * log(x) + 
      lgamma(mp->T[i]+mp->bpar[i]/x) - lgamma(mp->bpar[i]/x);
    for (k=0; k<mp->K[i]; k++) {
      scnt_int n;
      stcnt_int t;
      if ( mp->val ) {
	mp->val(&n, &t, i, k);
      } else {
	n = mp->n[i][k];
	t = mp->t[i][k];
      }
      if ( n>0 ) {
	if ( t==n ) {
	  ;
	} else if ( t==1 ) {
#ifdef LGCACHE
	  val += gcache_value(&lgp, n-1);
#else
	  val += lgamma(n-x) - lg1a; 
#endif
	} else {
	  int l;
	  for (l=t-2; l>=0; l--) {
	    if ( mm[l]>1 ) 
#ifdef LGCACHE
	      val += gcache_value(&lgp, mm[l]-1);
#else
	      val += lgamma(mm[l]-x) - lg1a; 
#endif
	    n -= mm[l];
	  }
	  assert(n>0);
	  if ( n>0 ) 
#ifdef LGCACHE
	    val += gcache_value(&lgp, n-1);
#else
	    val += lgamma(n-x) - lg1a; 
#endif
	  mm += t-1;
	}
      }
    }
  }
  return val;
}