Przejdź do treści
coden

Klasteryzacja rozmyta: algorytm fuzzy c-means i punkty między skupieniami

K-means i jego ostre przypisanie, fuzzy c-means z przynależnościami do wszystkich skupień, fuzyfikator m, współczynnik podziału i indeks Xie–Beniego do wyboru liczby skupień — oraz dlaczego punkty odstające dostają wysokie przynależności.

13 minut Matěj Žalmánek 2026-10-15

Seria Podstawy AI Część 36 z 52
  1. Mapa sztucznej inteligencji: co jest czym i jak to do siebie pasuje
  2. Krótka historia sztucznej inteligencji: od Turinga do modeli językowych
  3. Dane, model, trening, inferencja: podstawowe pojęcia na jednym przykładzie
  4. Jak czytać zapis matematyczny: symbole, indeksy, sumy i kwantyfikatory
  5. Zbiory i relacje: klocki, z których składają się definicje w AI
  6. Funkcje i odwzorowania: dlaczego każdy model AI jest funkcją
  7. Logika i dowody: reguły, według których rozumuje AI
  8. Grafy i drzewa: struktura, na której opierają się przeszukiwanie i sieci neuronowe
  9. Algebra liniowa dla uczenia maszynowego: wektory, macierze i dlaczego AI głównie mnoży
  10. Pochodne, gradient i reguła łańcuchowa: jak model ustala, w którą stronę się uczyć
  11. Spadek gradientu: jak uczy się model
  12. Czym jest prawdopodobieństwo: od rzutu kostką do aksjomatów Kołmogorowa
  13. Prawdopodobieństwo warunkowe i twierdzenie Bayesa: jak zmienić ocenę, gdy dowiesz się czegoś nowego
  14. Zmienna losowa i dystrybuanta: jedna funkcja, która mówi o rozkładzie wszystko
  15. Funkcja gęstości i funkcja prawdopodobieństwa: dlaczego zmienna ciągła ma w punkcie prawdopodobieństwo zero
  16. Wartość oczekiwana, wariancja i kowariancja: gdzie leży rozkład, jak jest szeroki i co z czym się wiąże
  17. Przegląd rozkładów prawdopodobieństwa: Bernoulliego, dwumianowy, Poissona, jednostajny, normalny i wykładniczy
  18. Prawo wielkich liczb i centralne twierdzenie graniczne: dlaczego średnie zachowują się tak przewidywalnie
  19. Statystyka i estymacja parametrów: największa wiarygodność, MAP i przedziały ufności
  20. Teoria informacji: entropia, entropia krzyżowa i dywergencja KL — skąd się biorą funkcje straty
  21. Przeszukiwanie przestrzeni stanów: BFS, DFS, UCS i A* z animacjami
  22. Gry i przeciwnik: minimax, przycinanie alfa-beta i Monte Carlo tree search
  23. Spełnianie ograniczeń: backtracking, propagacja ograniczeń i AC-3 na sudoku i mapie czeskich krajów
  24. Logika i systemy z bazą wiedzy: wnioskowanie w przód i wstecz, rezolucja i systemy ekspertowe
  25. Planowanie: STRIPS, świat klocków, heurystyki z relaksacji i planowanie w agentach AI
  26. Przeszukiwanie lokalne i symulowane wyżarzanie: komiwojażer przez czeskie miasta wojewódzkie
  27. Algorytmy genetyczne: populacja, krzyżowanie, mutacja i selekcja na plecaku na wycieczkę
  28. Strategie ewolucyjne i programowanie genetyczne: od reguły jednej piątej do prawa Keplera
  29. Optymalizacja kolonią mrówek: jak ślad feromonowy znajduje krótką drogę
  30. Optymalizacja rojem cząstek: bezwładność, własne doświadczenie i doświadczenie roju
  31. Neuroewolucja: ewolucja wag i kształtu sieci neuronowych oraz algorytm NEAT
  32. Zbiory rozmyte i funkcje przynależności: jak zapisać „trochę ciepło”
  33. Logika rozmyta a prawdopodobieństwo: dlaczego „trochę ciepło” nie znaczy „prawdopodobnie ciepło”
  34. Logika rozmyta: t-normy, implikacje i reguły JEŻELI–TO
  35. Sterowanie rozmyte: Mamdani i Sugeno od wentylatora po wahadło na wózku
  36. Klasteryzacja rozmyta: algorytm fuzzy c-means i punkty między skupieniami
  37. Systemy neuro-rozmyte (ANFIS): reguły rozmyte, które uczą się z danych
  38. Łańcuchy Markowa: macierz przejścia, rozkład stacjonarny i PageRank
  39. Ukryte modele Markowa: algorytm Viterbiego i nieuczciwe kasyno
  40. Sieci bayesowskie: dlaczego trawa jest mokra i co z tego wynika dla zraszacza
  41. Filtr Kalmana: jak z niedokładnych pomiarów oszacować, gdzie jest samochód i jak szybko jedzie
  42. Rodzaje uczenia maszynowego: nadzorowane, nienadzorowane, półnadzorowane i inne
  43. Prompty, kontekst i RAG: jak dać modelowi właściwe informacje
  44. Wariacyjne autoenkodery (VAE): nowe obrazki z ciągłej przestrzeni latentnej
  45. Generatywne sieci przeciwstawne (GAN): fałszerz kontra detektyw
  46. Modele dyfuzyjne: jak z czystego szumu powstaje obraz
  47. Procesy decyzyjne Markowa: stany, akcje, nagrody i równania Bellmana
  48. Q-learning i DQN: uczenie się wartości akcji od tabeli po sieć neuronową
  49. Policy gradient i PPO: uczenie się bezpośrednio polityki
  50. Jak działa agent AI: model językowy w pętli z narzędziami
  51. Programowanie z agentami AI: zadanie, testy i kontrola
  52. Ocena i bezpieczeństwo systemów AI: jak mierzyć i jak pilnować

Pełny program serii Gotowe: 52 z 83 tematów

Czego się dowiesz
  • Jak działa k-means i co przemilcza o punktach na granicy skupień.
  • Jak fuzzy c-means oblicza przynależności i środki i co robi fuzyfikator m.
  • Jak wybrać liczbę skupień i gdzie fuzzy c-means zawodzi.

Warto wiedzieć wcześniej: Zbiory rozmyte i funkcje przynależności: jak zapisać „trochę ciepło”, Rodzaje uczenia maszynowego: nadzorowane, nienadzorowane, półnadzorowane i inne

Klasteryzacja szuka w danych grup, o których z góry nic nie wiemy: klientów o podobnych zwyczajach zakupowych, obszarów tej samej tkanki na obrazie z rezonansu magnetycznego, dokumentów o podobnej tematyce. Klasyczny algorytm k-means (k-średnich) przypisuje każdy punkt dokładnie jednej grupie. Tyle że prawdziwe dane mają punkty na granicy — klienta, który kupuje trochę jak student, a trochę jak rodzic, piksel, w którym spotykają się istota szara i istota biała mózgu. Klasteryzacja rozmyta pozwala punktowi należeć do kilku grup naraz, do każdej po trochu.

Nawiązuje do części Zbiory rozmyte i funkcje przynależności oraz Rodzaje uczenia maszynowego, gdzie klasteryzacja pojawiła się jako typowe zadanie uczenia nienadzorowanego.

1. Klasteryzacja ostra: k-means

Definicja — zadanie k-means

Dla punktów x1, …, xn ∈ ℝd i liczby skupień c szukamy środków v1, …, vc i przypisania punktów do skupień, które minimalizują

J = ∑i=1n ‖xi − vshluk(i)‖2.

Algorytm Lloyda przeplata dwa kroki: przypisz każdy punkt do najbliższego środka; przelicz każdy środek jako średnią jego punktów. Powtarzaj, dopóki przypisanie się zmienia.

Mówiąc prościej

Rozstawiasz w danych kilka „flag”. Każdy punkt dołącza do najbliższej. Potem każda flaga przenosi się na środek swoich punktów. Punkty znowu dołączają do najbliższej flagi — i tak dalej, dopóki nic się nie zmienia. Każdy krok zmniejsza J, więc algorytm na pewno się skończy, choć niekoniecznie w najlepszym możliwym podziale.

Definicja — odległość euklidesowa

Dla punktów x, v ∈ ℝd jest ‖x − v‖ = √( ∑r=1d (xr − vr)2 ). Na płaszczyźnie to zwykła długość odcinka, na przykład od punktu M1 = (4,5; 2,5) do środka skupienia A (1,73; 2,31), jak go niżej znajdzie fuzzy c-means: √(2,772 + 0,192) ≈ 2,78. Klasteryzacja pracuje z kwadratem ‖·‖2 — odpada pierwiastek, a odległe punkty są karane mocniej.

def kmeans(X, c):
    V = c losowo wybranych punktów z X              # środki początkowe
    while True:
        shluk = [argmin_j ‖x − V[j]‖² for x in X]  # krok przypisania
        if shluk się nie zmienił: return V, shluk
        for j in range(c):                         # krok środków
            V[j] = średnia punktów x, dla których shluk(x) = j
Twierdzenie — algorytm Lloyda się kończy

Żaden krok nie zwiększa J, dlatego algorytm kończy się po skończenie wielu krokach.

Dowód: Przypisanie: każdy składnik ‖xi − vshluk(i)‖2 zastępuje się najmniejszym ze wszystkich ‖xi − vj‖2, więc nie rośnie. Środki: dla punktów S jednego skupienia ze średnią x̄ zachodzi rozkład

∑i∈S ‖xi − v‖2 = ∑i∈S ‖xi − x̄‖2 + |S| · ‖x̄ − v‖2

(składnik mieszany 2 ∑ (xi − x̄) · (x̄ − v) jest zerowy, bo ∑ (xi − x̄) = 0). Suma jest więc najmniejsza dla v = x̄. Podziałów n punktów na c skupień jest skończenie wiele, a J przy każdej zmianie przypisania ściśle maleje (przy równej odległości zostawiamy punkt w jego skupieniu), więc żaden podział się nie powtórzy. ∎

Twierdzenie nie mówi nic o tym, czy znaleziony podział jest tym o najmniejszym J — tylko że algorytm nie wpadnie w cykl.

Nasze dane: trzy grupy po 40 punktów — A w lewym dolnym rogu, B po prawej i C u góry —, cztery punkty na granicy (M1–M4) i dwa punkty odstające, daleko od wszystkiego (O1, O2). K-means ustabilizował się po czterech iteracjach:

00551010 cecha x₁ (bez jednostki) cecha x₂ (bez jednostki) M1 M2 M3 M4 O1 O2
k-means: każdy punkt należy do dokładnie jednego skupienia

Skupienia znalazł dobrze, ale o punktach na granicy musiał rozstrzygnąć: M1, M3 i M4 dał do B, M2 do A. Punkt M3 leży przy tym niemal dokładnie między B a C — k-means nic o tym nie powie. A oba punkty odstające trafiły do skupienia C, jakby należały do niego tak samo jak jego jądro.

2. Fuzzy c-means

Definicja — fuzzy c-means (Dunn 1973, Bezdek 1981)

Zamiast przypisania szukamy macierzy przynależności U = (uij), uij ∈ [0, 1], gdzie dla każdego punktu ∑j uij = 1, oraz środków vj, które minimalizują

Jm = ∑i ∑j uijm ‖xi − vj‖2,

gdzie m > 1 to fuzyfikator (wykładnik rozmycia). Algorytm przeplata dwa kroki, które wynikają z warunków optymalności:

vj = ∑i uijm xi / ∑i uijm,    uij = 1 / ∑k (dij / dik)2/(m−1),

gdzie dij = ‖xi − vj‖.

Mówiąc prościej

Każdy punkt dzieli swoją jedynkę między wszystkie skupienia — więcej temu, do którego ma bliżej. Środek skupienia to średnia ważona wszystkich punktów: punkty, które silnie należą do skupienia, ciągną go mocniej, punkty z innych skupień tylko nieznacznie. Wzór na przynależność porównuje odległości: jeśli punkt jest do jednego środka dwa razy bliżej niż do drugiego, dostaje (przy m = 2) cztery razy większą przynależność.

Jm = ∑i=1n ∑j=1c uijm ‖xi − vj‖2,    ∑j uij = 1

Jm
całkowity „koszt” podziału — algorytm go minimalizuje; jest mały, gdy punkty należą głównie do środków, które mają blisko
∑i ∑j
każdy punkt liczy się do każdego skupienia — w odróżnieniu od k-means, gdzie brało się tylko jedno skupienie na punkt
uij
przynależność punktu i do skupienia j — waga, z jaką odległość wlicza się do kosztu
m
fuzyfikator — bez potęgi (m = 1) opłacałoby się dać całą jedynkę najbliższemu środkowi i wyszłoby znowu k-means; przy m > 1 dzielenie się opłaca: punkt równo odległy od dwóch środków płaci przy m = 2 i podziale na pół tylko (½2 + ½2) · d2 = ½d2 zamiast d2
‖xi − vj‖2
kwadrat odległości — ile kosztuje mieć punkt „przy” tym środku; odległy środek wychodzi drogo
∑j uij = 1
warunek — bez niego minimum byłoby trywialne: wszystkie uij = 0 i koszt zero

uij = 1 / ∑k=1c ( dij / dik )2/(m−1)

uij
nowa przynależność punktu i do skupienia j przy ustalonych środkach
dij / dik
stosunek odległości — ile razy środek j jest dalej niż środek k; stosunek (nie różnica) sprawia, że wynik nie zależy od skali danych
2/(m−1)
jak ostro stosunek rozstrzyga — dla m = 2 to 2, więc dwa razy bliższy środek dostaje cztery razy więcej; dla m → 1 wykładnik rośnie nieograniczenie i wszystko dostaje najbliższy środek
∑k
porównanie ze wszystkimi środkami łącznie z samym j (składnik k = j wynosi 1) — dzięki temu przynależności punktu sumują się dokładnie do 1
Dla m = 2 wzór upraszcza się do uij = (1/dij2) / ∑k (1/dik2): przynależność jest proporcjonalna do odwrotności kwadratu odległości.
Twierdzenie — skąd biorą się oba kroki

Przynależności przy ustalonych środkach. Dla jednego punktu i minimalizujemy ∑j uijm dij2 przy warunku ∑j uij = 1. Funkcja Lagrange’a to L = ∑j uijm dij2 − λ (∑j uij − 1). Z ∂L/∂uij = m uijm−1 dij2 − λ = 0 wynika uij = (λ/m)1/(m−1) · dij−2/(m−1). Po podstawieniu do warunku sumy niewiadoma λ się skraca i zostaje

uij = dij−2/(m−1) / ∑k dik−2/(m−1) = 1 / ∑k (dij / dik)2/(m−1).

Wyszły liczby dodatnie, więc warunku uij ≥ 0 nie trzeba pilnować osobno. (Jeśli punkt leży dokładnie w środku, dij = 0, dostaje do tego skupienia przynależność 1; nasza implementacja rozwiązuje to tak, że odległość nigdy nie spada poniżej 10−12.)

Środki przy ustalonych przynależnościach. Jm jest względem vj wypukłą funkcją kwadratową, a ∂Jm/∂vj = −2 ∑i uijm (xi − vj) = 0 daje vj = ∑i uijm xi / ∑i uijm.

Każdy krok minimalizuje więc Jm przy ustalonej drugiej grupie zmiennych i nie może go zwiększyć — ten sam argument co przy k-means. Bezdek i in. (1987, poprawka pierwotnego twierdzenia Bezdeka z 1980 roku) wykazali, że ciąg ma punkty skupienia w punktach stacjonarnych Jm (niekoniecznie w minimum globalnym).

import numpy as np

def fcm(X, c, m=2.0, iteraci=100, eps=1e-5):
    U = np.random.dirichlet(np.ones(c), size=len(X))        # losowe przynależności, wiersz = 1
    for _ in range(iteraci):
        W = U ** m
        V = (W.T @ X) / W.sum(axis=0)[:, None]             # środki jako średnie ważone
        D = np.linalg.norm(X[:, None, :] - V[None, :, :], axis=2) + 1e-12
        nove = 1 / ((D[:, :, None] / D[:, None, :]) ** (2 / (m - 1))).sum(axis=2)
        if np.abs(nove - U).max() < eps:
            return V, nove
        U = nove
    return V, U

3. Fuzzy c-means na naszych danych

Kolor punktu jest teraz mieszanką kolorów skupień według przynależności: czysto zielony punkt należy tylko do A, punkt „pomiędzy” zielonym a pomarańczowym jest częściowo w A, a częściowo w B. Kropkowane linie pokazują, jak przesuwały się środki — algorytm ustabilizował się po dziewięciu iteracjach:

00551010 cecha x₁ (bez jednostki) cecha x₂ (bez jednostki) M1 M2 M3 M4 O1 O2
Fuzzy c-means (m = 2): kolor to mieszanka według przynależności
Punktk-meansABC
M1 (4,5; 2,5)B0,410,450,15
M2 (3,3; 4,5)A0,430,180,38
M3 (5,8; 5)B0,120,440,45
M4 (4,6; 4)B0,280,400,32

Teraz widać, co k-means przemilczał. M1 jest niemal po połowie między A i B; M3 jest właściwie odrobinę bardziej w C niż w B, choć k-means dał go do B; a M4 w środku trójkąta należy trochę do wszystkich trzech. Punkty w jądrach skupień mają przynależność do swojego skupienia bliską jedności. Środki wyszły praktycznie tak samo jak przy k-means — fuzzy c-means nie zmienia tego, gdzie są skupienia, ale dodaje do nich informację, jak pewnie który punkt do nich należy.

Przykład — przynależności punktu M1 = (4,5; 2,5)

Środki po dziewięciu iteracjach: A ≈ (1,73; 2,31), B ≈ (7,12; 2,87), C ≈ (4,51; 7,11). Dla m = 2 wystarczą odwrotności kwadratów odległości:

Skupienied21/d2u = (1/d2) / 0,3190
A2,772 + 0,192 ≈ 7,720,12960,41
B2,622 + 0,372 ≈ 7,030,14230,45
C0,012 + 4,612 ≈ 21,250,04710,15
suma0,31901,00

M1 jest od środków A i B prawie tak samo daleko (7,72 wobec 7,03), dlatego dzieli się między nie niemal po połowie; C jest trzy razy dalej (w kwadracie), więc dostaje tylko resztę.

4. Fuzyfikator m

Definicja — współczynnik podziału

Współczynnik podziału (partition coefficient) to PC = (1/n) ∑i ∑j uij2. Wynosi 1 dla podziału ostrego i 1/c, gdy każdy punkt należy do wszystkich skupień jednakowo.

Mówiąc prościej

Jedna liczba, która mówi, jak „ostry” jest podział. Dla trzech skupień leży między 1/3 (wszystko jest rozmyte) a 1 (każdy punkt ma wyraźny dom).

PC = (1/n) ∑i ∑j uij2

PC
ostrość całego podziału, liczba z [1/c; 1]
(1/n) ∑i
średnia po punktach — żeby dało się porównywać zbiory danych różnej wielkości
∑j uij2
ostrość jednego punktu — kwadrat „nagradza” skupioną przynależność: (1, 0, 0) daje 1, (⅓, ⅓, ⅓) tylko ⅓; przy ustalonej sumie 1 suma kwadratów jest najmniejsza, gdy wszystkie części są równe
Punkt M1 z przynależnościami (0,41; 0,45; 0,15) wnosi 0,412 + 0,452 + 0,152 ≈ 0,39; punkty z jąder skupień prawie 1 — średnia wszystkich 126 punktów wynosi 0,84.
00551010 cecha x₁ (bez jednostki) cecha x₂ (bez jednostki) m = 1,2 m = 2 m = 5 M1 M2 M3 M4 O1 O2
Fuzzy c-means dla m = 1,2; 2 i 5

Dla m bliskiego 1 fuzzy c-means zbliża się do k-means: współczynnik podziału wynosi 0,98, a punkt M4 należy do B w 0,79. Dla m = 2 współczynnik wynosi 0,84, a dla m = 5 tylko 0,42 — kolory się zlewają i nawet punkt z jądra skupienia A ma przynależność do A tylko 0,45. Dla m → ∞ wszystkie przynależności dążyłyby do 1/3. Najczęściej stosuje się m = 2: wystarczająco miękkie, żeby punkty na granicy były widoczne, i dość ostre, żeby skupienia pozostały wyraźne.

Przykład — punkt dwa razy bliżej jednego z dwóch środków

Punkt ma do środka 1 odległość 1, a do środka 2 odległość 2. Według wzoru u1 = 1 / (1 + (1/2)2/(m−1)):

  • m = 1,2: wykładnik 10, u1 = 1 / (1 + 1/1 024) ≈ 0,999 — praktycznie ostre przypisanie,
  • m = 2: wykładnik 2, u1 = 1 / (1 + 1/4) = 0,8,
  • m = 5: wykładnik 0,5, u1 = 1 / (1 + 0,707) ≈ 0,586,
  • m → ∞: wykładnik → 0, (1/2)0 = 1 i u1 → 1/2.

Ogólnie: dla m → 1+ wykładnik 2/(m − 1) dąży do nieskończoności, stosunki dij/dik < 1 dążą do zera, a te > 1 do nieskończoności, więc najbliższy środek dostaje 1, a pozostałe 0 (k-means). Dla m → ∞ wykładnik dąży do zera, wszystkie c składników sumy dążą do 1 i uij → 1/c.

5. Ile skupień?

Liczbę skupień musimy algorytmowi podać. Gdy jej nie znamy, uruchamiamy go dla różnych c i porównujemy jakość podziałów. Przydają się do tego współczynnik podziału i indeks Xie–Beniego.

Definicja — indeks Xie–Beniego

XB = ∑i ∑j uijm ‖xi − vj‖2 / (n · minj ≠ k ‖vj − vk‖2) — im mniejszy, tym lepszy.

Mówiąc prościej

Licznik mierzy, jak ciasno punkty skupiają się przy swoich środkach; mianownik — jak daleko od siebie są dwa najbliższe środki. Dobry podział ma zwarte skupienia, które są od siebie daleko.

XB = ∑i ∑j uijm ‖xi − vj‖2 / ( n · minj ≠ k ‖vj − vk‖2 )

XB
stosunek „rozrzut wewnątrz skupień / odległość między nimi” — mniejszy jest lepszy
∑ ∑ uijm ‖xi − vj‖2
zwartość — dokładnie wartość Jm, którą algorytm minimalizował
n
liczba punktów — z licznika robi średnią na punkt, żeby indeks nie rósł z wielkością danych
minj ≠ k ‖vj − vk‖2
separacja — rozstrzyga najbliższa para środków; samo Jm wraz z przybywaniem skupień tylko maleje, a ten składnik karze podział, który jedno prawdziwe skupienie rozszczepia na dwa bliskie
Przykład — indeks Xie–Beniego dla c = 3

Po zakończeniu algorytmu J2 ≈ 166,73. Kwadraty odległości środków: A–B ≈ 29,4, A–C ≈ 30,8, B–C ≈ 24,79 (najbliżej są B i C). Dla n = 126 punktów:

XB = 166,73 / (126 · 24,79) = 166,73 / 3 124 ≈ 0,053.

Liczba skupień c23456
Współczynnik podziału (większy jest lepszy)0,7450,8410,7480,6610,609
Indeks Xie–Beniego (mniejszy jest lepszy)0,2280,0530,2980,6820,529

Oba wskaźniki zgadzają się co do trzech skupień, które włożyliśmy do danych. W prawdziwych danych taka zgodność nie jest oczywista, a wskaźniki są raczej drogowskazem niż werdyktem.

6. Gdzie fuzzy c-means zawodzi

Spójrz na punkty odstające: O1 w prawym górnym rogu ma przynależność do C 0,45 i do B 0,39; O2 w lewym górnym rogu nawet 0,58 do C. A przecież do żadnego skupienia nie należą. Winny jest warunek ∑j uij = 1: punkt musi komuś rozdać swoją jedynkę, nawet jeśli jest daleko od wszystkich. Przynależność oznacza tu raczej „do kogo ma najbliżej” niż „jak dobrze tu pasuje”.

Przykład — dlaczego O2 = (0,2; 9,5) „należy” do C

Kwadraty odległości do środków: A ≈ 54,07, B ≈ 91,88, C ≈ 24,29. Nawet od najbliższego środka C jest więc oddalony o 4,9 — ponad sześciokrotność odchylenia standardowego 0,8, z jakim punkty skupień są rozrzucone wokół środków. Odwrotności 0,0185, 0,0109 i 0,0412 dają sumę 0,0706 i przynależności 0,26, 0,15 i 0,58. Wzór widzi tylko stosunki odległości, nie ich wielkość: im dalej leżałby punkt, tym bardziej stosunki zbliżałyby się do 1, a przynależności do ⅓ — ale do zera nie dążyłyby nigdy.

Definicja — posybilistyczne c-means (Krishnapuram i Keller, 1993)

Warunek sumy się pomija, a do kosztu dodaje się składnik, który zapobiega trywialnemu rozwiązaniu u = 0:

J = ∑i ∑j uijm dij2 + ∑j ηj ∑i (1 − uij)m,    skąd uij = 1 / (1 + (dij2 / ηj)1/(m−1)).

ηj to „promień” skupienia j: punkt w odległości d2 = ηj ma przynależność ½, dla m = 2 punkt z d2 = 9ηj tylko 0,1. Przynależność zależy teraz od odległości do jednego środka, a nie od stosunku do pozostałych — punkt odstający dostaje wszędzie małe wartości.

  • Posybilistyczne c-means (Krishnapuram i Keller, 1993) znosi warunek sumy — punkt odstający dostaje wtedy małe przynależności do wszystkich skupień.
  • Kształt skupień. Odległość euklidesowa daje okrągłe skupienia. Algorytm Gustafsona i Kessela (1979) nadaje każdemu skupieniu własną macierz odległości i znajduje też wydłużone elipsy.
  • Położenie początkowe. Tak samo jak k-means może skończyć w gorszym minimum lokalnym — w praktyce uruchamia się go kilka razy z różnych punktów startowych.

7. Klasteryzacja rozmyta w praktyce

  • Obrazy medyczne. Segmentacja obrazów mózgu z rezonansu magnetycznego na istotę szarą, istotę białą i płyn mózgowo-rdzeniowy to klasyczne zastosowanie: piksel na granicy tkanek naprawdę zawiera obie.
  • Segmentacja klientów. Klient może należeć częściowo do kilku grup, a marketing może to uwzględnić.
  • Probabilistyczny krewny. Mieszaniny gaussowskie uczone algorytmem EM również przypisują punkty do skupień „miękko” — tyle że prawdopodobieństwem, a nie przynależnością. Wyniki bywają podobne, interpretacja różni się dokładnie tak, jak opisała to część o logice rozmytej i prawdopodobieństwie.
  • Embeddingi. Teksty zamienione przez model językowy na wektory można klasteryzować tak samo; miękkie przypisanie pokaże wtedy dokumenty, które leżą między tematami.

8. Podsumowanie

  • K-means przypisuje każdy punkt do dokładnie jednego skupienia i o punktach na granicy nic nie mówi.
  • Fuzzy c-means szuka przynależności uij o sumie 1 i środków jako średnich ważonych; przeplata dwa proste kroki.
  • Na naszych danych znalazł te same środki co k-means, a ponadto pokazał, że punkty M1–M4 należą do dwóch lub trzech skupień jednocześnie.
  • Fuzyfikator m steruje tym, jak miękki jest podział; współczynnik podziału i indeks Xie–Beniego pomagają wybrać liczbę skupień.
  • Warunek sumy 1 daje punktom odstającym wysokie przynależności; warianty posybilistyczne to rozwiązują.

Chcesz to wypróbować na własnej skórze? Poproś agenta AI, żeby uruchomił fuzzy c-means na kolorach pikseli twojego zdjęcia i pokolorował je według skupień — i zobacz, które piksele leżą „pomiędzy” kolorami.

Masz inne zdanie? Napisz na support@coden-app.com.

Agent na twoim komputerze, sterowany z telefonu