Algoritmus k-means a jeho nelineární rozšíření

Pavel Jisl a Karel Znamenáček

Zadání úlohy

  1. Seznamte se s metodou shlukování k-means a metodou nelinearizace algoritmu pomocí jádrových funkcí.
  2. Vyjádrete k-means algoritmus tak, aby data vystupovala pouze ve formě skalárních součinů, což umožní jeho nelinearizaci substitucí jádrových funkcí za skalární souciny. Použijte Euklidovskou metriku v nelinárním prostoru indukovaném zvolenou jádrovou funkcí. Implementujte takto nelinearizovaným k-means algoritmus s lineárním, polynomiálním a RBF jádrem.
  3. Vytvorte v Matlabu funkci, která vizualizuje nalezené shluky ve 2D prostoru.
  4. Provedte serii experimentu použitím Vámi implementovaného k-means algoritmu a funkce pro zobrazování nelineárních shluku.
  5. Porovnejte výhody a nevýhody k-means algoritmu nelinearizovaného pomocí jádrových funkcí a jeho standardní podoby bez nelinearizace.

Rozbor problému

Úloha spočívá v převodu lineárního algoritmu k-means na nelineární pomocí jádrových funkcí. Což znamená, že shluky hledáme ve vysokodimenzionálním prostoru, indukovaném zobrazením

Φ: Rd → RD,

kde d je počáteční dimenze (v našem případě se jedná o 2-D prostor) a D je jádrový prostor a zároveň D > d.

Pro výpočet je důležité vypočíst pro každý bod x jeho vzdálenost od center shluků xa. To lze zapsat jako

|| Φ(x) - 1/ptjxa∈Xtj Φ(xa)||2,
kde Xtjje množina bodů patřících v čase t do shluku j.

Tento vzorec lze vyjádřit za použití jádrových funkcí a tím získat vzorec pro výpočet vzdáleností v D-dimenzionálním prostoru:

K(x,x)+1/p2tj xa∈Xtjx b ∈Xtj K(xa,xb) - 2/p tjxa∈Xtj K( xa,x ) (1).

Pro vlastní výpočet pak používáme zadané jádrové funkce.
Název 2-D prostor zápis v Matlabu
lineární funkce (x1)'*(x2)
polynom d-tého stupně (((x1)'*(x2))+2)^d
RBF funkce exp(-((x1-x2)'*(x1-x2))*s)

Implementace

Náš program voláme pomocí funkce km, jejíž deklarace je
function [X,I]=KM(soubor,nsh,s,IT)

Vstupem programu jsou data, která generujeme pomocí programu creatset z balíku sprttool [ 4 ], uložená v souboru soubor typu *.mat, dále počet požadovaných shluků nsh, počet průběhů algoritmu IT a parametr s , který se používá při výpočtu jádrové verze funkce RBF. Počet požadovaných shluků je nutno zadat podle charakteru vstupních dat. Počet průběhů algoritmu v podstatě určuje, z kolika řešení bude program vybírat nejlepší řešení.

Na počátku každého průběhu určíme náhodně počáteční podmínky: všechny body přiřadíme do třídy 1 a náhodně vybraných (nsh-1) bodů přiřadíme do zbylých tříd. Následně počítáme vzdálenost všech bodů x od jednotlivých shluků pomocí výrazu (1 ) a každý bod přiřadíme do shluku vůči jehož těžišti má nejmenší vzdálenost. Tento proces opakujeme do té doby, dokud se příslušnosti jednotlivých bodů ke shlukům mění. Dá se dokázat, že tento proces má konečný počet kroků. Nakonec počítáme součet kvadrátů vzdáleností vzd všech bodů od příslušejících těžišť. 
Celý algoritmus se opakuje IT krát a vybírá se řešení s minimálním vzd.

Po ukončení algoritmu k-means počítáme kontury shluků. Jelikož není vždy možné znát transformaci z vysokodimenzionálního prostoru do 2-D prostoru, zvolili jsme následující postup.
Nejdříve spočítáme minimální poloměr vysokodimenzionální koule, která obepíná každý shluk. Zvolíme čtvercovou síť bodů ve 2D prostoru a přiřadíme jim konstantní hodnotu. Pro každý bod počítáme jeho vzdálenost od každého shluku. Pokud je příslušná vzdálenost od shluku menší než minimální poloměr tohoto shluku, přiřadíme tomuto bodu jinou konstantní hodnotu. Hodnoty této čtvercové sítě bodů jsou pak vstupními parametry funkce contour.
Existuje možnost, že se kontury překrývají, pak místo překrývajících se kontur zobrazí funkce contour jejich obal.


Experimenty

Vstupními data:
4 shluky

Výstup:
4 shluky - linearni funkce
Parametry volané funkce km: nsh=4, s=0, IT=20, typ='lin'


Vstupní data:
vnorene shluky

Výstup:
soustava shluku - RBF
parametry:  nsh=2, s=5, IT=30, typ='rbf'.

Pro srovnání výsledek za použití polynomiální funkce:

parametry:  nsh=2, s=5, IT=20, typ='poly'.


Vstupní data:


Výstup:

parametry:  nsh=3, s=5, IT=100, typ='rbf'.


Vstupní data:


Výstup z lineárního jádra:

parametry:  nsh=3, s=5, IT=30, typ='lin'.

Výstup z RBF jádra:

parametry:  nsh=3, s=5, IT=100, typ='rbf'.

Zhodnocení

Algoritmus k-means nelinearizovaný pomocí jádrových funkcí dokáže řešit libovolně složité úlohy, které by pomocí klasického k-means algoritmu řešit nešly, protože data jsou pomocí jádrových funkcí tránsformována do prostoru vyšší (až nekonečné) dimenze, kde lze nalézt separační nadplochy. Data ale musí vystupovat ve formě skalárních součinů, což velmi zpomaluje výpočet.
Výsledky algoritmu jsou velmi závislé na počátečních podmínkách. Pro optimální rozdělení do shluků je nutné zadávat parametr IT  dostatečně velký, protože po každém průchodu algoritmu se dospěje do minima, které nemusí být globální. Vyšším počtem průchodů algoritmem je proto pravděpodobnost nalezení globálního minima větší, ale nikdy není 100%.
Úspěšnost algoritmu je také závislá na parametrech použitých jádrových funkcí. Jedná se o parametr s. Ten u polynomiální jádrové funkce udává řád polynomu. Jeho vhodná volba je také důležitá při použití RBF funkce.
Při použití polynomiálního jádra jsme nedosáhli očekávaného zlepšení vůči jádru lineárnímu. Daleko větší zlepšení shlukování lineárně neseparabilních dat se projevilo při použití RBF jádra.
Zobrazení kontur není vzhledem k výpočetním možnostem zcela přesné, ale pro názornou představu je dostačující.

Závěr

Algoritmus neminimalizuje výsledek vzhledem k počtu shluků (vstupní parametr nsh naší funkce) a zavedení tohoto kritéria by vedlo k větší automatizaci  vyhledávání shluků. Vzhledem ke snaze o přehlednost a jednoduché pochopení implementace není algoritmus optimalizován pro rychlost.
Použití jádrových funkcí se nemusí omezit pouze na polynomiální a RBF jádra, ale lze použít i jiná jádra a dosáhnout zajímavých výsledků.

Programové vybavení

Literatura

  1. Přednášky předmětu Rozpoznávání - shlukování, SVM - cmp.felk.cvut.cz/cmp/courses/recognition/
  2. Internetové stránky www.kernel-machines.org a www.support-vector.net
  3. S.V.N. Vishwanathan, N. Narasimha Murty - Kernel Enabled k-Means Algorithm, drona.csa.iisc.ernet.in/~techrep/years/2002/
  4. V. Franc. Statistical Pattern Recognition Toolbox for Matlab, public domain software, 2000-2002. cmp.felk.cvut.cz/~xfrancv/stprtool/