Saya lebih suka minepy
mendapatkan 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 .6
masuk akal. Namun, pada data saya yang sebenarnya alpha=.3
jauh 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 alpha
dan menggunakan nilai tertinggi sebagai pengganti dengan akurasi yang baik.