Rechner für die Kullback-Leibler-Divergenz
Dieser Rechner misst mit der Kullback-Leibler-Divergenz, wie stark eine diskrete Wahrscheinlichkeitsverteilung von einer Referenzverteilung abweicht.
Im Browser ausführen – kostenlos
Geben Sie zwei gleich lange Arrays ein, deren Wahrscheinlichkeiten jeweils eins ergeben, und Sie erhalten die gerichtete Divergenz in Nats. Die deterministische Berechnung verwendet den natürlichen Logarithmus und behandelt Nullwerte in der ersten Verteilung korrekt. Unterschiedliche Längen, ungültige Summen, negative Werte und Nullwahrscheinlichkeiten in der Referenz werden klar gemeldet, statt ein irreführendes unendliches oder undefiniertes Ergebnis zu liefern.
Verstehen Sie die Bedeutung der KL-Divergenz
Die Kullback-Leibler-Divergenz vergleicht eine Verteilung P mit einer Referenz Q anhand des logarithmischen Verhältnisses der zugehörigen Wahrscheinlichkeiten. Sie beantwortet eine gerichtete Frage: Wie viel Information geht verloren, wenn Q Ergebnisse beschreibt, die tatsächlich P folgen? Null bedeutet, dass beide Verteilungen an jeder Position übereinstimmen; ein größerer positiver Wert zeigt eine stärkere Abweichung. Die Richtung ist entscheidend, denn beim Vertauschen von P und Q ändert sich das Ergebnis meistens. Dieser Rechner liefert D(P || Q): Das erste Array ist die untersuchte Verteilung, das zweite die Referenz. Da natürliche Logarithmen verwendet werden, lautet die Einheit Nats und nicht Bits. Die KL-Divergenz ist keine metrische Distanz: Sie ist asymmetrisch und erfüllt die Dreiecksungleichung nicht. Gerade deshalb eignet sie sich für Informationstheorie, statistische Inferenz, Modellanpassung und Vergleiche mit einer klar definierten Referenz.
Bereiten Sie gültige Wahrscheinlichkeitsarrays vor
Tragen Sie in beide Arrays gleich viele Wahrscheinlichkeiten ein und behalten Sie dieselbe Reihenfolge der Ergebnisse bei. Steht die erste Position in P für Regen, muss sie auch in Q für Regen stehen. Jeder Wert muss endlich und nicht negativ sein; jedes vollständige Array muss eins ergeben. Eine sehr kleine Toleranz berücksichtigt die Gleitkommadarstellung, beliebige Gewichte werden jedoch nicht automatisch normalisiert. Normalisieren Sie Anzahlen oder Bewertungen daher vorher. Null ist in P zulässig, weil ein unmögliches Ereignis nichts zur Summe beiträgt. Jeder Nullwert in der Referenz wird abgelehnt: Bei einem positiven zugehörigen P-Wert ist das logarithmische Verhältnis nicht definiert und die Divergenz kann unendlich werden. Die strenge Prüfung entdeckt außerdem verschobene Kategorien, gekürzte Arrays, ganzzahlige Prozentangaben und unvereinbare Bezeichnermengen.
Interpretieren und verwenden Sie das Ergebnis sorgfältig
Die Antwort enthält die Divergenz und die Einheit Nats. Werte nahe null sprechen dafür, dass Q die Verteilung P gut darstellt; einen allgemein gültigen Grenzwert für gute oder schlechte Modelle gibt es jedoch nicht. Die Bedeutung hängt von Kategorienzahl, Anwendung, Stichprobenverfahren und Fehlerkosten ab. Vergleichen Sie nur Ergebnisse mit denselben Kategorien und derselben Richtung. Sie können Modellversionen verfolgen, aktuelle Daten einer freigegebenen Basislinie gegenüberstellen oder die Kennzahl zusammen mit weiteren Maßen und Unsicherheiten berichten. Verstehen Sie sie nicht als Wahrscheinlichkeit, Prozentsatz, Korrelation oder symmetrische Distanz. Auch Stichprobenrauschen kann zwischen Daten aus demselben Prozess eine Divergenz erzeugen. Der Browser eignet sich für Einzelprüfungen; eine API-Anfrage kostet $0.002 und ermöglicht wiederholbare Automatisierung. Identische gültige Eingaben liefern stets dasselbe gerundete JSON-Ergebnis.
Anwendungsfälle
Verteilungsdrift überwachen
Vergleichen Sie eine aktuelle kategoriale Verteilung mit einer positiven Referenz, um gerichtete Änderungen über die Zeit zu quantifizieren.
Probabilistische Modelle bewerten
Messen Sie mit einer etablierten Informationsgröße die Abweichung einer Modellreferenz von einer beobachteten oder gewünschten Verteilung.
Kompressionsannahmen prüfen
Schätzen Sie den Informationsnachteil, wenn Ergebnisse mit anderen Wahrscheinlichkeiten als denen der Quelle dargestellt werden.
Häufige Fragen
In welcher Richtung rechnet das Werkzeug?
Es berechnet D(P || Q) von der ersten Verteilung zur zweiten Referenzverteilung. Beim Vertauschen kann ein anderer Wert entstehen.
Warum wird das Ergebnis in Nats angegeben?
Die Formel nutzt den natürlichen Logarithmus. Mit einem Logarithmus zur Basis zwei würde das Ergebnis in Bits angegeben.
Darf die erste Verteilung Nullwerte enthalten?
Ja. Nach der üblichen Grenzwertkonvention trägt eine Wahrscheinlichkeit von null in P mit null zur Divergenz bei.
Warum sind Nullwerte in der Referenz unzulässig?
Null in Q macht das logarithmische Verhältnis bei einem positiven zugehörigen P-Wert undefiniert und kann unendliche Divergenz bedeuten.
Müssen sich die Wahrscheinlichkeiten exakt zu eins addieren?
Sie müssen innerhalb einer kleinen numerischen Toleranz eins ergeben. Der Rechner prüft Werte, normalisiert Gewichte aber nicht automatisch.
Was kostet eine Berechnung über die API?
Jede API-Anfrage kostet $0.002. Im Browser können Sie die Berechnung auch kostenlos ausführen.
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/stat/kl-divergence \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"distribution":[0.5,0.3,0.2],"reference":[0.4,0.4,0.2]}'const res = await fetch("https://api.kit.forhosting.com/stat/kl-divergence", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"distribution": [
0.5,
0.3,
0.2
],
"reference": [
0.4,
0.4,
0.2
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/stat/kl-divergence",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"distribution": [
0.5,
0.3,
0.2
],
"reference": [
0.4,
0.4,
0.2
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/stat/kl-divergence", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"distribution":[0.5,0.3,0.2],"reference":[0.4,0.4,0.2]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"distribution":[0.5,0.3,0.2],"reference":[0.4,0.4,0.2]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/stat/kl-divergence", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"distribution": [
0.5,
0.3,
0.2
],
"reference": [
0.4,
0.4,
0.2
]
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "stat.kl_divergence",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |