30 lines
860 B
C++
30 lines
860 B
C++
#ifndef JENSENSHANNON_H
|
||
#define JENSENSHANNON_H
|
||
|
||
#include "KullbackLeibler.h"
|
||
|
||
#include "../../Assertions.h"
|
||
#include <string>
|
||
|
||
|
||
namespace Divergence {
|
||
|
||
template <typename Scalar> class JensenShannon {
|
||
|
||
public:
|
||
/** Calculate the Jensen Shannon Divergece from a set of sample densities
|
||
* Info: https://en.wikipedia.org/wiki/Jensen–Shannon_divergence
|
||
* @param P is the vector containing the densities of a set of samples
|
||
* @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){
|
||
Eigen::VectorXd M = 0.5 * (P + Q);
|
||
|
||
return (0.5 * KullbackLeibler<Scalar>::getGeneralFromSamples(P, M, mode)) + (0.5 * KullbackLeibler<Scalar>::getGeneralFromSamples(Q, M, mode));
|
||
}
|
||
};
|
||
|
||
}
|
||
|
||
#endif // JENSENSHANNON_H
|