コード例 #1
0
ファイル: bayesnet.cpp プロジェクト: PMBio/peer
double cDirichletNode::entropy(){
	double temp = 0;
	double ent = -lngamma(a.sum(), temp);
	for (int i=0; i < a.rows(); i++) {ent += lngamma(a(i), temp);}
	ent += (a.sum() - a.rows())*psi(a.sum());
//	ent -= (a - PVector::Ones(a.rows()))*psi();
	for (int i=0; i < a.rows(); i++){ent -= (a(i) - 1)*psi(a(i));}
	return ent;
}
コード例 #2
0
ファイル: bayesnet.cpp プロジェクト: PMBio/peer
double cGammaNode::entropy(){
	double temp = 0;
	double ent = 0;
	
	for (int i=0; i < a.rows(); i++) {
	    ent += a(i);
		ent -= log(b(i));
		ent += lngamma(a(i), temp);
		ent += (1. - a(i))*psi(a(i));
	}
	return ent;
}
コード例 #3
0
ファイル: bayesnet.cpp プロジェクト: PMBio/peer
void cGammaNode::updateMoments(){
	
	for (int i=0; i < lnE.rows(); i++){
		E1(i) = a(i)/b(i);
		lnE(i) = psi(a(i)) - log(b(i));
	}
}
コード例 #4
0
ファイル: main.cpp プロジェクト: mz2/peer
void playing()
{

    // insert code here...
    PMatrix m(2,2);
    PVector v1,v2;
    v1 = PVector::Constant(3, 2.1);
    v2 = PVector::Constant(3, 1.3);
    v1 = v2;
    v2(1) = 3;
    std::cout << PMatrix::Ones(3,4)*1.2 << std::endl;
    std::cout << v1 << std::endl << v2 + PVector::Ones(3)*2.0 << std::endl;
    m(0,0) = 3;
    m(1,0) = 2.5;
    m(0,1) = -1;
    m(1,1) = m(1,0) + m(0,1);
    std::cout << m << std::endl << m.rowwise().sum() << std::endl << m.colwise().sum() << std::endl;
    std::cout << randomreal() << std::endl << psi(10) << std::endl << gammafunction(10) << std::endl;

}
コード例 #5
0
ファイル: bayesnet.cpp プロジェクト: PMBio/peer
double cGammaNode::calcBound(cBayesNet* net){

	double bound = 0;
	double temp = 0;	
	for (int i=0; i < lnE.rows(); i++) { 
		bound += pa*log(pb);
		bound += (pa - 1.)*lnE(i);
		bound -= pb*E1(i);
		bound -= lngamma(pa, temp);
	}
	return bound + entropy();
}
コード例 #6
0
ファイル: bayesnet.cpp プロジェクト: PMBio/peer
double cDirichletNode::calcBound(cBayesNet* net){
	double temp = 0;	
	double bound = ((a0 - PVector::Ones(a0.rows()))*lnE).sum() - lngamma(a0.sum(), temp);
	for (int i=0; i < a0.rows(); i++) { bound += lngamma(a0(i), temp); }
	return bound + entropy();
}