Кількість бункерів при обчисленні взаємної інформації


10

Я хочу оцінити співвідношення між двома змінними, A і B, використовуючи взаємну інформацію. Спосіб її обчислення - це бінінг спостережень (див. Приклад Python-коду нижче). Однак які фактори визначають, яка кількість бункерів є розумною? Мені потрібно, щоб обчислення були швидкими, тому я не можу просто використовувати багато бункерів, щоб бути на безпечній стороні.

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

Відповіді:


15

Немає найкращої кількості бункерів для оцінки взаємної інформації (ІМ) за допомогою гістограм. Найкращий спосіб - це вибрати його за допомогою перехресної перевірки, якщо можете, або покластися на правило. Саме тому запропоновано багато інших оцінювачів ІМ, які не грунтуються на гістограмах.

Кількість бункерів залежатиме від загальної кількості точок даних n. Вам слід намагатися уникати занадто багато бункерів, щоб уникнути помилок оцінки для спільного розподілу між двома змінними. Вам також слід уникати занадто мало бункерів, щоб можна було фіксувати зв'язок між двома змінними. З огляду на те, що np.histogram2d(x, y, D)генерується двовимірна гістограма з Dоднаковими ширинами для обох, xі yя особисто вибрав би:

D=n/5
У цьому випадку в середньому для двох рівномірно розподілених випадкових величин у вас буде як мінімум 5 бали за кожну клітинку гістограми:
нDХDY5нD25D2н/5D=н/5
Це один з можливих виборів, що моделює підхід адаптивного розподілу, запропонований у (Cellucci, 2005) . Останній підхід часто використовується для оцінки ІМ для отримання висновку про генетичні мережі: наприклад, у MIDER .

Якщо у вас багато точок даних ні без відсутніх значень, ви не повинні занадто турбуватися про пошук найкращої кількості бункерів; наприклад, якщон=100,000. Якщо це не так, ви можете розглянути можливість виправлення ІМ для кінцевих зразків. (Steuer et al., 2002) обговорює деяку корекцію ІМ для завдання генетичної мережі.


Оцінка кількості відходів для гістограми - стара проблема. Можливо, вас зацікавить ця розмова Лауріца Дікмана про оцінку кількості бункерів для ІМ. Ця доповідь заснований на чолі Mike X Коена книги про нейронних тимчасових рядах.

Ви можете вибрати DХ і DY незалежно та використовуйте правило, яке використовується для оцінки кількості бункерів в 1D гістограмах.

Правило Фрідмана-Діаконіса (без припущення щодо розподілу):

DХ=максХ-хвХ2IQRн-1/3
де IQR- різниця між 75-квантильним і 25-квантильним. Подивіться на це пов’язане питання у СВ .

Правило Скотта (припущення про нормальність):

DХ=максХ-хвХ3.5сХн-1/3
де сХ - це стандартне відхилення для Х.

Правило Стерджеса (може занижувати кількість бункерів, але добре для великихн):

DХ=1+журнал2н

Важко правильно оцінити ІМ за допомогою гістограм. Ви можете вибрати інший оцінювач:

  • Красков кОцінювач NN, який трохи менш чутливий до вибору параметрів: к=4 або к=6найближчі сусіди часто використовуються як за замовчуванням. Папір: (Красков, 2003)
  • Оцінка ІМ за допомогою ядер (Moon, 1995) .

Є багато пакетів для оцінки ІМ:

  • Непараметричне поле для оцінювання ентропії для Python. сайт .
  • Інформаційно-динамічний інструментарій на Java, але доступний і для Python. сайт .
  • Пакет інструментів ITE в Matlab. сайт .

1

Я вважаю 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. Тож у випадку, якщо ви використовуєте ІМ для вибору тих, що мають високий ІМ, ви можете просто використовувати менші alphaта використовувати найвищі значення в якості заміни з хорошою точністю.


Дякую! Чи порівнювали ви мінепі з склеарном для оцінки ІМ?
пір

Ні, я ні. Я не впевнений, чому б і ні!
адрін

Я щойно провів порівняння склеарну та мінепі (як альфа = 0,3, так і альфа = 0,6). Результати дуже різні! Оскільки це так просто, напевно, ви також повинні перевірити свої результати, використовуючи обидві бібліотеки :)
pir

2
MIC не дорівнює взаємній інформації (MI). Це дві абсолютно різні речі.
Симона

1
Так, звичайно. В оригінальному документі MIC є багато порівнянь між MI та MIC: uvm.edu/~cdanfort/csc-reading-group/… MIC показують, що він може використовуватися як проксі кількість шуму для функціональних відносин - властивість, яку в оригінальному документі називають "справедливістю". Тим не менш, ІМ все ще є дуже хорошою мірою залежності для багатьох завдань: наприклад, вибору особливостей або висновку генетичної мережі. Це також швидше оцінити, ніж MIC.
Симоне
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.