Che cos'è "entropia e guadagno di informazioni"?


338

Sto leggendo questo libro ( NLTK ) ed è confuso. L'entropia è definita come :

L'entropia è la somma della probabilità di ciascuna etichetta per la probabilità di registro di quella stessa etichetta

Come posso applicare l' entropia e l'entropia massima in termini di mining del testo? Qualcuno può darmi un esempio semplice (visivo)?


1
Una soluzione piacevole e intuitiva math.stackexchange.com/questions/331103/…
Ravi G

bella e intuitiva risposta alla domanda math.stackexchange.com/questions/331103/…
Ravi G

un video per una spiegazione semplice e buona
Grijesh Chauhan

Risposte:


1049

Presumo che l'entropia sia stata menzionata nel contesto della costruzione di alberi decisionali .

Per illustrare, immagina il compito di imparare a classificare i nomi di battesimo in gruppi maschili / femminili. Viene fornito un elenco di nomi ciascuno etichettato con uno mo f, vogliamo imparare un modello che si adatta ai dati e che può essere utilizzato per prevedere il genere di un nuovo nome invisibile.

name       gender
-----------------        Now we want to predict 
Ashley        f              the gender of "Amro" (my name)
Brian         m
Caroline      f
David         m

Il primo passo è decidere quali caratteristiche dei dati sono rilevanti per la classe target che vogliamo prevedere. Alcune caratteristiche di esempio includono: prima / ultima lettera, lunghezza, numero di vocali, termina con una vocale, ecc. Quindi, dopo l'estrazione delle caratteristiche, i nostri dati sembrano:

# name    ends-vowel  num-vowels   length   gender
# ------------------------------------------------
Ashley        1         3           6        f
Brian         0         2           5        m
Caroline      1         4           8        f
David         0         2           5        m

L'obiettivo è costruire un albero decisionale . Un esempio di un albero sarebbe:

length<7
|   num-vowels<3: male
|   num-vowels>=3
|   |   ends-vowel=1: female
|   |   ends-vowel=0: male
length>=7
|   length=5: male

praticamente ogni nodo rappresenta un test eseguito su un singolo attributo e andiamo a sinistra oa destra a seconda del risultato del test. Continuiamo a attraversare l'albero fino a raggiungere un nodo foglia che contiene la previsione della classe ( mo f)

Quindi, se eseguiamo il nome Amro su questo albero, iniziamo testando " è la lunghezza <7? " E la risposta è , quindi scendiamo quel ramo. Dopo il ramo, il prossimo test " è il numero di vocali <3? " Restituisce nuovamente vero . Questo porta a un nodo foglia etichettato m, e quindi la previsione è maschio (che mi capita di essere, quindi l'albero ha previsto correttamente il risultato ).

L'albero decisionale è costruito dall'alto verso il basso , ma la domanda è: come scegliere quale attributo suddividere in ciascun nodo? La risposta è trovare la funzione che divide meglio la classe target nei nodi figlio più puri possibili (ovvero: nodi che non contengono una combinazione di nodi maschio e femmina, piuttosto nodi puri con una sola classe).

Questa misura di purezza è chiamata informazione . Rappresenta la quantità prevista di informazioni che sarebbero necessarie per specificare se una nuova istanza (nome) deve essere classificata maschio o femmina, dato l'esempio che ha raggiunto il nodo. Lo calcoliamo in base al numero di classi maschili e femminili nel nodo.

L'entropia invece è una misura dell'impurità (il contrario). È definito per una classe binaria con valoria/bcome:

Entropy = - p(a)*log(p(a)) - p(b)*log(p(b))

Questa funzione di entropia binaria è illustrata nella figura seguente (la variabile casuale può assumere uno di due valori). Raggiunge il massimo quando la probabilità lo è p=1/2, nel senso che p(X=a)=0.5o allo stesso modo p(X=b)=0.5con una probabilità del 50% / 50% di essere uno ao b(l'incertezza è al massimo). La funzione entropia è al minimo zero quando la probabilità è p=1o p=0con completa certezza ( p(X=a)=1o p(X=a)=0rispettivamente, quest'ultima implica p(X=b)=1).

https://en.wikipedia.org/wiki/File:Binary_entropy_plot.svg

Naturalmente la definizione di entropia può essere generalizzata per una variabile casuale discreta X con esiti N (non solo due):

entropia

(il lognella formula di solito è preso come logaritmo alla base 2 )


Tornando al nostro compito di classificazione dei nomi, diamo un'occhiata a un esempio. Immagina ad un certo punto durante il processo di costruzione dell'albero, stavamo considerando la seguente divisione:

     ends-vowel
      [9m,5f]          <--- the [..,..] notation represents the class
    /          \            distribution of instances that reached a node
   =1          =0
 -------     -------
 [3m,4f]     [6m,1f]

Come puoi vedere, prima della divisione avevamo 9 maschi e 5 femmine, cioè P(m)=9/14e P(f)=5/14. Secondo la definizione di entropia:

Entropy_before = - (5/14)*log2(5/14) - (9/14)*log2(9/14) = 0.9403

Quindi lo confrontiamo con l'entropia calcolata dopo aver considerato la divisione guardando due rami figlio. Nel ramo sinistro di ends-vowel=1, abbiamo:

Entropy_left = - (3/7)*log2(3/7) - (4/7)*log2(4/7) = 0.9852

e il ramo giusto di ends-vowel=0, abbiamo:

Entropy_right = - (6/7)*log2(6/7) - (1/7)*log2(1/7) = 0.5917

Combiniamo le entropie sinistra / destra usando il numero di istanze giù per ciascun ramo come fattore di peso (7 istanze sono andate a sinistra e 7 istanze sono andate a destra) e otteniamo l'entropia finale dopo la divisione:

Entropy_after = 7/14*Entropy_left + 7/14*Entropy_right = 0.7885

Ora confrontando l'entropia prima e dopo la divisione, otteniamo una misura del guadagno di informazioni o quante informazioni abbiamo ottenuto facendo la divisione usando quella particolare funzione:

Information_Gain = Entropy_before - Entropy_after = 0.1518

È possibile interpretare il calcolo di cui sopra come segue: eseguendo la divisione con la end-vowelsfunzione, siamo stati in grado di ridurre l'incertezza nel risultato della previsione del sottoalbero di una piccola quantità di 0,1518 (misurata in bit come unità di informazione ).

Su ciascun nodo dell'albero, questo calcolo viene eseguito per ogni caratteristica e la caratteristica con il maggior guadagno di informazioni viene scelta per la divisione in modo avido (favorendo così le caratteristiche che producono divisioni pure con bassa incertezza / entropia). Questo processo viene applicato in modo ricorsivo dal nodo radice verso il basso e si interrompe quando un nodo foglia contiene istanze tutte aventi la stessa classe (non è necessario dividerlo ulteriormente).

Nota che ho ignorato alcuni dettagli che esulano dallo scopo di questo post, incluso come gestire le caratteristiche numeriche , i valori mancanti , gli alberi di overfitting e potatura , ecc.


1
@ all3fox: questo è spiegato nell'ultimo paragrafo, il processo dovrebbe fermarsi per quel particolare ramo se arriva a un nodo puro (un nodo foglia in cui tutte le istanze appartengono alla stessa classe, quindi non può essere ulteriormente suddiviso). Il nodo prevede quindi l'unica classe che contiene ..
Amro

3
@ all3fox: in pratica, andare fino ai nodi puri produce alberi decisionali abbastanza profondi che soffrono di overfitting (ovvero alberi che si adattano troppo bene ai dati di allenamento, ma che si generalizzano male ad altri dati non rappresentati nel set di addestramento). Quindi di solito ci fermiamo quando arriviamo a un certo numero minimo di istanze nei nodi foglia (e prevediamo solo la classe di maggioranza), e / o eseguiamo una sorta di potatura (vedi i link Wikipedia forniti sopra per saperne di più).
Amro

3
@Jas: questo è ben spiegato qui: en.wikipedia.org/wiki/…
Amro

1
@Rami: giusto, per evitare problemi come il sovradimensionamento , si preferiscono alberi più piccoli rispetto a quelli più grandi (cioè prendere decisioni con meno test). Si noti che l'euristica con cui vengono scelte le funzioni di divisione è un avido algoritmo di ricerca, quindi l'albero generato non è garantito per essere il più piccolo possibile nello spazio di tutti gli alberi possibili (né è garantito per essere un errore di classificazione globale ottimale a livello globale) ). In realtà questo è un problema NP-completo ...
Amro,

1
@Rami: è interessante notare che esistono metodi di apprendimento d'insieme che adottano un approccio diverso. Un'idea è quella di randomizzare l'algoritmo di apprendimento selezionando un sottoinsieme casuale di funzioni in ciascuna divisione candidata e costruendo un gruppo di questi alberi casuali e calcolando la media del loro risultato. Vale anche la pena di verificare algoritmi come le foreste casuali .
Amro,

45

Per cominciare, sarebbe meglio capire the measure of information.

Come facciamo measurele informazioni?

Quando succede qualcosa di improbabile, diciamo che è una grande novità. Inoltre, quando diciamo qualcosa di prevedibile, non è davvero interessante. Quindi, per quantificare questo interesting-ness, la funzione dovrebbe soddisfare

  • se la probabilità dell'evento è 1 (prevedibile), la funzione fornisce 0
  • se la probabilità dell'evento è vicina a 0, la funzione dovrebbe fornire un numero elevato
  • se si verificano eventi di probabilità 0,5, fornisce one bitinformazioni.

Una misura naturale che soddisfa i vincoli è

I(X) = -log_2(p)

dove p è la probabilità dell'evento X. E l'unità è accesa bit, lo stesso bit utilizzato dal computer. 0 o 1.

Esempio 1

Lancio della moneta equo:

Quante informazioni possiamo ottenere da un lancio di una moneta?

Risposta : -log(p) = -log(1/2) = 1 (bit)

Esempio 2

Se un meteorite colpisce la Terra domani, p=2^{-22}allora possiamo ottenere 22 bit di informazioni.

Se il Sole sorge domani, p ~ 1allora sono 0 bit di informazioni.

entropia

Quindi, se prendiamo le aspettative su interesting-nessun evento Y, allora è l'entropia. cioè l'entropia è un valore atteso dell'interesse di un evento.

H(Y) = E[ I(Y)]

Più formalmente, l'entropia è il numero atteso di bit di un evento.

Esempio

Y = 1: un evento X si verifica con probabilità p

Y = 0: un evento X non si verifica con probabilità 1-p

H(Y) = E[I(Y)] = p I(Y==1) + (1-p) I(Y==0) 
     = - p log p - (1-p) log (1-p)

Log base 2 per tutti i log.


22

Non posso darti grafica, ma forse posso dare una spiegazione chiara.

Supponiamo di avere un canale informativo, come una luce che lampeggia una volta al giorno rossa o verde. Quante informazioni trasmette? La prima ipotesi potrebbe essere un po 'al giorno. E se aggiungessimo il blu, in modo che il mittente abbia tre opzioni? Vorremmo avere una misura di informazioni in grado di gestire cose diverse dai poteri di due, ma essere comunque additiva (il modo in cui moltiplicando il numero di possibili messaggi per due aggiunge un bit). Potremmo farlo prendendo il registro 2 (numero di messaggi possibili), ma si scopre che c'è un modo più generale.

Supponiamo di tornare al rosso / verde, ma la lampadina rossa si è esaurita (questa è una conoscenza comune) in modo che la lampada debba sempre lampeggiare in verde. Il canale ora è inutile, sappiamo quale sarà il prossimo flashcosì i lampi non trasmettono informazioni, nessuna notizia. Ora ripariamo la lampadina ma imponiamo una regola secondo cui la lampadina rossa potrebbe non lampeggiare due volte di seguito. Quando la spia lampeggia in rosso, sappiamo quale sarà il prossimo flash. Se provi a inviare un flusso di bit da questo canale, scoprirai che devi codificarlo con più flash di quanti ne hai (in effetti il ​​50% in più). E se vuoi descrivere una sequenza di lampi, puoi farlo con meno bit. Lo stesso vale se ogni flash è indipendente (senza contesto), ma i flash verdi sono più comuni del rosso: più è distorta la probabilità, meno bit sono necessari per descrivere la sequenza e meno informazioni contiene, fino alla limite tutto verde, bruciato dal bulbo.

Si scopre che esiste un modo per misurare la quantità di informazioni in un segnale, in base alle probabilità dei diversi simboli. Se la probabilità di ricevere il simbolo x i è p i , prendere in considerazione la quantità

-log p i

Il p minore i , maggiore è questo valore. Se x i diventa il doppio improbabile, questo valore aumenta di un importo fisso (log (2)). Questo dovrebbe ricordare di aggiungere un bit a un messaggio.

Se non sappiamo quale sarà il simbolo (ma conosciamo le probabilità), allora possiamo calcolare la media di questo valore, quanto otterremo, sommando le diverse possibilità:

I = -Σ p i log (p i )

Questo è il contenuto delle informazioni in un lampo.

Lampadina rossa bruciata: p rosso = 0, p verde = 1, I = - (0 + 0) = 0
Equipaggiabile rosso e verde: p rosso = 1/2, p verde = 1/2 , I = - (2 * 1/2 * log (1/2)) = log (2)
Tre colori, equiprobabile: p i = 1/3, I = - (3 * 1/3 * log (1/3)) = log (3)
Verde e rosso, verde due volte più probabile: p rosso = 1/3 , p verde = 2/3, I = - (1/3 log (1/3) + 2/3 log (2/3)) = log ( 3) - 2/3 log (2)

Questo è il contenuto informativo, o entropia, del messaggio. È massimo quando i diversi simboli sono equiprobabili. Se sei un fisico usi il registro naturale, se sei un informatico usi il registro 2 e ottieni bit.


10

Consiglio vivamente di leggere la teoria dell'informazione, i metodi bayesiani e MaxEnt. Il punto di partenza è questo libro (disponibile gratuitamente online) di David Mackay:

http://www.inference.phy.cam.ac.uk/mackay/itila/

Quei metodi di inferenza sono davvero molto più generali del semplice mining di testo e non riesco davvero a immaginare come si imparerebbe come applicare questo alla PNL senza apprendere alcune delle basi generali contenute in questo libro o in altri libri introduttivi su Machine Learning e MaxEnt bayesian metodi.

La connessione tra entropia e teoria della probabilità all'elaborazione e alla memorizzazione delle informazioni è molto, molto profonda. Per dare un assaggio di ciò, c'è un teorema dovuto a Shannon che afferma che la massima quantità di informazioni che puoi passare senza errori attraverso un canale di comunicazione rumoroso è uguale all'entropia del processo del rumore. C'è anche un teorema che collega la quantità di dati che è possibile comprimere per occupare la memoria minima possibile nel computer all'entropia del processo che ha generato i dati.

Non penso sia davvero necessario che tu apprenda tutti quei teoremi sulla teoria della comunicazione, ma non è possibile impararlo senza apprendere le basi di ciò che è entropia, come viene calcolato, qual è la sua relazione con l'informazione e l'inferenza, ecc. ...


aveva gli stessi pensieri Rafael. È come chiedere quale sia la fisica quantistica sullo overflow dello stack, un'area molto ampia che non si distingue in una singola risposta.
Mark Essel,

5

Quando stavo implementando un algoritmo per calcolare l'entropia di un'immagine ho trovato questi link, vedi qui e qui .

Questo è lo pseudo-codice che ho usato, dovrai adattarlo per lavorare con il testo piuttosto che con le immagini, ma i principi dovrebbero essere gli stessi.

//Loop over image array elements and count occurrences of each possible
//pixel to pixel difference value. Store these values in prob_array
for j = 0, ysize-1 do $
    for i = 0, xsize-2 do begin
       diff = array(i+1,j) - array(i,j)
       if diff lt (array_size+1)/2 and diff gt -(array_size+1)/2 then begin
            prob_array(diff+(array_size-1)/2) = prob_array(diff+(array_size-1)/2) + 1
       endif
     endfor

//Convert values in prob_array to probabilities and compute entropy
n = total(prob_array)

entrop = 0
for i = 0, array_size-1 do begin
    prob_array(i) = prob_array(i)/n

    //Base 2 log of x is Ln(x)/Ln(2). Take Ln of array element
    //here and divide final sum by Ln(2)
    if prob_array(i) ne 0 then begin
        entrop = entrop - prob_array(i)*alog(prob_array(i))
    endif
endfor

entrop = entrop/alog(2)

Ho ricevuto questo codice da qualche parte, ma non riesco a estrarre il collegamento.


Ci sono così tante diverse funzioni entropiche () per le immagini ma senza buone anteprime? Come puoi confrontare il tuo codice con l'entropia di Matlab () e con il codice qui mathworks.com/matlabcentral/fileexchange/28692-entropy In quest'ultimo caso, lo sviluppatore afferma che è per segnali 1D ma gli utenti continuano ad espanderlo in 2D. - - La funzione entropia presuppone che il segnale originale sia di 2 bit ed è piuttosto semplicistico. Supponiamo che sia un segnale ECG di aritmia MIT-BIH (11 bit) ma generato per immagini 2D. Penso che non puoi usare la semplice base a 2 bit qui allora.
Léo Léopold Hertz

5

senza formalità

l'entropia è la disponibilità di informazioni o conoscenze, la mancanza di informazioni porterà a difficoltà nella previsione del futuro, che è un'alta entropia (previsione della parola successiva nel text mining) e la disponibilità di informazioni / conoscenza ci aiuterà a una previsione più realistica del futuro (bassa entropia).

Informazioni pertinenti di qualsiasi tipo ridurranno l'entropia e ci aiuteranno a prevedere un futuro più realistico, che le informazioni possono essere la parola "carne" è presente nella frase o la parola "carne" non è presente. Questo si chiama Information Gain


formalmente

l'entropia è la mancanza di ordine di prevedibilità


0

Mentre stai leggendo un libro su NLTK, sarebbe interessante leggere il modulo Classificatore MaxEnt http://www.nltk.org/api/nltk.classify.html#module-nltk.classify.maxent

Per la classificazione del mining di testo i passaggi potrebbero essere: pre-elaborazione (tokenizzazione, steaming, selezione delle funzionalità con Information Gain ...), trasformazione in valori numerici (frequenza o TF-IDF) (penso che questo sia il passaggio chiave da capire quando si utilizza testo come input per un algoritmo che accetta solo numeri) e quindi classifica con MaxEnt, sicuro che questo è solo un esempio.

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.