fixed some bugs in jensen shannon and kullback leibler

This commit is contained in:
toni
2017-04-17 16:50:56 +02:00
parent a9cd8d5e68
commit 200aa94ca8
7 changed files with 107 additions and 6 deletions

View File

@@ -18,10 +18,10 @@ class RandomGenerator : public std::minstd_rand {
public:
/** ctor with default seed */
RandomGenerator() : std::minstd_rand(RANDOM_SEED) {;}
RandomGenerator() : std::minstd_rand(RANDOM_SEED) {;}
/** ctor with custom seed */
RandomGenerator(result_type seed) : std::minstd_rand(seed) {;}
RandomGenerator(result_type seed) : std::minstd_rand(seed) {;}
};

View File

@@ -18,6 +18,13 @@ public:
* @param Q is a vector containg the densities of the same samples set then P
*/
static inline Scalar getGeneralFromSamples(Eigen::VectorXd P, Eigen::VectorXd Q, LOGMODE mode){
// normalize
P /= P.sum();
Q /= Q.sum();
Assert::isNear((double)P.sum(), 1.0, 0.01,"Normalization failed.. this shouldn't happen");
Assert::isNear((double)Q.sum(), 1.0, 0.01, "Normalization failed.. this shouldn't happen");
Eigen::VectorXd M = 0.5 * (P + Q);
return (0.5 * KullbackLeibler<Scalar>::getGeneralFromSamples(P, M, mode)) + (0.5 * KullbackLeibler<Scalar>::getGeneralFromSamples(Q, M, mode));

View File

@@ -56,8 +56,8 @@ namespace Divergence {
// calc PQratio
if(Q[i] == 0.0){
Assert::doThrow("Division by zero is not allowed ;).");
//PQratio = P[i] / 0.00001;
//Assert::doThrow("Division by zero is not allowed ;).");
PQratio = P[i] / 0.00001;
} else {
PQratio = P[i] / Q[i];
}