Jensen-Shannon-Divergenz

Ich habe eine andere Frage, bei der ich gehofft habe, dass mir jemand helfen kann.

Ich benutze die Jensen-Shannon-Divergenz, um die Ähnlichkeit zwischen zwei Wahrscheinlichkeitsverteilungen zu messen. Die Ähnlichkeitswerte scheinen in dem Sinne korrekt zu sein, dass sie zwischen 1 und 0 liegen, wenn man den Logarithmus zur Basis 2 verwendet, wobei 0 bedeutet, dass die Verteilungen gleich sind.

Ich bin mir jedoch nicht sicher, ob es tatsächlich irgendwo einen Fehler gibt, und habe mich gefragt, ob jemand in der Lage sein könnte, "Ja, es ist richtig" oder "Nein, Sie haben etwas falsch gemacht" zu sagen.

Hier ist der Code:

from numpy import zeros, array
from math import sqrt, log


class JSD(object):
    def __init__(self):
        self.log2 = log(2)


    def KL_divergence(self, p, q):
        """ Compute KL divergence of two vectors, K(p || q)."""
        return sum(p[x] * log((p[x]) / (q[x])) for x in range(len(p)) if p[x] != 0.0 or p[x] != 0)

    def Jensen_Shannon_divergence(self, p, q):
        """ Returns the Jensen-Shannon divergence. """
        self.JSD = 0.0
        weight = 0.5
        average = zeros(len(p)) #Average
        for x in range(len(p)):
            average[x] = weight * p[x] + (1 - weight) * q[x]
            self.JSD = (weight * self.KL_divergence(array(p), average)) + ((1 - weight) * self.KL_divergence(array(q), average))
        return 1-(self.JSD/sqrt(2 * self.log2))

if __name__ == '__main__':
    J = JSD()
    p = [1.0/10, 9.0/10, 0]
    q = [0, 1.0/10, 9.0/10]
    print J.Jensen_Shannon_divergence(p, q)

Das Problem ist, dass ich das Gefühl habe, dass die Bewertungen nicht hoch genug sind, wenn ich zum Beispiel zwei Textdokumente vergleiche. Dies ist jedoch ein rein subjektives Gefühl.

Jede Hilfe wird wie immer geschätzt.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage