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
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ślnien_neighbors=3),f_classif(X, y), |r| =abs(np.corrcoef(cecha, y)[0, 1])z numerem odmiany 0/1/2; korelacja rangscipy.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_state0–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.pearsonrimutual_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_scorena 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) imutual_info_regression(cel ciągły); zawsze ustawiajrandom_statei sprawdź kilka wartościn_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_scoreliczy 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
- Shannon C. E. „A Mathematical Theory of Communication”, Bell System Technical Journal 27(3), 1948, s. 379–423. https://doi.org/10.1002/j.1538-7305.1948.tb01338.x
- Kraskov A., Stögbauer H., Grassberger P. „Estimating mutual information”, Physical Review E 69, 2004, 066138. https://doi.org/10.1103/PhysRevE.69.066138
- Ross B. C. „Mutual Information between Discrete and Continuous Data Sets”, PLoS ONE 9(2), 2014, e87357. https://doi.org/10.1371/journal.pone.0087357
- Dokumentacja scikit-learn,
mutual_info_classif: https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.mutual_info_classif.html - Dokumentacja scikit-learn,
load_wine(zbiór Wine z UCI Machine Learning Repository): https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_wine.html
Czy to było pomocne?
Dzięki! To pomaga nam poprawiać Atlas.