Még a legjobb klaszterező algoritmus is keveset ér, ha elfogadhatatlanul hosszú időre van szüksége a végrehajtáshoz, vagy túl nagy a memóriaigénye. Ez a szakasz azokat a klaszterező eljárásokat vizsgálja, amelyek jelentős hangsúlyt helyeznek a skálázhatóságra az egyre elterjedtebb nagyon nagy adathalmazok esetén. A skálázhatóság néhány általános stratégiájának tárgyalásával kezdünk, beleértve olyan megközelítéseket, amelyek a szomszédság-számítások számát csökkentik, mintát vesznek az adatokból, particionálják az adatokat és az adatok egy összefoglaló reprezentációját klaszterezik. Ezek után a skálázható klaszterező algoritmusok két konkrét példáját, a CURE és a BIRCH algoritmusokat tárgyaljuk.
Sok klaszterező algoritmus tárigénye lineárisnál rosszabb,
például a hierarchikus klaszterezésnél a memóriaigény rendszerint
Többdimenziós vagy térbeli hozzáférési módszerek
Számos eljárás -- a
Szomszédságra vonatkozó korlátok
Egy másik megközelítés a szomszédság-számítások elkerülésére
korlátok alkalmazása. Euklideszi távolságok használata esetén például
a háromszög egyenlőtlenség révén sok távolságszámítás elkerülhető. A
hagyományos
Mintavétel
A mintavétel egy másik megközelítés az időbonyolultság
csökkentésére. Ebben a megközelítésben egy mintát veszünk a pontokból,
ezeket a pontokat klaszterezzük, majd a kimaradó pontokat a kapott
klaszterekhez rendeljük hozzá -- tipikusan a legközelebbi klaszterhez.
Ha a minta pontjainak száma
Az adatobjektumok particionálása
Egy másik gyakori megközelítés az időbonyolultság csökkentésére
az adatok diszjunkt halmazokra történő felosztása valamilyen hatékony
módszerrel, majd a halmazok külön-külön történő klaszterezése. A
klaszterek végső halmaza vagy ezeknek a független klaszter-halmazoknak
az uniója, vagy ezen független klaszter-halmazok kombinálásával
és/vagy finomításával kapható meg. Mi csak a kettéosztó
Ha a
Összefoglalás
A klaszterezés egy másik megközelítése az adatok tipikusan egyetlen menetben történő összefoglalása, majd az összefoglalt adatok klaszterezése. Például a leader algoritmus (lásd 1l. feladatot exer:leader_algo. oldalon) vagy a legközelebbi klaszterbe helyez egy adatobjektumot (ha ez a klaszter elég közel van), vagy egy új klasztert kezd, amely az aktuális objektumot tartalmazza. Ez az algoritmus lineáris az objektumok számában és használható az adatok összefoglalására úgy, hogy a kapott eredményre azután más klaszterező módszert alkalmazhatunk. Egy hasonló elvet használ a BIRCH algoritmus.
Párhuzamos és osztott számítások
Ha nem lehetséges előnyt kovácsolni az előzőekben leírt eljárásokból, vagy ezek a megközelítések nem nyújtják a kívánt pontosságot vagy számítási idő csökkenést, akkor más megközelítésekre van szükség. Nagyon hatékony módszer a számítás elosztása több processzor között.
A BIRCH (Balanced Iterative Reducing and Clustering using Hierarchies -- kiegyensúlyozott iteratív csökkentés és klaszterezés hierarchiákkal) egy nagyon hatékony klaszterező módszer euklideszi vektorterek adataira, azaz olyan adatokra, ahol értelmük van átlagoknak. A BIRCH egy menetben hatékonyan tud klaszterezni ilyen adatokat és ezt a klaszterezést további menetekben tudja javítani. A BIRCH ugyancsak hatékonyan tudja kezelni a kiugró értékeket.
A BIRCH a klaszterező jellemző (CF -- Clustering Feature) és a
CF fa fogalmán alapul. Az ötlet az, hogy adatpontok (vektorok) egy
klasztere megadható egy
Ezeket a mennyiségeket a klaszterek közötti távolság
kiszámítására is használhatjuk. A legegyszerűbb megközelítés a
középpontok közötti
A CF fa egy magasság-kiegyensúlyozott fa. Minden belső csúcs
A levél csúcsok a CF
A
Egy CF fát építünk az adatok beolvasása során. Ahogy az egyes
adatpontokhoz érünk, bejárjuk a CF fát a gyökérből indulva és minden
szinten a legközelebbi csúcsot választva. Amikor végül az aktuális
adatponthoz azonosítjuk a legközelebbi levél klasztert, egy tesztet
végzünk annak megállapításához, hogy ha az aktuális adatpontot
hozzáadjuk a kiválasztott klaszterhez, akkor az új klaszter átmérője
nagyobb lesz-e az adott
Ha az új klaszter átmérője
A BIRCH minden felbontást egy egyesítési lépéssel folytat. Annál a belső csúcsnál, ahol a felbontás megállt, megkeressük a két legközelebbi bejegyzést. Ha ez a pár nem a felbontásból származó két bejegyzés, akkor kísérletet teszünk a bejegyzések és a hozzájuk tartozó gyerek csúcsok egyesítésére. Ennek a lépésnek a célja a helykihasználás javítása és az aszimmetrikus adatbeviteli sorrendből adódó problémák kiküszöbölése.
A BIRCH-nek a kiugró értékek eltávolítására is van módszere. Ha a fát újra kell építeni, mert megtelt a memória, akkor a kiugró értékeket opcionálisan ki lehet írni lemezre. (Kiugró értéknek egy olyan csúcsot tekintünk, amelynek az átlagosnál sokkal kevesebb adatpontja van.) A folyamat bizonyos pontjain átvizsgáljuk a kiugró értékeket, hogy beépíthetők-e a fába anélkül, hogy annak mérete növekedjen. Ha igen, akkor beépítjük, ha nem, akkor pedig töröljük őket.
A BIRCH a CF fa kezdeti létrehozásán túl számos fázisból áll. A BIRCH összes fázisát tömören a 9.13. algoritmus írja le.
9.13. algoritmus. BIRCH |
1: Töltsük be az adatokat a memóriába az adatokat összefoglaló CF fa létrehozásával 2: Építsünk egy kisebb CF fát, ha ez szükséges a 3.
fázishoz. Növeljük
3: Végezzük el a globális klaszterezést. Különböző globális klaszterező módszereket (a klaszterek közötti páronkénti távolságokon alapuló klaszterezéseket) lehet használni. Egy összevonó hierarchikus módszert választottunk azonban. Mivel a klaszterező jellemzők olyan összefoglaló információkat tárolnak, amelyek bizonyos fajta klaszterezésekhez szükségesek, a globális klaszterező algoritmust úgy lehet használni, mintha a CF által reprezentált klaszter minden pontjára alkalmaztuk volna. 4: Rendezzük át az adatpontokat a 3. lépésben
talált klaszterközéppontok között és tárjunk fel így egy új
klaszterhalmazt. Ez megold bizonyos problémákat,
amelyek felléphetnek a BIRCH első fázisában. A lapméret
megszorítások és a
|
A CURE (Clustering Using REpresentatives -- klaszterezés reprezentánsokkal) egy klaszterező algoritmus, ami különböző módszerek arzenálját használja egy olyan módszer megalkotásához, amely kezelni képes nagy adatállományokat, kiugró értékeket, valamint nem gömb alakú és nem egyforma méretű klasztereket. A CURE egy klasztert a klaszter több reprezentáns pontjával ad meg. Ezek a pontok fogják elméletileg a klaszter geometriáját és alakját tükrözni. Az első reprezentáns pontot úgy választjuk, hogy a klaszter középpontjától legtávolabbi pont legyen, míg a fennmaradó pontokat pedig úgy, hogy az összes eddig választott ponttól a legtávolabb legyenek. Ilyen módon a reprezentáns pontok természetszerűleg viszonylag jó eloszlásúak. A kiválasztandó pontok száma egy paraméter, de azt találták, hogy 10 vagy annál nagyobb érték jól működik.
Ha kiválasztottuk a reprezentáns pontokat, akkor ezeket a
középpont felé húzzuk össze egy
A CURE összevonó hierarchikus sémát használ a tényleges
klaszterezésre. Két klaszter közötti távolság a bármely két
reprezentáns pontjuk közötti távolság minimuma (miután összehúztuk
őket a megfelelő középpontok irányába). Bár ez a séma nem igazán
hasonlít egyik eddig látott hierarchikus sémához sem, ekvivalens a
középpont-alapú hierarchikus klaszterezéssel, ha
A CURE kihasználja a hierarchikus klaszterezési folyamat
bizonyos jellemzőit, hogy eltávolítsa a kiugró értékeket a klaszterező
folyamat két különböző pontján. Először, ha egy klaszter lassan nő, az
azt jelentheti, hogy főleg kiugró értékekből áll, mivel a kiugró
értékek definíció szerint távol vannak a többitől és nem fognak
gyakran összekapcsolódni más pontokkal. A CURE-ban a kiugró értékek
eltávolításának ez az első fázisa tipikusan akkor történik, amikor a
klaszterek száma a pontok eredeti számának harmada. A kiugró értékek
eltávolításának második fázisára akkor kerül sor, amikor a klaszterek
száma
Mivel a CURE bonyolultsága a legrosszabb esetben
Bizonyos esetekben a klaszterezéshez szükséges minta még mindig túl nagy és egy második kiegészítő eljárásra van szükség. Ebben az esetben a CURE particionálja a mintaadatokat, majd minden egyes partícióban klaszterezi a pontokat. Ezt az előklaszterezési lépést a közbenső klaszterek klaszterezése követi, majd egy utolsó menet, amely az adathalmaz minden egyes pontját a klaszterek valamelyikéhez rendeli hozzá. A CURE felosztó sémáját később szintén részletesebben tárgyaljuk.
A 9.14. algoritmus foglalja össze a CURE-t. Megjegyezzük, hogy
9.13. algoritmus. CURE |
1: Vegyünk egy véletlen mintát az adathalmazból. A CURE cikk azért figyelemre méltó, mert explicit formulát vezetett le arra, hogy mekkorának kell lennie ennek a mintának ahhoz, hogy nagy valószínűséggel biztosítsa, hogy minden klaszter reprezentálva legyen minimális számú ponttal. 2: Particionáljuk a mintát
3: Minden
egyes partícióban klaszterezzük a pontokat
4: Használjuk a CURE hierarchikus klaszterező
algoritmusát az előző lépésben talált
5: Távolítsuk el a kiugró értékeket. Ez a kiugró értékek eltávolításának második fázisa. 6: Hogy teljes klaszterezést kapjunk, rendeljük hozzá az összes megmaradt adatpontot a legközelebbi klaszterhez |
Egy kulcskérdés a mintavételnél, hogy vajon a minta reprezentatív-e, azaz vajon megragadja-e az érdeklődésre számot tartó jellemzőket. A klaszterezésnél a kérdés az, hogy vajon ugyanazokat a klasztereket találjuk-e meg a mintában, mint az egész objektumhalmazban. Ideális esetben azt szeretnénk, hogy a minta minden egyes klaszterből tartalmazzon néhány objektumot és hogy a mintában külön klaszterbe kerüljenek azok az objektumok, amelyek külön klaszterbe tartoznak az egész adathalmazban.
Konkrétabb és elérhető cél annak (nagy valószínűséggel történő) biztosítása, hogy legalább néhány pontunk legyen minden egyes klaszterből. Az ehhez szükséges mintanagyság adathalmazról adathalmazra változik, és az objektumok számától valamint a klaszterek méretétől függ. A CURE alkotói levezettek egy korlátot a mintanagyságra, amely annak (nagy valószínűséggel történő) biztosításához szükséges, hogy legalább adott számú pontot kapjunk egy klaszterből. Ezt a korlátot a következő tétel adja meg könyvünk jelöléseivel.
9.1. Tétel
Legyen
ahol
Bár fenti a kifejezés ijesztőnek tűnhet, meglehetősen egyszerűen
használható. Tegyük fel, hogy 100 000 objektum van és a cél az, hogy
80% eséllyel megkapjuk az 1000 elemű
Megismételjük, hogy a CURE a mintavételt a következőképpen használja. Először egy mintát veszünk, majd a CURE algoritmust használjuk a minta klaszterezésére. Miután megtaláltuk a klasztereket, minden egyes nem klaszterezett pontot a legközelebbi klaszterhez rendelünk hozzá.
Particionálás
Amikor a mintavétel nem elég, a CURE egy felosztó megközelítést
is alkalmaz. Az alapgondolat az, hogy osszuk fel a pontokat
Kulcsfontosságú kérdés
Egy másik tényező