Jumlah tempat sampah ketika menghitung informasi timbal balik

10

Saya ingin mengukur hubungan antara dua variabel, A dan B, menggunakan informasi timbal balik. Cara untuk menghitungnya adalah dengan membuang pengamatan (lihat contoh kode Python di bawah). Namun, faktor apa yang menentukan jumlah sampah yang masuk akal? Saya perlu perhitungan yang cepat jadi saya tidak bisa hanya menggunakan banyak sampah untuk berada di sisi yang aman.

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
pir
sumber

Jawaban:

15

Tidak ada jumlah tempat sampah terbaik untuk memperkirakan informasi timbal balik (MI) dengan histogram. Cara terbaik adalah memilihnya melalui cross-validation jika Anda bisa, atau mengandalkan aturan praktis. Inilah alasan mengapa banyak penaksir MI lainnya yang tidak berdasarkan histogram telah diusulkan.

nnp.histogram2d(x, y, D)Dxy

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

nn=100,000


Memperkirakan jumlah nampan untuk histogram adalah masalah lama. Anda mungkin tertarik dengan ceramah ini oleh Lauritz Dieckman tentang memperkirakan jumlah nampan untuk MI. Pembicaraan ini didasarkan pada bab dalam Mike X Cohen buku tentang saraf time-series.

DXDY

IQR

DX=maxXminX2IQRn1/3
IQR

Aturan Scott (asumsi normalitas): mana adalah deviasi standar untuk .sXX

DX=maxXminX3.5sXn1/3
sXX

Aturan Sturges (mungkin meremehkan jumlah tetapi bagus untuk besar ): D X = 1 + log 2 nn

DX=1+log2n

Sulit untuk memperkirakan MI dengan histogram dengan benar. Anda kemudian dapat memilih penduga yang berbeda:

  • Estimator NN Kraskov , yang agak kurang sensitif terhadap pilihan parameter: atau tetangga terdekat sering digunakan sebagai default. Paper: (Kraskov, 2003)k = 4 k = 6kk=4k=6
  • Estimasi MI dengan kernel (Moon, 1995) .

Ada banyak paket untuk memperkirakan MI:

  • Toolbox Estimasi Entropi Non-Parametrik untuk Python. situs .
  • Perangkat informasi-dinamika di Jawa tetapi tersedia juga untuk Python. situs .
  • Kotak alat ITE di Matlab. situs .
Simone
sumber
1

Saya lebih suka minepymendapatkan dan memperkirakan informasi timbal balik dalam python.

Anda dapat melihat detail implementasi paket di sini , dan contoh kode di sini . Demi referensi yang lebih mudah, saya salin tempel contoh dan hasilnya di sini:

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)

Yang memberikan ini sebagai 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

Pengalaman saya adalah bahwa hasilnya sensitif terhadap alpha, dan nilai standarnya .6masuk akal. Namun, pada data saya yang sebenarnya alpha=.3jauh lebih cepat dan perkiraan informasi timbal balik memiliki korelasi yang sangat tinggi dengan kasus itu alpha=.6. Jadi jika Anda menggunakan MI untuk memilih MI dengan MI tinggi, Anda dapat menggunakan MI yang lebih kecil alphadan menggunakan nilai tertinggi sebagai pengganti dengan akurasi yang baik.

adrin
sumber
Terima kasih! Sudahkah Anda membandingkan minepy dengan sklearn untuk estimasi MI?
pir
Tidak, belum. Saya tidak yakin mengapa tidak!
adrin
Saya baru saja melakukan perbandingan sklearn dan minepy (baik alpha = 0,3 dan alpha = 0,6). Hasilnya sangat berbeda! Karena sangat mudah, Anda mungkin juga harus memeriksa hasil menggunakan kedua perpustakaan :)
pir
2
MIC tidak sama dengan informasi timbal balik (MI). Mereka adalah dua hal yang sangat berbeda.
Simone
1
Ya tentu. Dalam makalah MIC asli ada banyak perbandingan antara MI dan MIC: uvm.edu/~cdanfort/csc-reading-group/… MIC menunjukkan bahwa itu dapat digunakan sebagai proksi dari jumlah kebisingan untuk hubungan fungsional - properti yang disebut 'pemerataan' dalam karya asli. Meskipun demikian, MI masih merupakan ukuran ketergantungan yang sangat baik untuk banyak tugas: misalnya pemilihan fitur atau inferensi jaringan genetik. Juga lebih cepat diperkirakan daripada MIC.
Simone