Calcolatore della divergenza di Kullback-Leibler
Questo calcolatore misura quanto una distribuzione di probabilità discreta differisce da una distribuzione di riferimento mediante la divergenza di Kullback-Leibler.
Esegui gratis nel browser
Inserisca due array della stessa lunghezza, con probabilità che sommano a uno, per ottenere la divergenza direzionale in nats. Il calcolo è deterministico, usa il logaritmo naturale e gestisce correttamente gli zeri nella prima distribuzione. La validazione segnala inoltre lunghezze diverse, totali errati, valori negativi e probabilità di riferimento nulle, evitando risultati infiniti o indefiniti fuorvianti.
Comprenda che cosa misura la divergenza KL
La divergenza di Kullback-Leibler confronta una distribuzione P con un riferimento Q calcolando il rapporto logaritmico tra le probabilità corrispondenti. Risponde a una domanda direzionale: quanta informazione si perde usando Q per rappresentare risultati che in realtà seguono P? Un risultato pari a zero indica che le distribuzioni coincidono in ogni posizione; valori positivi maggiori segnalano una discrepanza più ampia. La direzione è importante, perché scambiare P e Q cambia in genere la risposta. Questo strumento calcola D(P || Q): il primo array è la distribuzione valutata, il secondo il riferimento. Usa logaritmi naturali, quindi esprime il risultato in nats anziché in bit. La divergenza KL non è una distanza metrica: è asimmetrica e non soddisfa la disuguaglianza triangolare. Proprio queste caratteristiche la rendono utile nella teoria dell’informazione, nell’inferenza statistica e nell’adattamento dei modelli.
Prepari array di probabilità validi
Inserisca lo stesso numero di probabilità nei due array e mantenga allineato l’ordine degli esiti. Se la prima posizione indica la pioggia in P, deve indicarla anche in Q. Ogni valore deve essere finito e non negativo, mentre ciascun array completo deve sommare a uno. Una tolleranza minima tiene conto della rappresentazione in virgola mobile, ma lo strumento non normalizza pesi arbitrari. Normalizzi quindi conteggi o punteggi prima dell’invio. Uno zero in P è valido, perché un evento impossibile contribuisce zero. Ogni zero nel riferimento viene invece rifiutato: rende indisponibile il rapporto logaritmico quando il valore corrispondente di P è positivo e può implicare una divergenza infinita. La validazione aiuta anche a individuare categorie spostate, array troncati, percentuali intere e insiemi di etichette incompatibili.
Interpreti e utilizzi il risultato con attenzione
La risposta contiene la divergenza e l’unità nats. Valori vicini a zero indicano che Q rappresenta bene P, ma non esiste una soglia universale tra un modello valido e uno inadeguato. Il significato dipende dal numero di categorie, dall’applicazione, dal campionamento e dal costo degli errori. Confronti risultati ottenuti con le stesse definizioni e la stessa direzione. Può monitorare versioni di un modello, confrontare dati recenti con una baseline approvata o riportare la misura insieme ad altri indicatori e all’incertezza. Non consideri il valore una probabilità, percentuale, correlazione o distanza simmetrica. Anche il rumore campionario può produrre divergenza tra campioni dello stesso processo. Il browser è adatto ai controlli singoli; una richiesta API costa $0.002 e consente automazioni ripetibili. Input validi identici producono sempre lo stesso JSON arrotondato.
Casi d'uso
Monitorare la deriva distributiva
Confronti una distribuzione categoriale corrente con un riferimento positivo per quantificare variazioni direzionali nel tempo.
Valutare modelli probabilistici
Misuri la differenza tra il riferimento di un modello e una distribuzione osservata o obiettivo con una quantità informativa standard.
Verificare ipotesi di compressione
Stimi la penalità informativa dovuta alla rappresentazione degli esiti con probabilità diverse da quelle della sorgente.
Domande frequenti
Quale direzione usa il calcolatore?
Calcola D(P || Q), dalla prima distribuzione alla seconda, usata come riferimento. Invertire gli array può cambiare il valore.
Perché il risultato è espresso in nats?
La formula usa il logaritmo naturale. Un logaritmo in base due esprimerebbe il risultato in bit.
La prima distribuzione può contenere zero?
Sì. Secondo la convenzione limite standard, una probabilità zero in P contribuisce zero alla divergenza.
Perché vengono rifiutate probabilità di riferimento nulle?
Uno zero in Q rende indefinito il rapporto logaritmico per un P corrispondente positivo e può implicare divergenza infinita.
Le probabilità devono sommare esattamente a uno?
Devono sommare a uno entro una piccola tolleranza numerica. Il calcolatore valida, ma non normalizza automaticamente i pesi.
Quanto costa un calcolo tramite API?
Ogni richiesta API costa $0.002. Lei può anche eseguire gratuitamente il calcolo nel browser.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo 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)Esempio di richiesta
{
"distribution": [
0.5,
0.3,
0.2
],
"reference": [
0.4,
0.4,
0.2
]
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "stat.kl_divergence",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |