ML Atlas

01 · Podstawy · 5 min czytania · aktualizacja

Informacja wzajemna — jak zmierzyć dowolną zależność między cechą a celem?

W skrócie

Informacja wzajemna mierzy każdą zależność, nie tylko liniową. Dla y = x² z szumem korelacja Pearsona to 0,03, a informacja wzajemna 1,57 nata.

Co to jest

Informacja wzajemna (mutual information, MI) mówi, o ile znajomość jednej zmiennej zmniejsza niepewność co do drugiej. Wynosi zero wtedy i tylko wtedy, gdy zmienne są niezależne, a rośnie z siłą zależności — niezależnie od jej kształtu. Pojęcie pochodzi z teorii informacji Shannona (1948).

Intuicja: chcemy zgadnąć odmianę wina. Bez żadnej wskazówki niepewność jest największa. Jeśli ktoś poda nam zawartość flawonoidów, część niepewności znika, bo niskie wartości zdarzają się prawie tylko w jednej odmianie. Informacja wzajemna to dokładnie ta zniknięta część niepewności.

Korelacja Pearsona mierzy tylko zależność liniową: jeśli y rośnie i maleje z x jak parabola, korelacja może wyjść zerowa, choć y jest prawie całkowicie wyznaczony przez x. Informacja wzajemna takich zależności nie przegapi.

Mechanizm — dlaczego tak działa

zależność, której korelacja nie widzikorelacja ≈ 0informacja wzajemna: wysokaH(X)H(Y)Iczęść wspólna:I(X; Y)Niezależne zmienne: koła się nie stykają, I = 0.
Schemat: zależność, której korelacja nie widzi

Dla zmiennych dyskretnych I(X; Y) = Σ p(x, y) · log[p(x, y) / (p(x) · p(y))]. To dywergencja Kullbacka–Leiblera między rozkładem łącznym a iloczynem rozkładów brzegowych, czyli miara tego, jak bardzo dane odbiegają od niezależności. Równoważnie I(X; Y) = H(Y) − H(Y | X): entropia celu minus entropia, która zostaje po poznaniu cechy. Stąd ograniczenie górne: informacja wzajemna nie może przekroczyć entropii żadnej ze zmiennych. W drzewach decyzyjnych ta sama wielkość nazywa się zyskiem informacyjnym.

Jednostka zależy od podstawy logarytmu. Logarytm naturalny daje naty (tak liczy scikit-learn), logarytm o podstawie 2 — bity; 1 nat to 1,443 bita. Informacja wzajemna nie zmienia się przy odwracalnym przekształceniu zmiennej, np. logarytmowaniu albo zmianie jednostek, więc nie wymaga skalowania cech (oszacowania k-NN zachowują tę własność tylko w przybliżeniu).

Trudność leży w estymacji. Dla zmiennych ciągłych nie znamy gęstości, a wzór jej wymaga. Najprostsze podejście to podzielić osie na przedziały i policzyć tabelę liczebności, ale wynik silnie zależy od liczby przedziałów: przy wielu przedziałach i małej próbie prawie każda komórka ma 0 albo 1 obserwację i estymator „widzi” zależność także w czystym szumie. Kraskov, Stögbauer i Grassberger (2004) zaproponowali estymator oparty na k najbliższych sąsiadach. Dla każdego punktu bierze odległość do k-tego sąsiada w przestrzeni łącznej i liczy, ilu sąsiadów leży w tej odległości na każdej osi z osobna. Estymator ma małe obciążenie, a dla zmiennych niezależnych daje wartości bliskie zera. Wersję dla cechy ciągłej i celu dyskretnego opisał Ross (2014).

Gdzie to się psuje. Estymator jest losowy: scikit-learn dodaje do cech ciągłych drobny szum, a wynik zależy od liczby sąsiadów k. Ujemne oszacowania scikit-learn zamienia na zero. Przy małych próbach różnice między cechami rzędu kilku setnych nata są szumem. Informacja wzajemna nie mówi też, w którą stronę idzie zależność, ani czy model będzie umiał ją wykorzystać. Liczona osobno dla każdej cechy pomija interakcje (cecha bezużyteczna sama, przydatna w parze) i nie widzi, że dwie cechy niosą tę samą informację.

Na przykładzie

Zbiór Wine: 178 win z trzech odmian i 13 cech chemicznych. Entropia odmiany wynosi 1,086 nata (1,567 bita) — więcej żadna cecha nie może wyjaśnić. Najwięcej informacji niosą flawonoidy (0,666 nata), prolina (0,567) i intensywność koloru (0,552), najmniej popiół (0,082).

Porównajmy z dwiema innymi miarami. Statystyka F z analizy wariancji daje bardzo podobny ranking (korelacja rang Spearmana z MI 0,95). Wartość bezwzględna korelacji Pearsona z numerem odmiany zgadza się słabiej (0,59). Intensywność koloru jest trzecia według MI, piąta według F i dopiero jedenasta według korelacji (|r| = 0,27). Przyczyna: średnie w odmianach wynoszą 5,5, 3,1 i 7,4, więc najniższa jest w środkowej odmianie. Korelacja z numerem odmiany zakłada porządek, którego tu nie ma — numery klas są tylko etykietami. Alkohol ma ten sam problem (piąty według MI, dziesiąty według korelacji).

Sztuczny przykład pokazuje to jeszcze wyraźniej. Dla 1000 punktów x z przedziału od −1 do 1 i y = x² z niewielkim szumem korelacja Pearsona wynosi 0,03 (p = 0,35), czyli „brak związku”. Informacja wzajemna wynosi 1,57 nata. Dla zależności liniowej y = x z tym samym szumem r = 0,996 i MI = 2,35 nata, a dla y niezależnego od x MI = 0.

Wybór estymatora ma znaczenie. Dla pary zmiennych normalnych o korelacji 0,5 prawdziwa informacja wzajemna to 0,144 nata. Estymator k-NN daje średnio 0,153 przy 100 punktach i 0,147 przy 1000. Histogram z 10 przedziałami na oś daje 0,466 i 0,165, a z 50 przedziałami 2,375 i 0,714 — wielokrotnie za dużo. Dla zmiennych całkowicie niezależnych histogram z 50 przedziałami „znajduje” 2,35 nata przy 100 punktach, a estymator k-NN średnio 0,012.

Jak to policzono
  • Wine: load_wine (178 win, klasy 59/71/48, 13 cech); scikit-learn 1.9.1, SciPy 1.18.1. mutual_info_classif(X, y, random_state=0) (domyślnie n_neighbors=3), f_classif(X, y), |r| = abs(np.corrcoef(cecha, y)[0, 1]) z numerem odmiany 0/1/2; korelacja rang scipy.stats.spearmanr.
  • Entropia odmiany: 1,086 nata = 1,567 bita. MI (naty) / F / |r|: flawonoidy 0,666 / 233,9 / 0,847; prolina 0,567 / 207,9 / 0,634; intensywność koloru 0,552 / 120,7 / 0,266; OD280/OD315 0,506 / 190,0 / 0,788; alkohol 0,473 / 135,1 / 0,328; popiół 0,082 / 13,3 / 0,050. Rangi intensywności koloru: 3 / 5 / 11; alkoholu: 5 / 4 / 10.
  • Spearman: MI–F 0,95; MI–|r| 0,59; F–|r| 0,66. Średnie intensywności koloru w odmianach 0, 1, 2: 5,53; 3,09; 7,40.
  • Wrażliwość: dla random_state 0–4 flawonoidy zawsze pierwsze, prolina i intensywność koloru zamieniają się miejscami (ziarna 2 i 4). n_neighbors=10: trzecie miejsce zajmuje OD280/OD315 (0,562); n_neighbors=30: flawonoidy 0,724.
  • Przykład sztuczny: rng = np.random.default_rng(0); x = rng.uniform(-1, 1, 1000), szum = rng.normal(0, 0.05, 1000), y niezależny = rng.uniform(-1, 1, 1000). scipy.stats.pearsonr i mutual_info_regression(x[:, None], y, random_state=0): y = x² + szum — r = 0,030, p = 0,35, MI = 1,575; y = x + szum — r = 0,996, MI = 2,348; y niezależny — r = 0,007, MI = 0 (oszacowanie ujemne obcięte do zera).
  • Zmienne normalne o korelacji ρ, prawdziwa MI = −½ ln(1 − ρ²): ρ = 0,5 → 0,144; ρ = 0,9 → 0,830. 20 powtórzeń (default_rng(100 + s), s = 0–19). Średnia (odchylenie) k-NN: ρ = 0,5 — 0,153 (0,076) przy n = 100, 0,147 (0,031) przy n = 1000; ρ = 0,9 — 0,844 (0,096) i 0,846 (0,043). Histogram (np.histogram_bin_edges, mutual_info_score na numerach przedziałów), 10 przedziałów: 0,466 i 0,165 (ρ = 0,5), 0,923 i 0,716 (ρ = 0,9); 50 przedziałów: 2,375 i 0,714, 2,420 i 1,142.
  • Zmienne niezależne (default_rng(200 + s)): k-NN średnio 0,0115 (maks. 0,108) przy n = 100 i 0,0044 (maks. 0,027) przy n = 1000; histogram z 50 przedziałami 2,351 i 0,654.
  • Titanic (data/raw/titanic.csv, 891 pasażerów), płeć × przeżycie: mutual_info_score = 0,1509 nata; chi2_contingency(tab, correction=False, lambda_="log-likelihood") → G = 268,85 = 2 · 891 · MI; χ² Pearsona 263,05.

Dane: Titanic Wine (wina z Piemontu)

W praktyce

  • sklearn.feature_selection.mutual_info_classif (cel dyskretny) i mutual_info_regression (cel ciągły); zawsze ustawiaj random_state i sprawdź kilka wartości n_neighbors.
  • Cechy dyskretne oznacz parametrem discrete_features — inaczej gęste dane są traktowane jako ciągłe.
  • Do selekcji: SelectKBest(mutual_info_classif, k=...) wewnątrz potoku, dopasowywany w każdym foldzie walidacji krzyżowej, żeby nie przeciekała informacja z danych testowych.
  • sklearn.metrics.mutual_info_score liczy MI dla dwóch zmiennych kategorycznych z tabeli liczebności; dla zmiennych ciągłych nie dziel ich naiwnie na wiele przedziałów.
  • Porównuj cechy tylko w obrębie jednego zbioru i jednego estymatora; wartości w natach nie są znormalizowane do przedziału 0–1.

Najczęstsze pytania

Czym informacja wzajemna różni się od korelacji?
Korelacja Pearsona mierzy siłę i kierunek zależności liniowej i może wynosić zero przy pełnej zależności nieliniowej. Informacja wzajemna wykrywa każdą zależność, ale nie podaje kierunku i trudniej ją oszacować. Dla dwóch zmiennych zero-jedynkowych korelacja Pearsona to współczynnik φ, w ocenie klasyfikatorów znany jako MCC.
Czy wysoka informacja wzajemna oznacza ważną cechę dla modelu?
Oznacza, że cecha niesie informację o celu sama w sobie. Model może jej nie potrzebować, jeśli tę samą informację niesie inna cecha, i może korzystać z cechy o niskiej MI w interakcji z innymi. Jak model używa cech w konkretnym przypadku, pokazują metody wyjaśniania, np. LIME.
Naty czy bity?
To samo, inna jednostka: wartość w bitach to wartość w natach podzielona przez ln 2 (≈ 0,693). scikit-learn podaje naty; 0,666 nata dla flawonoidów to 0,961 bita.
Czy informacja wzajemna z testem chi-kwadrat to to samo?
Są blisko spokrewnione: statystyka G testu ilorazu wiarygodności dla tabeli kontyngencji to 2n razy informacja wzajemna w natach, a dla dużych prób jest bliska statystyce χ² Pearsona. Dla płci i przeżycia na Titanicu MI = 0,1509 nata, G = 2 · 891 · 0,1509 = 268,9, a χ² = 263,1.

Źródła

Zobacz też