Perché ricevo informazioni sull'entropia maggiore di 1?


11

Ho implementato la seguente funzione per calcolare l'entropia:

from math import log

def calc_entropy(probs):
    my_sum = 0
    for p in probs:
        if p > 0:
            my_sum += p * log(p, 2)

    return - my_sum

Risultato:

>>> calc_entropy([1/7.0, 1/7.0, 5/7.0])
1.1488348542809168
>>> from scipy.stats import entropy # using a built-in package 
                                    # give the same answer
>>> entropy([1/7.0, 1/7.0, 5/7.0], base=2)
1.1488348542809166

La mia comprensione era che l'entropia è tra 0 e 1, 0 che significa molto certo e 1 che significa molto incerto. Perché ottengo una misura di entropia maggiore di 1?

So che se aumento le dimensioni della base del log, la misura dell'entropia sarà più piccola, ma ho pensato che la base 2 fosse standard, quindi non penso che sia il problema.

Mi manca qualcosa di ovvio, ma cosa?


La base non dipende dal tipo di entropia? L'entropia di Shannon di base 2 e l'entropia della meccanica statistica del log naturale?
Alexis,

@Alexis, ma l'entropia di Shannons non è compresa tra 0 e 1?
Akavall,

1
No: l'entropia di Shannon non è negativa.
Alexis,

2
Sembra che non ci sia nulla di sbagliato nel fatto che l'entropia sia maggiore di 1 se ho più di due eventi e il valore dell'entropia è compreso tra 0 e 1 solo in un caso speciale, in cui i miei eventi sono binari (ho due eventi).
Akavall,

Risposte:


17

L'entropia non è la stessa probabilità .

L'entropia misura le "informazioni" o "incertezza" di una variabile casuale. Quando si utilizza la base 2, viene misurata in bit; e ci possono essere più di un bit di informazione in una variabile.

In questo esempio, un esempio "contiene" circa 1,15 bit di informazioni. In altre parole, se si fosse in grado di comprimere perfettamente una serie di campioni, in media sarebbero necessari molti bit per campione.


Grazie. Penso di averlo capito, ma voglio esserne sicuro. Ho la seguente affermazione, giusto? Se ho solo due risultati, allora la maggior parte delle informazioni che posso ottenere è di 1 bit, ma se ho più di 2 risultati di quanti ne possa ottenere più di 1 bit di informazioni.
Akavall,

Sì. (Ad esempio, considera quattro risultati distribuiti uniformemente, che potrebbero essere generati da due lanci di monete equi per campione.)
CL.

Per aggiungere ciò, l'entropia varia da 0 a 1 per problemi di classificazione binaria e da 0 a registrare la base 2 k, dove k è il numero di classi che hai.
MichaelMMeskhi,

13

logKK

log210log2211121log2K

logK01


non lo sapevo, grazie. Quindi sostanzialmente la base del logaritmo deve essere la stessa della lunghezza del campione e non di più?
Fierce82,

2
Anche la lunghezza del campione è irrilevante. È quante categorie hai.
Nick Cox,

solo per chiarire, è k il numero di possibili categorie o il numero di categorie per le quali stai calcolando l'entropia? per esempio. ho 10 possibili categorie, ma ci sono 3 campioni che rappresentano 2 categorie nel sistema per cui sto calcolando l'entropia. k è in questo caso 2?
eljusticiero67,

-0log0

-2

e

from math import log

def calc_entropy(probs):
    my_sum = 0
    for p in probs:
        if p > 0:
            my_sum += p * log(p)

    return - my_sum

Dando:

>>> calc_entropy([1/7.0, 1/7.0, 5/7.0])
0.796311640173813

So di poterlo fare, ma avevo l'impressione che l'uso del log base 2 dovesse anche produrre un valore di entropia compreso tra 0 e 1. Il log base 2 può essere utilizzato solo quando ho due probabilità?
Akavall,

log2p

1
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.