Fuzzy zhlukovanie: algoritmus fuzzy c-means a body medzi zhlukmi
K-means a jeho ostré priradenie, fuzzy c-means s príslušnosťami ku všetkým zhlukom, fuzzifikátor m, koeficient rozkladu a Xieho–Beniho index na voľbu počtu zhlukov — a prečo odľahlé body dostanú vysoké príslušnosti.
Séria Základy AI Diel 36 z 52
- Mapa umelej inteligencie: čo je čo a ako to do seba zapadá
- Stručná história umelej inteligencie: od Turinga po jazykové modely
- Dáta, model, tréning, inferencia: základné pojmy na jednom príklade
- Ako čítať matematický zápis: symboly, indexy, sumy a kvantifikátory
- Množiny a relácie: stavebnica, z ktorej sa skladajú definície v AI
- Funkcie a zobrazenia: prečo je každý model v AI funkcia
- Logika a dôkazy: pravidlá, podľa ktorých sa v AI uvažuje
- Grafy a stromy: štruktúra, na ktorej stojí hľadanie aj neurónové siete
- Lineárna algebra pre strojové učenie: vektory, matice a prečo AI hlavne násobí
- Derivácie, gradient a reťazové pravidlo: ako model zistí, ktorým smerom sa učiť
- Gradientný zostup: ako sa model učí
- Čo je pravdepodobnosť: od hodu kockou ku Kolmogorovovým axiómam
- Podmienená pravdepodobnosť a Bayesova veta: ako zmeniť odhad, keď sa dozviete niečo nové
- Náhodná premenná a distribučná funkcia: jedna funkcia, ktorá o rozdelení povie všetko
- Funkcia hustoty a pravdepodobnostná funkcia: prečo má spojitá premenná v bode pravdepodobnosť nula
- Stredná hodnota, rozptyl a kovariancia: kde rozdelenie leží, aké je široké a čo s čím súvisí
- Prehľad pravdepodobnostných rozdelení: Bernoulliho, binomické, Poissonovo, rovnomerné, normálne a exponenciálne
- Zákon veľkých čísel a centrálna limitná veta: prečo sa priemery správajú tak predvídateľne
- Štatistika a odhady parametrov: maximálna vierohodnosť, MAP a intervaly spoľahlivosti
- Teória informácie: entropia, krížová entropia a KL divergencia — odkiaľ sa berú stratové funkcie
- Prehľadávanie stavového priestoru: BFS, DFS, UCS a A* s animáciami
- Hry a protivník: minimax, alfa-beta orezávanie a Monte Carlo tree search
- Splňovanie obmedzujúcich podmienok: backtracking, propagácia obmedzení a AC-3 na sudoku a mape krajov
- Logika a znalostné systémy: dopredné a spätné reťazenie, rezolúcia a expertné systémy
- Plánovanie: STRIPS, svet kociek, heuristiky z relaxácie a plánovanie v AI agentoch
- Lokálne hľadanie a simulované žíhanie: obchodný cestujúci cez krajské mestá
- Genetické algoritmy: populácia, kríženie, mutácia a výber na batohu na výlet
- Evolučné stratégie a genetické programovanie: od pravidla jednej pätiny po Keplerov zákon
- Optimalizácia mravčou kolóniou: ako feromónová stopa nájde krátku cestu
- Optimalizácia rojom častíc: zotrvačnosť, vlastná skúsenosť a skúsenosť roja
- Neuroevolúcia: evolúcia váh aj tvaru neurónových sietí a algoritmus NEAT
- Fuzzy množiny a funkcie príslušnosti: ako zapísať „trochu teplo“
- Fuzzy logika a pravdepodobnosť: prečo „trochu teplo“ neznamená „pravdepodobne teplo“
- Fuzzy logika: t-normy, implikácie a pravidlá AK–TAK
- Fuzzy riadenie: Mamdani a Sugeno od ventilátora po kyvadlo na vozíku
- Fuzzy zhlukovanie: algoritmus fuzzy c-means a body medzi zhlukmi
- Neuro-fuzzy systémy (ANFIS): fuzzy pravidlá, ktoré sa učia z dát
- Markovove reťazce: prechodová matica, stacionárne rozdelenie a PageRank
- Skryté Markovove modely: Viterbiho algoritmus a nepoctivé kasíno
- Bayesovské siete: prečo je tráva mokrá a čo z toho vyplýva pre postrekovač
- Kalmanov filter: ako z nepresných meraní odhadnúť, kde auto je a ako rýchlo ide
- Druhy strojového učenia: s učiteľom, bez učiteľa, s čiastočným učiteľom a ďalšie
- Prompty, kontext a RAG: ako modelu dať správne informácie
- Variačné autoenkodéry (VAE): nové obrázky zo spojitého latentného priestoru
- Generatívne adversariálne siete (GAN): falšovateľ proti detektívovi
- Difúzne modely: ako sa z čistého šumu stane obrázok
- Markovove rozhodovacie procesy: stavy, akcie, odmeny a Bellmanove rovnice
- Q-learning a DQN: učenie hodnoty akcií od tabuľky po neurónovú sieť
- Policy gradient a PPO: učenie priamo stratégie
- Ako funguje AI agent: jazykový model v slučke s nástrojmi
- Programovanie s AI agentmi: zadanie, testy a kontrola
- Vyhodnocovanie a bezpečnosť AI systémov: ako merať a ako strážiť
Celá osnova série Hotovo: 52 z 83 tém
- Ako funguje k-means a čo zamlčí o bodoch na rozhraní zhlukov.
- Ako fuzzy c-means počíta príslušnosti a stredy a čo robí fuzzifikátor m.
- Ako zvoliť počet zhlukov a kde fuzzy c-means zlyháva.
Čo sa hodí vedieť vopred: Fuzzy množiny a funkcie príslušnosti: ako zapísať „trochu teplo“, Druhy strojového učenia: s učiteľom, bez učiteľa, s čiastočným učiteľom a ďalšie
Zhlukovanie hľadá v dátach skupiny, o ktorých vopred nič nevieme: zákazníkov s podobným nákupným správaním, oblasti rovnakého tkaniva na snímke z magnetickej rezonancie, dokumenty s podobnou témou. Klasický algoritmus k-means priradí každý bod práve jednej skupine. Lenže skutočné dáta mávajú body na rozhraní — zákazníka, ktorý nakupuje trochu ako študent a trochu ako rodič, pixel, v ktorom sa stretáva sivá a biela hmota mozgu. Fuzzy zhlukovanie dovolí bodu patriť do viacerých skupín naraz, do každej z nich trochu.
Nadväzuje na diely Fuzzy množiny a funkcie príslušnosti a Druhy strojového učenia, kde sa zhlukovanie objavilo ako typická úloha učenia bez učiteľa.
1. Ostré zhlukovanie: k-means
Definícia — úloha k-means
Nech d ≥ 1 a n ≥ 1 sú prirodzené čísla, x1, …, xn ∈ ℝd body a c ∈ ℕ, 1 ≤ c ≤ n, počet zhlukov. Priradenie je zobrazenie shluk : {1, …, n} → {1, …, c}, ktoré bodu xi priradí číslo jeho zhluku. Pre stredy v1, …, vc ∈ ℝd a priradenie shluk je cena
J(v1, …, vc, shluk) = ∑i=1n ‖xi − vshluk(i)‖2,
kde ‖·‖ je euklidovská vzdialenosť (ďalšia definícia). Úloha k-means je nájsť stredy a priradenie, pre ktoré je J najmenšie možné.
Lloydov algoritmus (približné riešenie úlohy k-means). Vstup: body x1, …, xn ∈ ℝd a počet zhlukov c. Výstup: stredy v1, …, vc a priradenie shluk. Kroky:
- Za počiatočné stredy zvoľ c navzájom rôznych bodov z x1, …, xn (náhodne).
- Priradenie: pre každé i = 1, …, n zvoľ shluk(i) ∈ argminj ∈ {1, …, c} ‖xi − vj‖2; ak je najbližších stredov viac a je medzi nimi doterajší stred bodu, ponechaj bod v jeho zhluku.
- Zastavenie: ak sa priradenie oproti predchádzajúcemu prechodu nezmenilo, skonči a vráť stredy a priradenie.
- Stredy: pre každé j = 1, …, c označ Sj = {i : shluk(i) = j} a ak Sj ≠ ∅, polož vj = 1/|Sj| ∑i ∈ Sj xi (priemer bodov zhluku; prázdny zhluk stred nemení).
- Pokračuj krokom 2.
Rozmiestnite do dát pár „vlajok“. Každý bod sa pridá k tej najbližšej. Potom sa každá vlajka presťahuje doprostred svojich bodov. Body sa znovu pridajú k najbližšej vlajke — a tak ďalej, kým sa nič nemení. Každý krok J zmenší, takže algoritmus určite skončí, aj keď nie nutne v najlepšom možnom rozklade.
Definícia — euklidovská vzdialenosť
Nech d ≥ 1 a x = (x1, …, xd), v = (v1, …, vd) ∈ ℝd. Euklidovská vzdialenosť bodov x a v je nezáporné číslo
‖x − v‖ = √∑r=1d (xr − vr)2.
V rovine (d = 2) je to obyčajná dĺžka úsečky, napríklad od bodu M1 = (4,5; 2,5) k stredu zhluku A (1,73; 2,31), ako ho nižšie nájde fuzzy c-means: √2,772 + 0,192 ≈ 2,78. Zhlukovanie pracuje so štvorcom ‖·‖2 — odpadne odmocnina a vzdialené body sa trestajú viac.
def kmeans(X, c):
V = c náhodne vybraných bodov z X # počiatočné stredy
while True:
shluk = [argmin_j ‖x − V[j]‖² for x in X] # krok priradenia
if shluk sa nezmenil: return V, shluk
for j in range(c): # krok stredov
V[j] = priemer bodov x, pre ktoré shluk(x) = j
Veta — Lloydov algoritmus skončí
Nech x1, …, xn ∈ ℝd, 1 ≤ c ≤ n a Lloydov algoritmus beží podľa definície vyššie (vrátane pravidla, že pri rovnakej vzdialenosti zostane bod vo svojom zhluku). Potom
- žiadny krok priradenia ani krok stredov nezväčší hodnotu J;
- algoritmus skončí po konečne mnohých prechodoch.
Dôkaz: Priradenie: každý člen ‖xi − vshluk(i)‖2 sa nahradí najmenším zo všetkých ‖xi − vj‖2, takže sa nezväčší. Stredy: pre neprázdnu množinu indexov S jedného zhluku s priemerom x̄ = 1/|S| ∑i∈S xi a ľubovoľné v ∈ ℝd platí rozklad
∑i∈S ‖xi − v‖2 = ∑i∈S ‖xi − x̄‖2 + |S| · ‖x̄ − v‖2
(zmiešaný člen 2 ∑ (xi − x̄) · (x̄ − v) je nulový, pretože ∑ (xi − x̄) = 0). Súčet je teda najmenší pre v = x̄. Rozkladov n bodov do c zhlukov je konečne veľa a J pri každej zmene priradenia ostro klesne (pri rovnakej vzdialenosti necháme bod v jeho zhluku), takže sa žiadny rozklad nezopakuje. ∎
Veta nehovorí nič o tom, či nájdený rozklad je ten s najmenším J — len že algoritmus nebude cykliť.
Naše dáta: tri skupiny po 40 bodoch — A vľavo dole, B vpravo a C hore —, štyri body na rozhraní (M1–M4) a dva odľahlé body ďaleko od všetkého (O1, O2). K-means sa ustálil po štyroch iteráciách:
Zhluky našiel dobre, ale body na rozhraní musel rozhodnúť: M1, M3 a M4 dal do B, M2 do A. Bod M3 pritom leží takmer presne medzi B a C — k-means o tom nepovie nič. A oba odľahlé body padli do zhluku C, akoby k nemu patrili rovnako ako jeho jadro.
2. Fuzzy c-means
Definícia — fuzzy c-means (Dunn 1973, Bezdek 1981)
Nech x1, …, xn ∈ ℝd sú body, c ∈ ℕ, 2 ≤ c < n, počet zhlukov a m ∈ ℝ, m > 1, fuzzifikátor. Matica príslušností je matica U = (uij) typu n × c (i = 1, …, n čísluje body, j = 1, …, c zhluky), ktorá spĺňa
- uij ∈ [0, 1] pre všetky i, j;
- ∑j=1c uij = 1 pre každé i — každý bod rozdelí celkovú príslušnosť 1 medzi zhluky;
- 0 < ∑i=1n uij < n pre každé j — žiadny zhluk nie je prázdny a žiadny nepohltí všetky body úplne.
Pre maticu príslušností U a stredy V = (v1, …, vc) ∈ (ℝd)c je cena
Jm(U, V) = ∑i=1n ∑j=1c uijm ‖xi − vj‖2.
Fuzzy c-means je úloha nájsť U a V s najmenšou cenou Jm a tento algoritmus na jej približné riešenie. Vstup: body, c, m, presnosť ε > 0 a najvyšší počet iterácií. Výstup: U a V. Kroky:
- Zvoľ počiatočné stredy v1, …, vc (napr. c rôznych náhodných bodov).
- Príslušnosti: pre všetky i, j vypočítaj dij = ‖xi − vj‖ (predpokladáme dij > 0) a uij = 1/∑k=1c (dij/dik)2/(m−1).
- Zastavenie: ak sa od predchádzajúceho prechodu žiadne uij nezmenilo o ε alebo viac, alebo bol vyčerpaný počet iterácií, skonči (po prvom prechode sa nekončí) a vráť U a V.
- Stredy: pre každé j = 1, …, c polož vj = ∑i=1n uijm xi/∑i=1n uijm a pokračuj krokom 2.
Oba výpočtové kroky vyplývajú z podmienok optimality (veta nižšie): každý minimalizuje Jm pri pevnej druhej skupine premenných.
Každý bod rozdelí svoju jednotku medzi všetky zhluky — viac tomu, ku ktorému má bližšie. Stred zhluku je vážený priemer všetkých bodov: body, ktoré k zhluku patria silno, ho ťahajú viac, body z iných zhlukov len nepatrne. Vzorec pre príslušnosť porovnáva vzdialenosti: ak je bod k jednému stredu dvakrát bližšie než k druhému, dostane (pri m = 2) štyrikrát väčšiu príslušnosť.
Jm = ∑i=1n ∑j=1c uijm ‖xi − vj‖2, ∑j uij = 1
- Jm
- celková „cena“ rozkladu — algoritmus ju minimalizuje; je malá, keď body patria hlavne k stredom, ktoré majú blízko
- ∑i ∑j
- každý bod sa počíta ku každému zhluku — na rozdiel od k-means, kde sa bral len jeden zhluk na bod
- uij
- príslušnosť bodu i k zhluku j — váha, s akou sa vzdialenosť do ceny započíta
- m
- fuzzifikátor — bez mocniny (m = 1) by sa oplatilo dať celú jednotku najbližšiemu stredu a vyšlo by opäť k-means; s m > 1 sa deliť oplatí: bod rovnako ďaleko od dvoch stredov zaplatí pri m = 2 a rozdelení napoly len (½2 + ½2) · d2 = ½d2 namiesto d2
- ‖xi − vj‖2
- štvorec vzdialenosti — čo stojí mať bod „pri“ tomto strede; vzdialený stred vyjde draho
- ∑j uij = 1
- podmienka — bez nej by minimum bolo triviálne: všetky uij = 0 a cena nula
uij = 1/∑k=1c ( dij/dik )2/(m−1)
- uij
- nová príslušnosť bodu i k zhluku j pri pevných stredoch
- dij/dik
- pomer vzdialeností — koľkokrát je stred j ďalej než stred k; pomer (nie rozdiel) robí výsledok nezávislým od mierky dát
- exponent 2/m − 1
- ako ostro pomer rozhoduje — pre m = 2 je to 2, takže dvakrát bližší stred dostane štyrikrát viac; pre m → 1 exponent rastie nad všetky medze a všetko dostane najbližší stred
- ∑k
- porovnanie so všetkými stredmi vrátane samotného j (člen k = j je 1) — vďaka tomu sa príslušnosti bodu sčítajú presne na 1
Veta — odkiaľ sa oba kroky berú
Nech x1, …, xn ∈ ℝd, c a m > 1 sú ako v definícii fuzzy c-means. Potom:
- Pre pevné stredy v1, …, vc, pre ktoré sú všetky vzdialenosti dij = ‖xi − vj‖ kladné, nadobúda Jm na množine matíc s uij ≥ 0 a ∑j uij = 1 minimum práve pre uij = 1/∑k=1c (dij/dik)2/(m−1).
- Pre pevnú maticu U, v ktorej ∑i uijm > 0 pre každé j, nadobúda Jm minimum cez v1, …, vc ∈ ℝd práve pre vj = ∑i uijm xi/∑i uijm.
Dôkaz. Príslušnosti pri pevných stredoch. Jm je súčet cez body a podmienky sa týkajú vždy jedného riadka U, takže stačí pre jeden bod i minimalizovať ∑j uijm dij2 za podmienky ∑j uij = 1. Lagrangeova funkcia je L = ∑j uijm dij2 − λ (∑j uij − 1). Z ∂L/∂uij = m uijm−1 dij2 − λ = 0 vyplýva uij = (λ/m)1/(m−1) · dij−2/(m−1). Dosadením do podmienky súčtu sa neznáma λ vykráti a zostane
uij = dij−2/(m−1)/∑k dik−2/(m−1) = 1/∑k (dij/dik)2/(m−1).
Vyšli kladné čísla, takže podmienku uij ≥ 0 netreba strážiť zvlášť. Funkcia u ↦ um d2 je pre m > 1 a d > 0 na [0, 1] ostro konvexná, takže tento jediný stacionárny bod je minimum. (Ak leží bod presne v strede, dij = 0, dostane k tomu zhluku príslušnosť 1; naša implementácia to rieši tak, že vzdialenosť nikdy neklesne pod 10−12.)
Stredy pri pevných príslušnostiach. Jm je vo vj konvexná kvadratická funkcia (ostro konvexná, pretože ∑i uijm > 0) a ∂Jm/∂vj = −2 ∑i uijm (xi − vj) = 0 dáva vj = ∑i uijm xi/∑i uijm. ∎
Každý krok teda Jm pri pevnej druhej skupine premenných minimalizuje a nemôže ho zväčšiť — rovnaký argument ako pri k-means. Bezdek a kol. (1987, oprava pôvodnej Bezdekovej vety z roku 1980) ukázali, že postupnosť má hromadné body v stacionárnych bodoch Jm (nie nutne v globálnom minime).
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)) # náhodné príslušnosti, riadok = 1
for _ in range(iteraci):
W = U ** m
V = (W.T @ X) / W.sum(axis=0)[:, None] # stredy ako vážené priemery
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 našich dátach
Farba bodu je teraz zmes farieb zhlukov podľa príslušností: čisto zelený bod patrí len do A, bod „medzi“ zelenou a oranžovou je sčasti v A a sčasti v B. Bodkované čiary ukazujú, ako sa stredy sťahovali — algoritmus sa ustálil po deviatich iteráciách:
| Bod | k-means | A | B | C |
|---|---|---|---|---|
| M1 (4,5; 2,5) | B | 0,41 | 0,45 | 0,15 |
| M2 (3,3; 4,5) | A | 0,43 | 0,18 | 0,38 |
| M3 (5,8; 5) | B | 0,12 | 0,44 | 0,45 |
| M4 (4,6; 4) | B | 0,28 | 0,40 | 0,32 |
Teraz je vidieť, čo k-means zamlčal. M1 je takmer napoly medzi A a B; M3 je vlastne o chlp viac v C než v B, hoci ho k-means dal do B; a M4 uprostred trojuholníka patrí trochu do všetkých troch. Body v jadrách zhlukov majú príslušnosť k svojmu zhluku blízko jednej. Stredy vyšli prakticky rovnako ako pri k-means — fuzzy c-means nemení, kde zhluky sú, ale pridá k nim informáciu, ako isto do nich ktorý bod patrí.
Príklad — príslušnosti bodu M1 = (4,5; 2,5)
Stredy po deviatich iteráciách: A ≈ (1,73; 2,31), B ≈ (7,12; 2,87), C ≈ (4,51; 7,11). Pre m = 2 stačia prevrátené štvorce vzdialeností (farby podľa zjednodušeného vzorca pre m = 2 v popise vyššie):
| Zhluk | d2 | 1/d2 | u = 1/d2/0,3190 |
|---|---|---|---|
| A | 2,772 + 0,192 ≈ 7,72 | 0,1296 | 0,41 |
| B | 2,622 + 0,372 ≈ 7,03 | 0,1423 | 0,45 |
| C | 0,012 + 4,612 ≈ 21,25 | 0,0471 | 0,15 |
| súčet | 0,3190 | 1,00 |
M1 je od stredov A a B takmer rovnako ďaleko (7,72 oproti 7,03), a preto sa medzi ne delí takmer napoly; C je trikrát ďalej (v štvorci), a tak dostane len zvyšok.
4. Fuzzifikátor m
Definícia — koeficient rozkladu
Nech n ≥ 1, c ≥ 2 a U = (uij) je matica typu n × c s uij ∈ [0, 1] a ∑j=1c uij = 1 pre každé i (matica príslušností). Koeficient rozkladu (partition coefficient) je číslo
PC(U) = 1/n ∑i=1n ∑j=1c uij2.
Vždy platí 1/c ≤ PC(U) ≤ 1, pričom
- PC(U) = 1 práve vtedy, keď je rozklad ostrý: v každom riadku je jedno uij = 1 a ostatné 0;
- PC(U) = 1/c práve vtedy, keď uij = 1/c pre všetky i, j — každý bod patrí do všetkých zhlukov rovnako.
(Pre každý riadok je ∑j uij2 ≤ ∑j uij = 1 s rovnosťou len pre hodnoty 0 a 1, a podľa Cauchyho–Schwarzovej nerovnosti ∑j uij2 ≥ 1/c (∑j uij)2 = 1/c s rovnosťou len pre rovnaké hodnoty.)
Jedno číslo, ktoré hovorí, aký „ostrý“ je rozklad. Pre tri zhluky leží medzi 1/3 (všetko je rozmazané) a 1 (každý bod má jasný domov).
PC = 1/n ∑i ∑j uij2
- PC
- ostrosť celého rozkladu, číslo z [1/c; 1]
- 1/n ∑i
- priemer cez body — aby sa dali porovnať dátové množiny rôznej veľkosti
- ∑j uij2
- ostrosť jedného bodu — štvorec „odmení“ sústredenú príslušnosť: (1, 0, 0) dá 1, (⅓, ⅓, ⅓) len ⅓; pri pevnom súčte 1 je súčet štvorcov najmenší, keď sú všetky diely rovnaké
Pre m blízko 1 sa fuzzy c-means blíži k-means: koeficient rozkladu je 0,98 a bod M4 patrí z 0,79 do B. Pre m = 2 je koeficient 0,84 a pre m = 5 len 0,42 — farby sa zlievajú a aj bod z jadra zhluku A má k A príslušnosť len 0,45. Pre m → ∞ by všetky príslušnosti išli k 1/3. Najčastejšie sa používa m = 2: dostatočne mäkké, aby body na rozhraní boli vidieť, a dosť ostré, aby zhluky zostali zreteľné.
Príklad — bod dvakrát bližšie k jednému z dvoch stredov
Bod má k stredu 1 vzdialenosť 1 a k stredu 2 vzdialenosť 2. Vo vzorci pre príslušnosť je člen k = 1 rovný 1 a člen k = 2 má pomer 1/2, takže u1 = 1/1 + (1/2)2/(m−1) (farby podľa vzorca pre uij vyššie):
- m = 1,2: exponent 10, u1 = 1/1 + 1/1 024 ≈ 0,999 — prakticky ostré priradenie,
- m = 2: exponent 2, u1 = 1/1 + 1/4 = 0,8,
- m = 5: exponent 0,5, u1 = 1/1 + 0,707 ≈ 0,586,
- m → ∞: exponent → 0, (1/2)0 = 1 a u1 → 1/2.
Všeobecne: pre m → 1+ ide exponent 2/m − 1 do nekonečna, pomery dij/dik < 1 idú k nule a tie > 1 do nekonečna, takže najbližší stred dostane 1 a ostatné 0 (k-means). Pre m → ∞ ide exponent k nule, všetkých c členov súčtu ide k 1 a uij → 1/c.
5. Koľko zhlukov?
Počet zhlukov musíme algoritmu zadať. Keď ho nevieme, spustíme ho pre rôzne c a porovnáme kvalitu rozkladov. Na to sa hodí koeficient rozkladu a Xieho–Beniho index.
Definícia — Xieho–Beniho index
Nech x1, …, xn ∈ ℝd, c ≥ 2, m > 1, U = (uij) matica príslušností typu n × c a v1, …, vc ∈ ℝd navzájom rôzne stredy (typicky výsledok fuzzy c-means). Xieho–Beniho index je číslo
XB(U, V) = ∑i=1n ∑j=1c uijm ‖xi − vj‖2/n · minj ≠ k ‖vj − vk‖2.
Menovateľ je kladný, pretože stredy sú rôzne. Xie a Beni (1991) index zaviedli s exponentom 2 (t. j. pre m = 2); so všeobecným m sa bežne používa v rovnakom tvare. Pri porovnaní rozkladov je lepší ten s menším XB.
Čitateľ meria, ako tesne sú body pri svojich stredoch; menovateľ, ako ďaleko od seba sú dva najbližšie stredy. Dobrý rozklad má kompaktné zhluky, ktoré sú od seba ďaleko.
XB = ∑i ∑j uijm ‖xi − vj‖2/n · minj ≠ k ‖vj − vk‖2
- XB
- pomer rozptylu vnútri zhlukov k vzdialenosti medzi nimi — menší je lepší
- ∑ ∑ uijm ‖xi − vj‖2
- kompaktnosť — presne hodnota Jm, ktorú algoritmus minimalizoval
- n
- počet bodov — z čitateľa robí priemer na bod, aby index nerástol s veľkosťou dát
- minj ≠ k ‖vj − vk‖2
- oddelenosť — rozhoduje najbližšia dvojica stredov; samotné Jm s pribúdajúcimi zhlukmi len klesá, a tento člen trestá rozklad, ktorý jeden skutočný zhluk rozštiepi na dva blízke
Príklad — Xieho–Beniho index pre c = 3
Po skončení algoritmu je J2 ≈ 166,73. Štvorce vzdialeností stredov: A–B ≈ 29,4, A–C ≈ 30,8, B–C ≈ 24,79 (najbližšie sú B a C). Pre n = 126 bodov (farby podľa vzorca vyššie):
XB = 166,73/126 · 24,79 = 166,73/3 124 ≈ 0,053.
| Počet zhlukov c | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|
| Koeficient rozkladu (väčší je lepší) | 0,745 | 0,841 | 0,748 | 0,661 | 0,609 |
| Xieho–Beniho index (menší je lepší) | 0,228 | 0,053 | 0,298 | 0,682 | 0,529 |
Oba ukazovatele sa zhodnú na troch zhlukoch, ktoré sme do dát vložili. Pri skutočných dátach taká zhoda nie je samozrejmá a ukazovatele sú skôr vodidlom než verdiktom.
6. Kde fuzzy c-means zlyháva
Pozrite sa na odľahlé body: O1 vpravo hore má k C príslušnosť 0,45 a k B 0,39; O2 vľavo hore dokonca 0,58 k C. Pritom do žiadneho zhluku nepatria. Vinu nesie podmienka ∑j uij = 1: bod musí svoju jednotku niekomu rozdať, aj keď je ďaleko od všetkých. Príslušnosť tu znamená skôr „ku komu má najbližšie“ než „ako dobre sem patrí“.
Príklad — prečo O2 = (0,2; 9,5) „patrí“ do C
Štvorce vzdialeností k stredom: A ≈ 54,07, B ≈ 91,88, C ≈ 24,29. Aj od najbližšieho stredu C je teda 4,9 ďaleko — viac než šesťnásobok smerodajnej odchýlky 0,8, s ktorou sú body zhlukov rozhádzané okolo stredov. Podľa vzorca pre m = 2 (farby podľa popisu pri vzorci pre uij) dajú prevrátené hodnoty 1/54,07 ≈ 0,0185, 1/91,88 ≈ 0,0109 a 1/24,29 ≈ 0,0412 súčet 0,0706 a príslušnosti
uA = 0,0185/0,0706 ≈ 0,26, uB = 0,0109/0,0706 ≈ 0,15, uC = 0,0412/0,0706 ≈ 0,58.
Vzorec vidí len pomery vzdialeností, nie ich veľkosť: čím ďalej by bod ležal, tým viac by sa pomery blížili 1 a príslušnosti 1/3 — ale k nule by nešli nikdy.
Definícia — posibilistické c-means (Krishnapuram a Keller, 1993)
Nech x1, …, xn ∈ ℝd, c ≥ 1, m > 1, v1, …, vc ∈ ℝd stredy, dij = ‖xi − vj‖ a η1, …, ηc > 0 vopred zvolené parametre (obvykle odhadnuté z výsledku fuzzy c-means). Posibilistické c-means hľadá maticu U = (uij) typu n × c s uij ∈ [0, 1] — bez podmienky ∑j uij = 1 — a stredy, ktoré minimalizujú cenu
J(U, V) = ∑i=1n ∑j=1c uijm dij2 + ∑j=1c ηj ∑i=1n (1 − uij)m.
Druhý člen bráni triviálnemu riešeniu U = 0. Pri pevných stredoch je minimum v
uij = 1/1 + (dij2/ηj)1/(m−1),
stredy sa počítajú rovnako ako pri fuzzy c-means. ηj je „polomer“ zhluku j: bod vo vzdialenosti d2 = ηj má príslušnosť 1/2, pre m = 2 bod s d2 = 9ηj len 1/1 + 9 = 0,1. Príslušnosť teraz závisí od vzdialenosti k jedinému stredu, nie od pomeru k ostatným — odľahlý bod dostane malé hodnoty všade.
- Posibilistické c-means (Krishnapuram a Keller, 1993) podmienku súčtu rušia — odľahlý bod potom dostane malé príslušnosti ku všetkým zhlukom.
- Tvar zhlukov. Euklidovská vzdialenosť vytvára okrúhle zhluky. Algoritmus Gustafsona a Kessela (1979) dáva každému zhluku vlastnú maticu vzdialenosti a nájde aj pretiahnuté elipsy.
- Počiatočná poloha. Rovnako ako k-means môže skončiť v horšom lokálnom minime — v praxi sa spúšťa viackrát z rôznych štartov.
7. Fuzzy zhlukovanie v praxi
- Lekárske snímky. Segmentácia snímok mozgu z magnetickej rezonancie na sivú hmotu, bielu hmotu a mozgovomiechový mok je klasické použitie: pixel na rozhraní tkanív naozaj obsahuje obe.
- Segmentácia zákazníkov. Zákazník môže patriť sčasti do viacerých skupín a marketing s tým môže počítať.
- Pravdepodobnostný príbuzný. Gaussovské zmesi učené algoritmom EM tiež priraďujú body do zhlukov „mäkko“ — lenže pravdepodobnosťou, nie príslušnosťou. Výsledky bývajú podobné, výklad sa líši presne tak, ako to opísal diel o fuzzy logike a pravdepodobnosti.
- Embeddingy. Texty prevedené jazykovým modelom na vektory sa dajú zhlukovať rovnako; mäkké priradenie potom ukáže dokumenty, ktoré ležia medzi témami.
8. Zhrnutie
- K-means priradí každý bod práve jednému zhluku a o bodoch na rozhraní nič nepovie.
- Fuzzy c-means hľadá príslušnosti uij so súčtom 1 a stredy ako vážené priemery; strieda dva jednoduché kroky.
- Na našich dátach našiel rovnaké stredy ako k-means a navyše ukázal, že body M1–M4 patria do dvoch alebo troch zhlukov zároveň.
- Fuzzifikátor m riadi, aký mäkký je rozklad; koeficient rozkladu a Xieho–Beniho index pomôžu zvoliť počet zhlukov.
- Podmienka súčtu 1 dáva odľahlým bodom vysoké príslušnosti; posibilistické varianty to riešia.
Chcete si to vyskúšať? Nechajte AI agenta pustiť fuzzy c-means na farby pixelov vlastnej fotky a zafarbiť ju podľa zhlukov — a pozrite sa, ktoré pixely ležia „medzi“ farbami.
Máte na to iný názor? Napíšte na support@coden-app.com.