Jensen-Shannon divergence

You'll need my KLDivergence function to calculate the Kullback-Leibler divergence as well.

http://www.igorexchange.com/node/2318

//*****************************************************************************
// JSDivergence
// Created 20110703
// 
// Shawn Driscoll
// Salk Institute for Biological Studies
//
// Calculates the Jensen-Shannon divergence between the probability 
// distributions P and Q.  P and Q must span the same range of values
// and contain the same number of points.
//
// Jensen-Shannon Divergence is defined as
//
//   JSD(P||Q) = 1/2*D(P||M) + 1/2*D(Q||M) 
// 
// where M is 1/2*(P+Q) and D(P||M) is the Kullback-Leibler divergence.
//
// According to Lin (1991), the Jensen–Shannon divergence is bounded by 1.0.
//
//   0 <= JSD(P||Q) <= 1.0
// 
//*****************************************************************************
function JSDivergence(P,Q)
    //--------------------------------------------------------------------------
    // parameters
    //--------------------------------------------------------------------------
    wave P,Q;
 
    //--------------------------------------------------------------------------
    // variables
    //--------------------------------------------------------------------------
    variable n_jsd = 0;
    
    //--------------------------------------------------------------------------
    // main function
    //--------------------------------------------------------------------------
    
    ////
    // create mean distribution
    matrixop/free M = (P+Q)/2;
    
    ////
    // calculate squared jensen-shannon divergence
    n_jsd = 0.5*KLDivergence(P,M) + 0.5*KLDivergence(Q,M);
    
    ////
    // take square root since this is the actual metric
    n_jsd = sqrt(n_jsd);
    
    //
    // save to global variable
    variable/g v_JSDivergence = n_jsd;
    
    //
    // print result
    printf "v_JSDivergence= %g\r",n_jsd;
    
    // 
    // return result
    return n_jsd;
 
end

Forum

Support

Gallery

Igor Pro 9

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More