20 lines
510 B
Ruby
20 lines
510 B
Ruby
module Math
|
|
|
|
# The Kullback-Leibler divergence from this array to that of +q+.
|
|
#
|
|
# NB: You will possibly want to sort both P and Q before calling this
|
|
# depending on what you're actually trying to measure.
|
|
#
|
|
# http://en.wikipedia.org/wiki/Kullback-Leibler_divergence
|
|
#
|
|
def self.kldivergence(array, q)
|
|
fail "Buggy."
|
|
fail "Cannot compare differently sized arrays." unless size = q.size
|
|
kld = 0
|
|
each_with_index { |pi,i| kld += pi*Math::log(pi.to_f/q[i].to_f) }
|
|
kld
|
|
end
|
|
|
|
end
|
|
|