Klaszterezés a Studioban

Az előző posztomban foglalkoztam a klaszterezéssel általában, most nézzük meg, hogy konkrétan milyen lehetőségünk van erre a Studioban.

Jelenleg mindössze egyetlen egy megoldás áll rendelkezésünkre, méghozzá egy centroid alapú, a k-means (k-közép) algoritmus. Ez ugye központi vektorokkal választja el egymástól a klasztereket. n megfigyelést k klaszterbe partícionál az átlaguk alapján, ezáltal Voronoj-cellákat hoz létre. Iteratív algoritmus, optimalizálást hajt végre. Ez egy NP-nehéz probléma, amit jelenlegi tudásunk (és technológiánk) szerint nem tudunk megoldani belátható idő alatt, még szuperszámítógépekkel sem. Azonban léteznek heurisztikus algoritmusok, amik elég hamar konvergálnak a lokális optimumhoz. Ezek használatával gyorsan elérhetjük a kívánt eredményt.

Az algoritmus alapja úgy működik, hogy megadjuk neki a klaszterek számát, majd elhelyezi véletlenszerűen a klaszterek középpontjait, majd minden pontot abba a klaszterbe sorol, amelyik középpontjához a legközelebb helyezkedik el az adott pont. Ezután kiszámolja az új középpontokat, és újra besorolja az egyes pontokat a klaszterekbe, majd ezen iterál amíg stabilizálódnak a pontok (vagy elértük a megadott maximális iterációk számát).

kmeans

A k-means algoritmusban meg kell adni a centroidok számát (nagyban függ ettől a beállítástól a modellünk, érdemes jól átgondolni, és többféle módot próbálni). A következő tényező az inicializálás, azaz hogy milyen módszerrel válassza ki a kezdőpontokat az algoritmus. Lehet random, egyenletes eloszlású, az első N darab pontot választó, a népszerű k-means++ (Fast), vagy ha a tanító adatbázisban rendelkezünk címkékkel, akkor azokat is felhasználhatjuk a kezdő klaszterek középpontjának kiválasztásában.
A távolság mérés lehet euklideszi vagy koszinuszos, a maximum iterációk száma tetszőlegesen megadható (amennyiben mindenképpen gyors válaszra van szükségünk).

train

Ahogy a többi gépi tanulási feladatnál, itt is szükségünk van még más “alkatrészekre” is az algoritmuson kívül. Kitanításra a Train Clustering Model nevezetű modult használjuk, amibe a sima Train modelhez hasonlóan belekötjük balról az algoritmust, jobbról pedig az adathalmazt. Itt azonban nem csak a kitanított modelt kapjuk vissza, hanem egyből az adathalmazt is, amit a Visualize menüponttal megtekinthetünk. Ez a főkomponens gráfot jeleníti meg, amennyiben konkrétan a rekordokra vagyunk kíváncsiak, akkor az adathalmazt tovább kell “dolgozni”. Ehhez elegendő az is, ha például csak egy Select Columns in Dataset modullal kiválasztjuk az összes oszlopot, és lefuttatjuk a kísérletet, majd annak a kimenetét tekintjük meg. A végeredmény a hozzárendelt klaszter száma, és a klaszterektől való távolság. Megadhatjuk, hogy csak ezeket az információkat kapjuk meg eredményül, vagy az egész adathalmazhoz fűzze hozzá az új oszlopokat. Az azonban talán egy fokkal jobb megoldás, ha a Convert to Dataset modult választjuk, ami eredményül szintén visszaadja az adathalmazt.

sweep

Szerencsére megtalálható a Tune Model Hyperparameters klaszterizációs változata, a Sweep Clustering. Ez is igen hasonlóan működik a társához, megpróbálja kitalálni a legoptimálisabb beállításokat az algoritmushoz, amivel sok időt lehet spórolni. Ha ezt használjuk, akkor az algoritmusban át kell állítani az első beállítást Parameter Range-re, ezeket fogja végigtesztelni a program. A modellen és az adathalmazon kívül ez még egy harmadik kimenettel is rendelkezik, a “Sweep results”-cal, amiben néhány információt ad meg a futásokról. Érdemes lehet először ezzel az eszközzel nagyjából belőni a beálllításokat, majd azt kézzel finomhangolni.

assign

Amint megvan a modellünk, az Assign Data to Clusters nevű modullal tudjuk az újabb elemeket csoportba sorolni. A bal oldalába kell kötni az algoritmust, a jobb oldalába pedig az új adathalmazt. A kimenete ugyan olyan, mint a tanító modulnak.

Egy kísérlet összekötve például így nézhet ki:

model

Leave a Reply