Numero di bin per il calcolo delle informazioni reciproche


10

Voglio quantificare la relazione tra due variabili, A e B, usando le informazioni reciproche. Il modo per calcolarlo è binning delle osservazioni (vedi esempio codice Python di seguito). Tuttavia, quali fattori determinano quale numero di bin è ragionevole? Ho bisogno che il calcolo sia veloce, quindi non posso semplicemente usare molti bin per essere al sicuro.

from sklearn.metrics import mutual_info_score

def calc_MI(x, y, bins):
    c_xy = np.histogram2d(x, y, bins)[0]
    mi = mutual_info_score(None, None, contingency=c_xy)
    return mi

Risposte:


15

Non esiste un numero migliore di bin per stimare le informazioni reciproche (MI) con istogrammi. Il modo migliore è sceglierlo tramite la validazione incrociata, se possibile, o fare affidamento su una regola empirica. Questo è il motivo per cui sono stati proposti molti altri stimatori di IM che non sono basati su istogrammi.

nnp.histogram2d(x, y, D)Dxy

D=n/5
5
nDXDY5nD25D2n/5D=n/5

nn=100,000


Stimare il numero di bin per un istogramma è un vecchio problema. Potresti essere interessato a questo discorso di Lauritz Dieckman sulla stima del numero di bin per MI. Questo discorso si basa su un capitolo del libro di Mike X Cohen sulle serie temporali neurali.

DXDY

DX=maxXminX2IQRn1/3
IQR

Regola di Scott (ipotesi di normalità): dove è la deviazione standard per .

DX=maxXminX3.5sXn1/3
sXX

Regola di Sturges (potrebbe sottostimare il numero di bin ma buono per grande ): n

DX=1+log2n

È difficile stimare correttamente l'IM con istogrammi. È quindi possibile scegliere un altro stimatore:

  • Lo stimatore NN di Kraskov , che è un po 'meno sensibile alla scelta dei parametri: o vicini più vicini è spesso usato come predefinito. Articolo: (Kraskov, 2003)kk=4k=6
  • Stima dell'MI con kernel (Moon, 1995) .

Esistono molti pacchetti per la stima dell'MI:

  • Toolbox di stima entropica non parametrica per Python. sito .
  • Toolkit di informazioni dinamiche in Java ma disponibile anche per Python. sito .
  • Toolbox ITE in Matlab. sito .

1

Preferisco minepyottenere e stimare le informazioni reciproche in Python.

Puoi vedere i dettagli di implementazione del pacchetto qui e un codice di esempio qui . Per motivi di riferimento più semplice, copio incolla l'esempio e viene prodotto qui:

import numpy as np
from minepy import MINE

def print_stats(mine):
    print "MIC", mine.mic()
    print "MAS", mine.mas()
    print "MEV", mine.mev()
    print "MCN (eps=0)", mine.mcn(0)
    print "MCN (eps=1-MIC)", mine.mcn_general()

x = np.linspace(0, 1, 1000)
y = np.sin(10 * np.pi * x) + x
mine = MINE(alpha=0.6, c=15)
mine.compute_score(x, y)

print "Without noise:"
print_stats(mine)
print

np.random.seed(0)
y +=np.random.uniform(-1, 1, x.shape[0]) # add some noise
mine.compute_score(x, y)

print "With noise:"
print_stats(mine)

Che dà questo come output:

Without noise:
MIC 1.0
MAS 0.726071574374
MEV 1.0
MCN (eps=0) 4.58496250072
MCN (eps=1-MIC) 4.58496250072

With noise:
MIC 0.505716693417
MAS 0.365399904262
MEV 0.505716693417
MCN (eps=0) 5.95419631039
MCN (eps=1-MIC) 3.80735492206

La mia esperienza è che i risultati sono sensibili alphae il valore predefinito .6è ragionevole. Tuttavia, sui miei dati reali alpha=.3è molto più veloce e le informazioni reciproche stimate hanno una correlazione molto elevata con il caso alpha=.6. Quindi, nel caso in cui utilizzi l'MI per selezionare quelli con un IM elevato, puoi semplicemente utilizzare un valore più piccolo alphae utilizzare i valori più alti in sostituzione con una buona precisione.


Grazie! Hai confrontato miopia con sklearn per la stima dell'MI?
pir

No non l'ho fatto. Non sono sicuro del perché no!
adrin,

Ho appena fatto un confronto tra sklearn e minepy (sia alpha = 0,3 che alpha = 0.6). I risultati sono molto diversi! Dato che è così facile, probabilmente dovresti anche controllare i tuoi risultati usando entrambe le librerie :)
pir

2
MIC non è uguale alle informazioni reciproche (MI). Sono due cose completamente diverse.
Simone,

1
Si certo. Nel documento MIC originale ci sono molti confronti tra MI e MIC: uvm.edu/~cdanfort/csc-reading-group/… MIC mostra che può essere usato come proxy della quantità di rumore per una relazione funzionale - proprietà che viene chiamata "equitabilità" nel documento originale. Ciò nonostante, l'MI rappresenta ancora un'ottima misura di dipendenza per molti compiti: ad es. Selezione delle caratteristiche o inferenza della rete genetica. È anche più veloce stimare di MIC.
Simone,
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.