ML Atlas

05 · Bez nadzoru · 4 min czytania · Interaktywne · aktualizacja

Czym jest silhouette i jak pomaga wybrać liczbę klastrów?

W skrócie

Silhouette porównuje, jak blisko punkt jest własnego klastra, a jak blisko najbliższego obcego. Ocenia konkretny podział, nie dane — dlatego zmienia się z k.

Co to jest

Silhouette (Rousseeuw 1987) to miara jakości podziału na klastry. Dla każdego punktu porównuje, jak blisko jest punktów własnej grupy, z tym, jak blisko jest punktów najbliższej obcej grupy. Średnia po wszystkich punktach daje liczbę od −1 do 1.

Ponieważ silhouette ocenia podział, a nie dane, jej wartość zmienia się z liczbą klastrów k. Właśnie dlatego służy do wyboru k: liczy się ją dla kolejnych k i szuka szczytu. Stosuje się ją z k-means i z każdym innym algorytmem klastrowania.

Mechanizm — dlaczego tak działa

Dla punktu i: a(i) to średnia odległość do pozostałych punktów własnego klastra, b(i) — najmniejsza średnia odległość do punktów któregoś z innych klastrów. Silhouette punktu: s(i) = (b − a) / max(a, b). Gdy punkt jest dużo bliżej swoich niż obcych, s zbliża się do 1; gdy równie blisko, s ≈ 0; gdy bliżej obcych — jest ujemne i punkt jest prawdopodobnie źle przypisany.

Co się dzieje, gdy k przekracza liczbę wyraźnych grup? K-means musi użyć dodatkowych środków, więc tnie zwartą grupę na części. Połówki stykają się ze sobą: dla punktu przy linii cięcia a jest tylko trochę mniejsze niż b, więc jego s spada do okolic zera. Środek przeciętej grupy, wcześniej miejsce o najwyższym s, staje się granicą. Średnia po zbiorze maleje, choć dane są te same i ich grupy nie zniknęły.

W drugą stronę działa to podobnie: dla k mniejszego niż liczba grup dwie prawdziwe grupy lądują w jednym klastrze, a(i) rośnie i s też spada. Szczyt wypada więc na liczbie grup, które są wyraźnie oddzielone — co nie musi być liczbą kategorii, jakie znamy z wiedzy dziedzinowej. Grupy nachodzące na siebie silhouette widzi jako jedną.

Zastrzeżenie: silhouette faworyzuje klastry kuliste i dobrze rozdzielone; dla wydłużonych lub zagnieżdżonych struktur szczyt może wskazać złe k. Dla k = 1 miara jest niezdefiniowana, więc nie odpowie na pytanie „czy klastrować w ogóle” — to trzeba sprawdzić porównaniem z danymi losowymi (gap statistic).

Na przykładzie

Palmer Penguins: 342 pingwiny, cztery pomiary po standaryzacji, KMeans(n_init=10, random_state=0). Średnia silhouette dla k = 2…8: 0,53; 0,45; 0,40; 0,38; 0,37; 0,34; 0,30. Szczyt wypada przy k = 2, choć w danych są trzy gatunki. Powód: Gentoo są wyraźnie więksi i mają inną płetwę, a Adelie i Chinstrap różnią się głównie długością dzioba i w pozostałych wymiarach nachodzą na siebie. Nawet podział według prawdziwych gatunków ma silhouette tylko 0,44.

Ten sam efekt widać na zbiorze Iris: po standaryzacji silhouette wynosi 0,58 dla k = 2 i 0,46 dla k = 3, bo Iris versicolor i Iris virginica tworzą jedną zwartą chmurę. Inercja maleje przy tym monotonicznie (na pingwinach z 566 przy k = 2 do 171 przy k = 8), więc sama nie wskazuje żadnego k. Silhouette mówi, ile jest dobrze oddzielonych grup, a nie ile jest kategorii.

Ta ilustracja działa w przeglądarce z włączonym JavaScriptem: k-średnich na pingwinach: suwak k i przyciski krokowe pokazują iteracje, inercję, sylwetkę i zgodność skupień z gatunkami.

Dane: Iris (irysy Fishera) Palmer Penguins (pingwiny z Antarktydy)

W praktyce

  • scikit-learn: silhouette_score(X, labels) (średnia) i silhouette_samples (per punkt) do wykresu sylwetkowego; licz na tych samych, standaryzowanych danych, na których klastrowano.
  • Pętla po k = 2…15, wykres s(k) i wybór szczytu; porównaj z łokciem inercji, która zawsze maleje z k.
  • Orientacyjna skala (Kaufman i Rousseeuw 1990): powyżej 0,5 wyraźna struktura, 0,25–0,5 słaba, poniżej 0,25 podział bliski arbitralnemu.
  • Koszt rośnie z kwadratem liczby punktów — dla dużych zbiorów użyj argumentu sample_size.
  • Typowy błąd: wybór k na podstawie jednej wartości „bo wyszło 0,4”, bez sprawdzenia sąsiednich k i wykresu per klaster.

Najczęstsze pytania

Jaka wartość silhouette jest dobra?
Powyżej 0,5 to wyraźne, oddzielone klastry; 0,25–0,5 to słaba struktura; poniżej 0,25 podział niewiele lepszy od losowego. Pojedyncza wartość mówi jednak mało — porównaj kilka k, patrz na kształt krzywej i na wykres sylwetkowy per klaster.
Dlaczego silhouette maleje, gdy zwiększam k?
Bo przy k większym niż liczba wyraźnych grup algorytm musi przeciąć zwartą grupę, a punkty przy cięciu są prawie równie blisko obu nowych środków. Miara ocenia ten konkretny podział, nie istnienie grup w danych.
Silhouette czy metoda łokcia?
Inercja zawsze maleje z k, więc łokieć bywa niejednoznaczny. Silhouette ma szczyt, co daje wyraźniejszy wybór, ale jest droższa obliczeniowo. Najlepiej użyć obu i wiedzy dziedzinowej; gdy wskazują różne k, grupy prawdopodobnie na siebie nachodzą.

Źródła

  • Rousseeuw, P. J. (1987). "Silhouettes: a graphical aid to the interpretation and validation of cluster analysis". Journal of Computational and Applied Mathematics 20, 53–65. doi:10.1016/0377-0427(87)90125-7
  • Kaufman, L., Rousseeuw, P. J. (1990). Finding Groups in Data: An Introduction to Cluster Analysis. Wiley.
  • Tibshirani, R., Walther, G., Hastie, T. (2001). "Estimating the number of clusters in a data set via the gap statistic". Journal of the Royal Statistical Society B 63(2), 411–423.
  • Hastie, T., Tibshirani, R., Friedman, J. (2009). The Elements of Statistical Learning, 2nd ed., Springer, rozdz. 14.3 "Cluster analysis".
  • scikit-learn: "Selecting the number of clusters with silhouette analysis on KMeans clustering". https://scikit-learn.org/stable/auto_examples/cluster/plot_kmeans_silhouette_analysis.html

Zobacz też