私minepy
はPythonで相互情報を取得して推定することを好みます。
ここでパッケージの実装の詳細を確認でき、ここでサンプルコードを確認できます。簡単に参照できるように、例をコピーして貼り付け、ここに出力します。
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)
これは出力としてこれを与えます:
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
私の経験では、結果はの影響をalpha
受けやすく、デフォルト値.6
は妥当な値です。しかし、私の実際のデータalpha=.3
ははるかに高速であり、推定された相互情報量はの場合と非常に高い相関関係を持っていalpha=.6
ます。したがって、MIを使用してMIが高いものを選択する場合は、小さいalpha
値を使用し、最高の値を精度の高い置換として使用できます。