70
EÖTVÖS LORÁND TUDOMÁNYEGYETEM INFORMATIKAI KAR Algoritmusok és Alkalmazásaik Tanszék Klaszter-analízis és alkalmazásai Témavezető: Szerző: Dr. Fekete István Ilonczai Zsolt egyetemi docens programtervező informatikus MSc Budapest, 2014

Klaszter-analízis és alkalmazásai - people.inf.elte.hu · 3 1 Bevezetés A klaszter-analízis az informatikának manapság igen széles körben alkalmazott és kutatott területe

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

EÖTVÖS LORÁND TUDOMÁNYEGYETEM

INFORMATIKAI KAR

Algoritmusok és Alkalmazásaik Tanszék

Klaszter-analízis és alkalmazásai

Témavezető: Szerző:

Dr. Fekete István Ilonczai Zsolt

egyetemi docens programtervező informatikus MSc

Budapest, 2014

Tartalomjegyzék

1 Bevezetés ....................................................................................................................... 3

2 A klaszterezés elméleti tárgyalása .............................................................................. 5

2.1 Adatpontok .............................................................................................................. 5

2.2 Távolságfüggvények ............................................................................................... 6

2.3 Centroid alapú klaszterező algoritmusok ................................................................ 7

2.3.1 k-közép algoritmus ........................................................................................... 8

2.4 Hierarchikus klaszterező algoritmusok ................................................................. 12

2.4.1 Klaszterek távolságának mérése ..................................................................... 13

2.4.2 Hierarchikus felhalmozó algoritmus .............................................................. 14

2.4.3 Hierarchikus lebontó algoritmus .................................................................... 17

2.5 Sűrűség alapú algoritmusok .................................................................................. 19

2.5.1 DBSCAN algoritmus ...................................................................................... 20

2.5.2 OPTICS algoritmus ........................................................................................ 25

2.6 Rács alapú klaszterező algoritmusok .................................................................... 31

2.6.1 GRIDCLUS algoritmus .................................................................................. 31

2.7 Klaszterezés neurális hálózatok segítségével ........................................................ 38

2.7.1 Neurális hálózatok .......................................................................................... 38

2.7.2 Önszerveződő térképek (SOM) ...................................................................... 40

3 Klaszterezés alkalmazása a képfeldolgozásban ...................................................... 50

3.1 Képek vektoros reprezentációja ............................................................................ 50

3.2 SOM felhasználása a képfeldolgozásban .............................................................. 52

3.3 Képek klaszterezése .............................................................................................. 54

4 Klaszterezést bemutató demóprogram .................................................................... 58

4.1 Felhasználói dokumentáció ................................................................................... 58

4.1.1 A rendszer rövid ismertetése .......................................................................... 58

4.1.2 Rendszerkövetelmények ................................................................................. 58

4.1.3 Üzembe helyezés ............................................................................................ 58

4.1.4 A program használata ..................................................................................... 59

4.2 Megvalósítás ......................................................................................................... 68

5 Irodalomjegyzék ......................................................................................................... 69

3

1 Bevezetés

A klaszter-analízis az informatikának manapság igen széles körben alkalmazott és

kutatott területe. Ez nem véletlen, hiszen az adatok értelmes szétválasztása, különböző

szempontok szerinti csoportosítása a legkülönbözőbb tudományterületeken megjelenő

feladat, mely egyre nagyobb kihívást állít a matematikusok és programozók elé.

Maga a klaszter-analízis vagy klaszterezés nem más, mint egy csoportosítási feladat,

melynek során egy adathalmaz elemeit különböző csoportokba, úgynevezett

klaszterekbe soroljuk. Ezt úgy tesszük, hogy a megoldott feladatnak megfelelően, egy

adott csoport elemei hasonló tulajdonságokkal rendelkezzenek, azaz – tágabb értelembe

véve – közel legyenek egymáshoz. A feladat megoldásához tehát elengedhetetlen egy

alkalmas távolságfogalom definiálása, amely megmutatja, hogy két elem mennyire

közel helyezkedik el, azaz bizonyos tulajdonságaikat figyelembe véve, mennyire

hasonlítanak egymásra.

Alkalmazási területeit tekintve a klaszter-analízis számtalan tudományterületen

nyújt segítséget különböző feladatok megoldására. A biológiában gyakran előforduló

feladat a rendszerezés. Az ökológiában például gyakran használnak klaszter-elemzést

növény- és állatközösségek csoportosítására, rendszertanban különböző egyedek törzs,

rend, illetve faj szerinti rendszerezésére. A bioinformatikán belül a szekvencia-analízis

egy olyan alapvető módszer, melynek alkalmazása során hasonló tulajdonságokért

felelős géneket csoportosítunk. Az orvostudományban, különösképpen a

gyógyszeriparban, különböző óriás gyógyszermolekulák kutatása során találkozhatunk

klaszterezéssel. Ma az egyik legmodernebb orvosi vizsgálat egy speciális képalkotó

eljárás, a PET tomográfia, melynek során pontos, háromdimenziós képet nyerhetünk a

test belsejének adott területéről. A vizsgált terület feltérképezéséhez nagy mennyiségű

adat klaszterezésére van szükség a különböző szövetek elkülönítése érdekében.

Társadalomtudományok esetében kiválóan használható különböző piackutatásoknál,

illetve szociális hálózatok elemzésénél, melynek során a felhasználókat bizonyos

szempontok szerint szeretnénk különböző közösségekbe sorolni. A klaszter-analízis

legkiemelkedőbb, a fentebb leírtakkal szorosan összefonódott alkalmazási területe az

informatika, ahol az ajánló rendszerektől, az adatbányászaton és robotikán át az

evolúciós algoritmusok eredményének kiértékeléséig lépten-nyomon szükségünk van az

ide sorolható módszerekre.

4

A klaszterezés elméleti leírásának nehézsége abban rejlik, hogy maga a probléma

nehezen általánosítható. Minden egyes alkalmazási terület, minden konkrét feladat

legtöbbször nagyon speciális, hiszen meg kell állapítanunk, hogy egy elemet milyen,

hány dimenziós adatponttal reprezentáljunk, mi legyen ezek között a feladatnak

megfelelő távolságmérték, illetve hogy mi számít egy jól elkülönülő klaszternek. A

feladat megoldására számos algoritmus létezik, melyeket megvalósítási stratégiájuk

szerint a szakirodalom különböző osztályokba sorol. Megjegyzem azonban, a

szakirodalommal összhangban, hogy univerzális klaszterező algoritmus nem létezik,

hiszen minden egyes feladatra más-más algoritmussal, esetleg azok ötvözésével kapunk

jó eredményt.

Diplomamunkám célja különböző, reprezentatív klaszterezési algoritmusok

bemutatása és elemzése, valamint egy konkrét alkalmazási terület, a számítógépes

képfeldolgozás vizsgálata. A szakirodalomban fellelhető algoritmusosztályok mellett a

dolgozat saját megközelítési javaslatokat is ad néhány klaszterező algoritmus esetén.

Ezen túlmenően egy olyan demóprogram elkészítése volt a célom, mely grafikus

támogatás mellett lehetőséget nyújt a tanulmányozott és megvizsgált klaszterezési

algoritmusok működésének szemléltetésére, illetve azok felhasználására a számítógépes

képfeldolgozásban.

5

2 A klaszterezés elméleti tárgyalása

Ebben a fejezetben a klaszterezéshez kapcsolódó alapvető fogalmakat részletesen

tárgyaljuk, illetve bemutatjuk a fontosabb klaszter algoritmus-osztályok néhány

reprezentánsát.

Ahogy azt a bevezetésben is említettük, a klaszterezés egy adathalmaz elemeinek

(pontjainak) csoportosítását jelenti bizonyos hasonlósági tulajdonságok alapján.

Klaszter-analízissel legelőször a statisztikában kezdtek el foglalkozni, majd később az

adatbányászat egyik legmeghatározóbb ága lett.

A klaszterezés, holott egy csoportosítási feladat, különbözik az osztályozás

feladatától. Míg osztályozás esetén előre megadott információink vannak a kialakuló

csoportokról, addig klaszterezés során egyedül az adatpontok állnak rendelkezésünkre,

az eredményként kapott csoportok „önszerveződnek”, azaz a pontok maguk alakítják ki

a klasztereket. Azt mondhatjuk, hogy „az osztályozás egy felügyelt (supervised), a

klaszterezés pedig felügyelet nélküli (unsupervised) csoportosítás” [1].

Egy halmaznak, amely n adatpontot tartalmaz összesen Bell-számnyi, azaz

𝑂(𝑒𝑛 𝑙𝑔𝑛) különböző klaszterezése létezik. Legnagyobb nehézség egy klaszterező

algoritmus számára ezen klaszterezések közül kiválasztani azt az egyet, amelyik a

legmegfelelőbb megoldása lesz az adott feladatnak.

2.1 Adatpontok

Klaszterezés során, feladattól függően a legkülönfélébb adatpontokkal kell dolgoznunk.

Általában nagy nehézséget jelent eldönteni, hogy pontjainkat milyen típusú adatként

reprezentáljuk, azaz klaszterezendő elemeinkből hogyan nyerjünk ki

tulajdonságértékeket úgy, hogy azok megfelelően tükrözzék szándékunkat. Például ha a

számítógépen megtalálható fényképeinket szeretnénk klaszterezni átlagos

színárnyalatuk szerint, előbb el kell döntenünk, hogy hogyan ábrázoljuk adatként ezt a

tulajdonságot, ami majd a klaszter algoritmus számára már felhasználható lesz.

[1] Iványi Antal (Szerk.): Informatikai algoritmusok 2. , ELTE Eötvös Kiadó Kft., Budapest 2005, [768], ISBN 9789634637752

6

Egy adatpontot általában n dimenziós vektortérben ábrázolunk, ahol adott dimenzió

az adatpont egy tulajdonságának feleltethető meg. Egy ilyen tulajdonság az adatpont

egy attribútuma. Legyen x egy d dimenziós adatpont, ami tehát a következő d dimenziós

vektor:

𝑥 = (𝑥1, 𝑥2 … 𝑥𝑑 )𝑇

Az adatokat általánosan két nagy csoportba sorolhatjuk:

Numerikus adatok – Ebben az esetben az adatpont, mint n dimenziós vektor

elemei numerikusak, tehát egy adott intervallumból veszik fel értékeiket.

Természetesen ezek az intervallumok az egyes dimenziók mentén eltérőek

lehetnek. Ilyen például egy egyszerű, kétdimenziós adatpont a síkban, mely

két valós számmal reprezentálható, amik a pont síkbeli helyét mutatják.

Másik példa egy szín RGB (Red Green Blue) színkomponensek szerinti

három dimenziós reprezentációja, ahol az adatvektor egy eleme a [0,255]

intervallumból vehet fel értéket.

Bináris adatok – Ebben az esetben az adatpont attribútumai csak két értéket

vehetnek fel. Az attribútum-érték 0, ha az adott adatpont nem rendelkezik az

adott dimenzió szerinti tulajdonsággal, különben pedig 1. Például ha egy

kórházban betegek csoportját szeretnénk klaszterezni kórtörténet szerint,

akkor az adatvektor i. komponense jelentheti azt, hogy a betegnek volt-e már

adott vírusfertőzése, vagy sem.

Megjegyezzük, hogy bináris adatok esetén a numerikus adatoknak megfelelő

klaszterező algoritmusokhoz képest sokszor teljesen más algoritmusokat kell

használnunk, hiszen bináris adatok között a távolságfogalom is máshogyan

értelmezhető. Ebben a dolgozatban a numerikus adatokra vonatkozó klaszterező

algoritmusokat tárgyaljuk.

2.2 Távolságfüggvények

Minden egyes klaszterező algoritmus működéséhez elengedhetetlen egy távolsági

függvény definiálása, ami meghatározza, hogy két klaszterezendő adatpont között

mekkora a távolság, azaz a két adatpont mennyire hasonlít egymásra.

7

Jelöljük az 𝑎 és b adatpont távolságát 𝑑𝑖𝑠𝑡(𝑎, 𝑏)-vel, ahol 𝑎 és b vektorok

dimenziója d. Legyen D az adatpontok halmaza. Ekkor a 𝑑𝑖𝑠𝑡 ∈ 𝐷 × 𝐷 → ℝ

távolságfüggvénytől általában a következő feltételek teljesülését várjuk el:

𝑑𝑖𝑠𝑡(𝑎, 𝑏) ≥ 0

𝑑𝑖𝑠𝑡(𝑎, 𝑎) = 0

𝑑𝑖𝑠𝑡(𝑎, 𝑏) = 𝑑(𝑏, 𝑎) – szimmetria

𝑑𝑖𝑠𝑡(𝑎, 𝑏) ≤ 𝑑𝑖𝑠𝑡(𝑎, 𝑐) + 𝑑𝑖𝑠𝑡(𝑐, 𝑏), ∀𝑐 ∈ 𝐷 𝑒𝑠𝑒𝑡é𝑛

– háromszög egyenlőtlenség

Fontos megjegyeznünk, a fenti tulajdonságokat nem minden esetben követeljük

meg. Bizonyos adatpontok klaszterezése során előfordulhat, hogy a szimmetria, vagy a

háromszög egyenlőtlenség nem teljesül. Ha mind a négy tulajdonság teljesül egy

távolságfüggvényre, akkor a függvényt metrikának nevezzük. A klaszter-analízisben

tehát nem minden távolságfüggvény metrika.

Numerikus attribútumok esetén az egyik legnépszerűbb és egyben legáltalánosabb

távolsági mérték a Minkowski-metrika, melyet a következőképpen definiálunk (p

tetszőleges pozitív szám):

𝑑𝑖𝑠𝑡𝑝(𝑎, 𝑏) = (∑|𝑎𝑖 − 𝑏𝑖|𝑝

𝑑

𝑖=1

)

1𝑝

𝑝 = 1 esetén a Minkowski-metrika egy speciális, másik jól ismert metrikájához

jutunk, ami a Manhattan-távolság. Az klaszterező algoritmusok implementációja során

a Minkowski-metrika egy másik speciális esetét (𝑝 = 2) használtuk fel, ami nem más,

mint az Euklideszi távolság.

𝑑𝑖𝑠𝑡2(𝑎, 𝑏) = √∑ |𝑎𝑖 − 𝑏𝑖|2

𝑑

𝑖=1

2.3 Centroid alapú klaszterező algoritmusok

A centroid alapú vagy particionáló klaszterezési módszerek a legnépszerűbb és egyben

legáltalánosabban felhasználható klaszterező algoritmusokat alapozzák meg. Egy

8

centroid alapú klaszterező algoritmus alapgondolata az, hogy egy adott klasztert annak

képzeletbeli középpontjával, az ún. centroid pontjával reprezentáljunk az algoritmus

működése során. A particionáló elnevezés onnan ered, hogy az algoritmus az

adathalmazt k darab partícióba szervezi, amelyek az eredményül szolgáló klaszterekként

értelmezhetőek. Az algoritmusnak bemeneti paraméterként meg kell adnunk a partíciók

(klaszterek) számát. Ezen előzetes információ szükségességét a klaszterezendő

adatpontokról a szakirodalom a particionáló klaszterező algoritmusok legnagyobb

hátrányának tekinti, hiszen megfelelő információk hiányában általában nagyon nehéz

meghatározni, hogy hány darab klaszterbe szeretnénk sorolni az adatpontjainkat.

2.3.1 k-közép algoritmus

Az egyik legismertebb centroid alapú klaszterező algoritmus a k-közép (k-means)

algoritmus. Mint minden particionáló klaszterező algoritmus esetén, egy adott klasztert

itt is a klaszter adatpontjaihoz tartozó vektorok átlagával reprezentálunk.

Legyen 𝐶𝑖 egy klaszter. Ekkor az őt reprezentáló centroid pont legyen:

𝑟(𝐶𝑖) =1

|𝐶𝑖|∑ 𝑢

𝑢∈𝐶𝑖

Az algoritmus futása során végig k darab centroid pontunk van, a bemenő k,

klaszterszám paraméternek megfelelően. Az algoritmus indulásakor a centroid pontokat

véletlenszerűen választjuk a D klaszterezendő ponthalmazból. Ezek alkotják majd a

kezdeti klasztereket. Megjegyezzük, hogy ez a véletlen választás nem mindig a legjobb

klaszterezést eredményezi majd, ezért ha több előzetes információval rendelkezünk a

pontokat illetően, érdemes lehet konkrétan megadott centroid pontokkal indítanunk az

algoritmust. E kezdeti lépést követően egy ciklusban végigmegyünk az adatpontokon,

és mindegyiket abba a klaszterbe soroljuk, amelyiknek a centroid pontja hozzá

legközelebb helyezkedik el. Ezután újraszámoljuk a centroid pontok értékét, hiszen

ezek az adatpontok átsorolásai miatt megváltoztak. Ezt mindaddig ismételjük, amíg a

centroid pontok változnak. Az algoritmus bemeneti paramétere a klaszterezendő pontok

halmazán (D) kívül az előállítandó klaszterek száma (k).

9

A k-közép algoritmus pszeudokódja a következő[2]:

k-közép(D, k)

1. Válasszunk tetszőleges k darab elemet az adathalmazból. Ezek lesznek a kezdeti

klaszterközéppontok;

2. AMÍG változnak a klaszterközéppontok:

3. Minden elemet ahhoz a klaszterhez rendelünk, melynek centroid pontjához

leginkább hasonló (legközelebb helyezkedik el);

4. Frissítjük a klaszterek átlagát, azaz újraszámoljuk a centroid pontok helyzetét;

5. AMÍG_VÉGE.

A k-közép algoritmus egy konvergencia feladat megoldásaként is felfogható, hiszen

az algoritmus nem tesz mást, mint egy olyan klaszterezést keres, amelyben az

adatpontok és a klaszterük centroid pontjainak négyzetes távolságösszege minimális.

Ezt az adott klaszterezéshez tartozó minimalizálandó értéket a klaszterezés hibájának

vagy négyzetes hiba kritériumfüggvénynek nevezzük. Ha C egy adathalmaz

klaszterezése, akkor a hozzá tartozó hiba kritériumfüggvény:

𝐸(𝐶) = ∑ ∑ 𝑑(𝑢, 𝑟(𝐶𝑖))2

𝑢∈𝐶𝑖

𝑘

𝑖=1

Bár a k-közép algoritmus minimalizálja az 𝐸(𝐶) négyzetes hibafüggvényt,

előfordulhat, hogy elakad egy lokális minimumpontban. Ennek kiküszöbölésére

érdemes az algoritmust többször futtatni, különböző kezdeti centroid pontokkal, így

megkeresve a globális minimumot. Azt a klaszterezési eredményt fogadjuk el a

többszöri futtatás után, amelyik a legjobb eredményt adja.

A 2.3.1 ábra a k-közép algoritmus helyes eredményét szemlélteti síkbeli pontok

esetén. Az ábrán az azonos színű adatpontok azonos klaszterben vannak. A 2.3.2 ábra a

k-közép algoritmus kimenetét szemlélteti egy lokális minimumba ragadva. Ez az

eredmény a kezdeti centroid pontok „rossz” választásának köszönhető (valószínűleg két

kezdeti centroid pont is a felső ponthalmazban volt).

[2] Jiawei Han – Micheline Kamber: Adatbányászat koncepciók és technikák, Panem Könyvkiadó Kft., 2004, [532], ISBN 9789635453948

10

2.3.1 ábra – k-közép algoritmus optimális kimenete (globális minimum)

2.3.2 ábra – k-közép algoritmus egy lokális minimumba ragadva

k-közép algoritmus hatékonysága

A k-közép algoritmus műveletigénye 𝑂(𝑛𝑘𝑡), ahol n az adatpontok száma, k a

klaszterek száma, t pedig az algoritmus iterációinak száma. A t iterációszám az

adatpontok elhelyezkedésétől, valamint a kezdeti centroid pontok helyétől függ.

Általánosságban elmondható, hogy 𝑡 ≪ 𝑛, tehát a k-közép algoritmus egy gyors

klaszterezési algoritmusnak tekinthető.

Vizsgáljuk meg, hogy mikor alkalmazható „jól” a k-közép algoritmus.

Elmondhatjuk, hogy olyan feladatok esetén, melyeknél az adatpontok konvex

csoportokba, úgymond „felhőkbe” szerveződnek, az algoritmus jól használható. A 2.3.3

11

ábrán ez a tulajdonság nem teljesül. Az algoritmus sűrűség-alapú klasztereknél sem

alkalmazható jól, hiszen ebben az esetben a klaszterek sűrűsége, nem pedig az

adatpontok elhelyezkedése, illetve azok átlaga számít.

2.3.3 ábra – k-közép algoritmus egy rossz eredménye nem konvex szerveződésű

adatpontok esetén

A fentebb leírt típusú klaszterek esetén, mint ahogy azt majd később látni fogjuk, a

sűrűség alapú klaszterezési algoritmusok adnak majd jó eredményt.

Említettük, hogy a k-közép algoritmus nagy hátránya, hogy bemeneti paraméterként

meg kell adnunk a klaszterek számát. Ennek következtében, valamint mivel az

algoritmus klaszter átlagokkal számol, az eredmény nagyon érzékeny lesz a kívülálló

pontokra, hiszen ezek rossz irányba tolhatják el a klaszterek centroid pontjait. A másik

probléma az, hogy az algoritmus minden kívülálló pontot besorol egy klaszterbe, holott

ezek csak rontanak az eredményen.

Definíció: Kívülálló pontnak vagy zajpontnak nevezzük azt az adatpontot, amelyik

jelentősen eltér az összes többi adatponttól, azaz nem része egyik klaszternek sem.

2.3.3 ábra – k-közép algoritmus működése kívülálló pontok esetén

12

A k-közép algoritmusnak számtalan módosítása létezik, melyek főként a kezdeti

centroid pontok választásában, illetve a klaszterek átlagszámolásában különböznek.

2.4 Hierarchikus klaszterező algoritmusok

A hierarchikus klaszterező algoritmusok osztálya olyan algoritmusokat tartalmaz,

melyek a klasztereket kizárólag az adatpontok egymáshoz viszonyított távolságát

felhasználva állapítják meg. Az alapgondolat az, hogy egy adott pont sokkal inkább

kötődik egy hozzá közelebb eső adatponthoz, mint egy távolihoz a klaszterek

kialakulása során. A hierarchikus elnevezés azt hivatott tükrözni, hogy az algoritmus az

adathalmaz klasztereit egy hierarchikus adatszerkezet szerint dolgozza fel. Ez az

adatszerkezet általában egy fa, melynek a csúcsai klaszterek. Egy hierarchikus

algoritmus működése során minden egyes iteráció a fának egy új szintjét határozza meg.

Tágabb értelembe véve a fa levelei az adatpontok, a fa gyökere pedig az a klaszter,

amelyik az összes adatpontot tartalmazza. A közbülső, lehetséges klaszterezések a fa

köztes szintjein helyezkednek el. A 2.4.1 ábra az algoritmus futása során felépülő fát

szemlélteti. A gyökérszinten (0. szint) egy darab klaszter van, ami az összes adatpontot

tartalmazza, míg a levélszinten (2. szint) minden adatpont egy különálló klaszter.

2.4.1 ábra – Klaszterhierarchia

A hierarchikus klaszterező algoritmusok csoportján belül két algoritmustípusról

beszélhetünk, annak függvényében, hogy a hierarchia építését a fa leveleitől, illetve

annak gyökerétől kezdjük. Ezeket a következő alfejezetekben részletesen tárgyaljuk:

Hierarchikus felhalmozó (agglomerative) algoritmus

Hierarchikus lebontó (divisive) algoritmus

13

Egy hierarchikus algoritmus estében szükségünk van egy megállási feltételre, hiszen

általában nem szeretnénk az egész hierarchikus fát felépíteni. Elegendő addig a szintig

elmennünk, amelyikben a csúcsok már a feladatnak megoldásának megfelelő

klasztereket reprezentálják. Ez a megállási feltétel lehet például a klaszterek száma (ha

azt előre ismerjük), vagy a klaszterek között értelmezett maximális távolság elérése,

azaz ha már túl távol esnek a klaszterek egymástól, álljon meg az algoritmus. Ez a

megállási feltétel tekinthető az algoritmus bemenő paraméterének is.

2.4.1 Klaszterek távolságának mérése

A hierarchikus algoritmusok működéséhez szükségünk van két klaszter közötti

távolságfogalom bevezetésére, mely kézenfekvő módon az adatpontok között

értelmezett távolságfüggvényre épül.

Legyenek 𝐶𝑖 és 𝐶𝑗 klaszterek, melyek között a távolságot a következő

klasztertávolság értékekkel szoktuk definiálni, ha a d egy távolságfüggvény két adatpont

között:

Klaszterek minimális távolsága:

𝑑𝑚𝑖𝑛(𝐶𝑖 , 𝐶𝑗) = 𝑚𝑖𝑛𝑢∈𝐶𝑖,𝑣∈𝐶𝑗𝑑(𝑢, 𝑣)

Klaszterek maximális távolsága:

𝑑𝑚𝑎𝑥(𝐶𝑖 , 𝐶𝑗) = 𝑚𝑎𝑥𝑢∈𝐶𝑖,𝑣∈𝐶𝑗𝑑(𝑢, 𝑣)

Klaszterek átlagos távolsága (ez vektortérben a centroidok távolságaként is

értelmezhető):

𝑑𝑚𝑒𝑎𝑛(𝐶𝑖 , 𝐶𝑗) = 𝑑 (1

|𝐶𝑖|∑ 𝑢

𝑢∈𝐶𝑖

,1

|𝐶𝑗|∑ 𝑣

𝑣∈𝐶𝑗

)

Az algoritmusok bemutatására szolgáló demóprogramban ez a három

klasztertávolság érték került implementálásra.

14

2.4.2 Hierarchikus felhalmozó algoritmus

Hierarchikus felhalmozó klaszterező algoritmus indulásakor minden egyes adatpont

külön klaszterben van. Ha a klaszterhierarchiák fáját tekintjük, akkor azt mondhatjuk,

hogy az algoritmus a fa leveleitől indul, minden egyes iterációban a gyökér felé

haladva. Minden egyes szinten csak két klaszter egyesül, mégpedig az a kettő,

melyeknek klasztertávolsága minimális.

A hierarchikus felhalmozó algoritmusok közül azt az algoritmust, amely a

klaszterek távolságához a klaszterek minimális távolságát használja (𝑑𝑚𝑖𝑛), egyszerű

láncmódszer algoritmusnak (Single linkage clustering), azt, amelyik a maximális

távolságot (𝑑𝑚𝑎𝑥) teljes láncmódszer algoritmusnak (Complete linkage clustering),

amelyik pedig az átlagos távolságot (𝑑𝑚𝑒𝑎𝑛) használja, átlagos láncmódszer

algoritmusnak (Average linkage clustering) nevezzük.

Jelöljük 𝐶𝑖 és 𝐶𝑗 klaszterek távolságát 𝑑∗(𝐶𝑖, 𝐶𝑗)-vel (𝑑∗ az előbbi alfejezetben

bemutatott klasztertávolságok valamelyike). Az algoritmus bemenő paraméterei a

klaszterezendő ponthalmaz (D), valamint az algoritmus megállási feltétele (például egy

k klaszterszám). Az algoritmus pszeudokódja a következő:

Hierarchikus felhalmozó(D, megállási feltétel)

1. Minden adatpontot külön klaszterbe sorolunk;

2. AMÍG a megállási feltétel (pl. k darab klaszterünk van) hamis, ismételd:

3. Egyesítjük azt a 𝐶𝑖 és 𝐶𝑗 klasztert, melyekre 𝑑∗(𝐶𝑖, 𝐶𝑗) minimális. Ha

több ilyen klaszterpár is létezik, akkor az egyiket egyesítjük ezek közül.

4. AMÍG_VÉGE.

Hierarchikus felhalmozó algoritmus hatékonysága

Ha n az adatpontok száma, az algoritmus műveletigénye általános esetben 𝑂(𝑛3), az

adatpontjaink távolságát egy távolságmátrixban eltárolva 𝑂(𝑛2) hatékonyságú lesz.

Elmondhatjuk tehát, hogy az algoritmus nagy adathalmazok esetén egy lassú

algoritmusnak tűnik, azonban ez bizonyos esetekben javítható.

A hierarchikus felhalmozó algoritmusok közül az egyszerű láncmódszer algoritmus

esetén a műveletigény akár 𝑂(𝑛 𝑙𝑜𝑔𝑛) is lehet, ha adott az adatpontoknak egy gráf

reprezentációja. A következőkben megmutatjuk, hogy ez hogyan lehetséges.

15

Mivel ebben az esetben az algoritmus a minimális klasztertávolságok szerint halad,

azt a két klasztert összevonva egy iterációban, melyeknek minimális klasztertávolsága

minimális, az algoritmus tekinthető egyfajta minimális költségű feszítőfa építő

algoritmusnak is.

Tekintsük a klaszterezendő adatpontok halmazát egy irányítatlan teljes egyszerű

gráfnak a következőképpen. A gráf csúcsai legyenek maguk az adatpontok, a köztük

lévő élek súlyai pedig a pontok egymástól mért távolságai. Futtassunk ezen a gráfon egy

minimális költségű feszítőfát kiszámító algoritmust. Tudjuk, hogy a piros-kék

algoritmusnak van 𝑂(𝑛 𝑙𝑜𝑔𝑛) műveletigényű implementációja, ahol n a gráf csúcsainak

száma (a mi esetünkben az adatpontok száma), ezért ezen algoritmus használata

kézenfekvőnek tűnik. Miután megkaptuk a minimális költségű feszítőfát, nincs más

dolgunk, mint a fa legnagyobb súlyú p darab élét kitörölni. Ezáltal a fát több kisebb fára

vágtuk szét, melyek valójában az adatpontok klaszterei. p értékét a klaszterező

algoritmus megállási feltételének megfelelően kell megállapítani. Ha például az a

megállási feltételünk, hogy k darab klaszterünk legyen, akkor addig vágjuk el

folyamatosan a fát mindig a legnagyobb él szerint, ameddig meg nem kaptuk a kívánt

klaszterezést. Így tehát az algoritmus műveletigénye 𝑂(𝑛 𝑙𝑜𝑔𝑛 + 𝑝) = 𝑂(𝑛 𝑙𝑜𝑔𝑛).

Megjegyezzük, hogy az algoritmus feltételezi, hogy az adatpontoknak egy gráf-

reprezentációja adott, azaz az adatpontjainkat például távolságmátrixban kell

ábrázolnunk, aminek létrehozása további költségekkel járhat. Ez azonban az

algoritmusnak egy előfeltétele, nem pedig része.

A fenti módszer az egyszerű láncmódszer algoritmussal megegyező klaszterezést

adja eredményül.

Az algoritmus pszeudokódja a következő:

1. Építsük fel az adatpontjaink gráfjának megfelelő minimális költségű feszítőfát

(jelenleg 1 darab fánk van egy erdőben);

2. AMÍG a megállási feltétel hamis (a fák száma kisebb a kívánt klaszterszámnál):

3. Töröljük ki az erdő legnagyobb élét;

4. AMÍG_VÉGE.

Vizsgáljuk meg, mikor működik jól a hierarchikus felhalmozó klaszterezési

algoritmus. Elmondhatjuk, hogy mint minden hierarchikus algoritmus, szinte minden

16

adatpont halmazra meglehetősen rugalmas módon alkalmazható, azonban sokszor

elavultnak tekintik őket az új, más megközelítéseket használó klaszterezési

algoritmusokkal szemben.

Holott a hierarchikus felhalmozó klaszterező algoritmus kijavítja a k-közép

algoritmus klaszter-átlagpont (centroid) miatti esetleges lokális minimumok hibáit, az

algoritmus legnagyobb hátrányának az tekinthető, hogy döntései nem visszavonhatóak.

Ha az algoritmus adott iterációjában két klasztert egyesítünk, azok később már nem

bonthatóak szét, az algoritmus ezzel az egyesített klaszterrel dolgozik tovább. Azt

mondhatjuk tehát, hogy az algoritmus klaszteregyesítő lépései kritikusak, hiszen a rossz

egyesítések nem megfelelő végső klaszterezéshez vezethetnek. Érdemes tehát általában

a hierarchikus klaszterező algoritmusokat valamelyik másik klaszterező algoritmussal

ötvözni. Erre látunk majd példát a következő alfejezetben.

A hierarchikus felhalmozó algoritmus a k-közép algoritmussal ellentétben jól

működik nem konvex csoportokba szerveződő klaszterek esetén is (2.4.2 ábra),

azonban hasonlóan érzékeny a kívülálló pontokra, hiszen ezeket hibásan besorolhatja a

hozzájuk legközelebb eső klaszterbe (2.4.3 ábra).

2.4.2 ábra – Hierarchikus felhalmozó algoritmus nem konvex alakú klaszterekre

2.4.3 ábra Hierarchikus felhalmozó algoritmus rossz működése kívülálló pontokra (1)

17

Kívülálló pontok esetén kiütközhet az algoritmus legnagyobb hibája is, mégpedig

az, hogy két közelinek vélt klaszter egyesítése már nem vonható vissza. Így fordulhat

elő az, hogy két, „jól láthatóan” különálló klasztert az algoritmus hamarabb egyesít,

mint valamelyiküket egy kívülálló ponttal, hiszen klasztertávolságuk kisebb, mint

bármelyik klaszter távolsága a kívülálló pont klaszterének távolságától (2.4.4 ábra).

2.4.4 ábra Hierarchikus felhalmozó algoritmus rossz működése kívülálló pontokra (2)

2.4.3 Hierarchikus lebontó algoritmus

A hierarchikus lebontó algoritmus kitűnő példa a különböző klaszterezési algoritmusok

ötvözésére. Maga az algoritmus a hierarchikus felhalmozó algoritmussal ellentétesen

működik, a hierarchikus fa gyökerétől a levelek felé haladva. Induláskor minden

adatpont egy közös klaszterben helyezkedik el. Az algoritmus, futása során ezt a nagy

klasztert osztja folyamatosan egyre kisebb részekre, amíg el nem éri a megállási

feltételt. Ez a megállási feltétel általában egy adott klaszterszám elérését jelenti. Minden

egyes iterációban az algoritmus kiválaszt egy klasztert, amit valamilyen módon

kettéoszt.

Az algoritmus működéséhez két kritikus tényező eldöntése szükséges. Az egyik a

kettéosztandó klaszter kiválasztása adott iterációban, a másik pedig a kettéosztás módja.

A kettéosztandó klaszter kiválasztásának legegyszerűbb módja, ha a legnagyobb

elemszámú klasztert választjuk. A kiválasztott klaszter kettéosztása többféleképpen

történhet, de a legkézenfekvőbb megoldás az, ha egy másik klaszterezési algoritmus

segítségével végezzük el. Az algoritmus implementációja során mi a k-közép

algoritmust választottuk. Döntésünk azzal indokolható, hogy a k-közép algoritmus egy

viszonylag általánosan jól használható algoritmus, illetve az algoritmus bemeneti

18

klaszterszám paramétere itt pont kapóra jön, hiszen mi fel szeretnénk osztani a

klaszterünket, jelen esetben két részre, azaz a paraméter értéke 𝑘 = 2 lesz. Az

algoritmus bemenő paraméterei a klaszterezendő adatpontok halmaza (D), valamint a

megállási feltétel.

Az algoritmus pszeudokódja a következő:

Hierarchikus lebontó(D, megállási feltétel)

1. Minden adatpontot egy közös klaszterbe sorolunk;

2. AMÍG a megállási feltétel (pl. k darab klaszterünk van) hamis, ismételd:

3. Bontsuk ketté a legnagyobb elemszámú klasztert a k-közép algoritmus

szerint;

4. AMÍG_VÉGE.

Hierarchikus lebontó algoritmus hatékonysága

Az algoritmus műveletigényéről elmondható, hogy nagyjából megegyezik az algoritmus

által használt kettéosztó klaszterezési algoritmus műveletigényével. A mi esetünkben ez

a k-közép algoritmus, melynek műveletigénye 𝑂(𝑛𝑘′𝑡), ahol n az adatpontok száma,

k’=2, t pedig a klaszterezéshez szükséges iterációszám (𝑡 ≪ 𝑛). Ez a „belső kettéosztó”

klaszterezési algoritmus pontosan (𝑘 − 1)-szer hívódik meg, ahol k az algoritmus

bemeneti klaszterszám-paramétere (megállási feltétele). Általában 𝑘 ≪ 𝑛, így

összefoglalva az algoritmus műveletigénye 𝑂(𝑛).

Az algoritmusnak a k-közép algoritmussal megegyező hátrányai lesznek. Általában

csak azokat a klasztereket ismeri fel jól, amelyek konvex szerveződésű pontokból

állnak, illetve ugyanúgy érzékeny a kívülálló pontokra.

19

2.4.5 ábra - Hierarchikus lebontó algoritmus (k-közép algoritmussal) rossz működése

kívülálló pontok, illetve nem konvex szerveződésű klaszterek esetén

2.5 Sűrűség alapú algoritmusok

A sűrűség alapú klaszterező algoritmusok alapötlete az, hogy a térben „sűrűn”

elhelyezkedő adatpontokat soroljuk egy klaszterbe. Egy klaszter középpontja mindig

sűrű, a határvonal felé haladva pedig egyre ritkább. Egy úgynevezett sűrűségi korlát

mondja meg, hogy mekkora sűrűségváltozás esetén értük el a klaszter határát. Ez a

megközelítés áll a legközelebb az emberi szem intuitív klaszterfelismeréséhez, ha az

adatpontjainkat térben vagy síkban jelenítjük meg, hiszen „ránézésre” nagyon könnyen

felismerjük a sűrű és ritka területeket.

Egy sűrűség alapú klaszterező algoritmus működéséhez néhány új fogalom

definiálására van szükségünk. Ilyen fogalom egy pont környezete, illetve, hogy mikor

nevezünk egy pontot adott klaszter belső pontjának. Bevezetünk egy szomszédsági

relációt is a pontok között, majd e reláció tranzitív lezártjának segítségével alakítjuk ki a

klasztereiket.

20

Sűrűség alapú algoritmusok segítségével tetszőleges alakú klasztereket

felismerhetünk, feltéve, hogy azok pontjainak sűrűsége eléri az algoritmus által használt

sűrűségkorlátot. Az ilyen típusú algoritmusok másik nagy előnye, hogy zajos, sok

kívülálló pontot tartalmazó adathalmazok esetén is jól működnek.

2.5.1 DBSCAN algoritmus

A legrégebbi és egyben legnépszerűbb sűrűség alapú klaszterező algoritmus a

DBSCAN algoritmus, mely két bemenő paraméterrel dolgozik[3]. Az egyik paraméter

egy szomszédsági sugár, a másik pedig egy sűrűségi korlát. Az algoritmus szerint egy

klaszter nem más, mint azon pontok maximális halmaza, melyek sűrűség alapján

elérhetőek egymásból. Így tehát bevezetésre kerül egy elérhetőség-fogalom a pontok

között, a sűrűség-elérhetőség.

Vizsgáljuk meg a DBSCAN-hez, mint a legalapvetőbb sűrűség alapú algoritmushoz

szükséges fogalmakat. Jelöljük a klaszterezendő adatpontok halmazát D-vel, valamint

legyen d az adatpontok között értelmezett távolságfüggvény (metrika).

Definíció: Egy 𝑝 ∈ 𝐷 pont 𝜺-sugarú környezete a következő halmaz:

𝑁𝜀(𝑝) = {𝑞 ∈ 𝐷|𝑑(𝑝, 𝑞) ≤ 𝜀}

Egy metrikus térben adott pont környezetét egy 𝜀-sugarú gömbbel

reprezentálhatunk.

Definíció: Az 𝑁𝜀(𝑝) halmaz elemeit a p pont szomszédainak nevezzük.

Definíció: Egy p adatpont 𝜀 sugárra vonatkozó sűrűségén szomszédainak |𝑁𝜀(𝑝)|

számát értjük.

Definíció: A 𝜇 pozitív egész számot sűrűségi korlátnak nevezzük, ha megadja adott

pont szomszédainak minimális számát. Egy adatpont akkor vehet részt egy klaszter

létrehozásában, ha legalább ennyi szomszéddal rendelkezik.

[3] Martin Ester, Hans-Peter Kriegel, Jörg Sander, Xiaowei Xu: "A density-based algorithm for discovering clusters in large spatial databases with noise", Proceedings of the Second International Conference on Knowledge Discovery and Data Mining (KDD-96). AAAI Press. pp. 226–231. ISBN 1-57735-004-9, 1996.

21

Definíció: A p pontot nagy sűrűségű pontnak vagy magpontnak nevezzük, ha

sűrűsége legalább annyi, mint a 𝜇 sűrűségi korlát (|𝑁𝜀(𝑝)| ≥ 𝜇), különben pedig kis

sűrűségű pontnak nevezzük.

A DBSCAN algoritmus működése során az adatpontok három típusát különbözteti

meg:

Magpont – Olyan pont, melynek sűrűsége legalább annyi, mint a sűrűségi

korlát

Határpont – Olyan pont, mely egy magpont szomszédságában található,

azonban sűrűsége kisebb a 𝜇-sűrűségi korlátnál.

Kívülálló pont (zajpont) – Olyan pont, amelyik az első két kategóriába nem

sorolható be.

2.5.1 ábra – Adatpontok típusai adott ε és 𝝁 = 𝟒 esetén

Definíció: A q adatpont közvetlenül sűrűség-elérhető a p adatpontból, ha p

magpont és q a p pont szomszédja (adott 𝜀-sugár szerint).

Megjegyezzük, hogy a közvetlen sűrűség-elérhetőség egy aszimmetrikus reláció,

hiszen a q pont nem feltétlenül magpont.

Definíció: A q adatpont sűrűség-elérhető a p adatpontból, ha létezik egy olyan

𝑝 = 𝑎1, 𝑎2, … , 𝑎𝑛, 𝑎𝑛+1 = 𝑞 pontok sorozata, hogy 𝑎𝑖+1 közvetlenül sűrűség-

elérhető 𝑎𝑖-ből ∀𝑖 ∈ (1. . 𝑛) esetén.

22

Jól látható, hogy a sűrűség-elérhetőség nem más, mint a közvetlen sűrűség-

elérhetőség fogalmának általánosítása (tranzitív lezártja), tehát ez sem lehet egy

szimmetrikus reláció a pontok között. A klaszterek megfelelő leírásához viszont egy

szimmetrikus relációra van szükségünk, ezért bevezetjük a következő relációt, ami már

szimmetrikus.

Definíció: A p és q pontok sűrűség-összekapcsoltak, ha mindketten sűrűség-

elérhetőek egy o pontból.

2.5.2 ábra – p és q pontok sűrűség-összekapcsoltak 𝝁 = 𝟒 esetén. A közvetlenül

sűrűség-elérhető pontokat piros nyilakkal kapcsoltuk össze.

A fent definiált fogalmak segítségével már elő tudjuk állítani az algoritmus bemenő

paramétereinek megfelelő klaszterezést. Az algoritmus futása után egy C klaszter a

következő két kritériumnak fog megfelelni:

Összekapcsoltság: ∀𝑝, 𝑞 ∈ 𝐶 esetén p és q sűrűség-összekapcsoltak;

Maximalitás: ∀𝑝, 𝑞 ∈ 𝐶 esetén, ha 𝑝 ∈ 𝐶 és q sűrűség-elérhető p-ből, akkor

𝑞 ∈ 𝐶.

A DBSCAN algoritmus pszeudokódja a következő (D-adatpont halmaz, 𝜀-sugár, 𝜇-

sűrűségi korlát):

DBSCAN(𝐷, 𝜀, 𝜇)

1. MINDEN 𝑝 ∈ 𝐷 pontra:

2. HA p magpont és még nem dolgoztuk fel:

3. Legyen C az összes p-ből sűrűség-elérhető, fel nem dolgozott pontok

halmaza;

4. Nyilvánítsunk minden C-beli elemet feldolgozottnak;

23

5. C legyen egy új, az algoritmus által megtalált klaszter;

6. KÜLÖNBEN nyilvánítsuk p-t kívülálló pontnak (még nem feldolgozott);

7. MINDEN_VÉGE.

Az algoritmus futása után az adatpontok lehetnek kívülálló pontok, illetve

feldolgozott pontok, melyek valamelyik iteráció szerinti klaszterhez tartoznak.

A DBSCAN algoritmus hatékonysága

Az algoritmus magja adott pontból sűrűség-elérhető pontokat keres. Ehhez meg kell

vizsgálnunk az érintett pontok környezetét, ami az összes n darab adatpont lekérdezését

jelenti. Adott pont környezetét azonban, megfelelő implementációval (például pontok

színezésével), elegendő csak egyszer megvizsgálni, tehát az algoritmus műveletigénye

𝑂(𝑛2), ahol n az adatpontok száma. Bizonyos esetekben, ha az adatpontokról több

előzetes információval rendelkezünk, esetleg térbeli indexeket használunk, akkor egy

pont ε-sugarú környezetét kevesebb, mint n lekérdezéssel is megkaphatjuk (𝑂(𝑙𝑜𝑔𝑛)),

így az algoritmus műveletigénye 𝑂(𝑛 ∗ 𝑙𝑜𝑔𝑛)-re csökken.

A DBSCAN algoritmus nagy előnye az eddig bemutatott klaszterező

algoritmusokkal szemben, hogy nincs szüksége a klaszterszám előzetes

meghatározására. Ez az algoritmus során, a klaszterek feltérképezése közben

automatikusan kiderül.

Az algoritmus képes tetszőleges alakú és méretű klaszterek feltárására, amennyiben

azok a bemeneti paramétereknek megfelelő sűrűségűek (2.5.3 ábra), ugyanakkor nem

érzékeny a kívülálló pontokra, ezáltal zajszűrőként is kiválóan használható (2.5.4 ábra).

Ez utóbbi annak köszönhető, hogy az algoritmus külön kezeli a kívülálló pontokat a

klaszterek mellett.

2.5.3 ábra – DBSCAN algoritmus tetszőleges alakú klaszterek esetén (azonos sűrűséggel)

24

2.5.4 ábra – DBSCAN algoritmus működése kívülálló pontokra (piros színű, egyik

klaszterhez sem tartozó pontok)

A DBSCAN algoritmus egyik hátránya, hogy nagyon érzékeny a bemeneti

paraméterekre, hiszen ezek nagyon kevés változtatásával is teljesen eltérő klaszterezést

adhat eredményül. A legnagyobb kihívást az algoritmus használata során e két

paraméter megfelelő megválasztása jelenti. A 2.5.5 ábrán látható klaszterezés esetében

például túl kicsinek választottuk a szomszédsági sugarat.

Az algoritmus másik hátránya, hogy nem képes megfelelően kezelni a változó

sűrűségű klasztereket, függetlenül a bemeneti paraméterek megválasztásától (2.5.6

ábra). Ez érthető is, hiszen az algoritmus kizárólag sűrűségük alapján térképezi fel a

klasztereket.

2.5.5 ábra – DBSCAN algoritmus működése rosszul megválasztott bemeneti

paraméterek esetén (túl kicsi ε)

25

2.5.6 ábra – DBSCAN algoritmus rossz működése változó sűrűségű klaszterek esetén

2.5.2 OPTICS algoritmus

Mint ahogy azt már az előbbi alfejezetben említettük, a DBSCAN algoritmus rendkívül

érzékeny a bemenő paraméterek értékeire. Ezt az érzékenységet próbálja kiküszöbölni

az OPTICS[4] algoritmus, pontosabban az ε-szomszédsági sugár paraméter pontos

megválasztásának kérdését egyszerűsíti. Az OPTICS önmagában nem egy klaszterező

algoritmus[5]. Konkrét klasztereket az algoritmus kimenetének utólagos feldolgozásával

kaphatunk.

Az algoritmus a DBSCAN klaszterező algoritmus alapötletéhez hasonlóan működik,

azonban kimenete az adatpontok egy sorrendje, valamint minden adatpontra bizonyos

numerikus értékek, melyek a pont környezetét jellemzik sűrűség tekintetében. Az

adatpontok eme sorrendje valójában egy sűrűség alapú klaszterezési struktúrát

reprezentál, melynek segítségével többféle klaszterezést is megkaphatunk. Ezek a

klaszterezések a DBSCAN algoritmusnak megfelelő klaszterezések, azonban egy széles

bemeneti paraméterskálát lefedve. Maga az ötlet azon alapszik, hogy sűrűség alapú

klaszterezések esetén egy sűrűbb klaszter minden esetben része egy kevésbé sűrű

klaszternek. Erre láthatunk példát a 2.5.6 ábrán, ahol ugyanazon adatpontokra

különböző sűrűségű klasztereket kerestünk. A megtalált klaszterek zöld, míg a kívülálló

[4] Mihael Ankerst, Markus M. Breunig, Hans-Peter Kriegel, Jörg Sander: "OPTICS: Ordering Points To Identify the Clustering Structure". ACM SIGMOD international conference on Management of data. ACM Press. pp. 49–60, 1999.

[5] Hinneburg A., Keim D.: “An Efficient Approach to Clustering in Large Multimedia Databases with

Noise”, Proc. 4th Int. Conf. on Knowledge Discovery & Data Mining, New, York City, NY, 1998.

26

pontok piros színűek. Jól látható, hogy az a) esetben megtalált klaszter része a b)

esetben megtalált ritkább klaszternek, ugyanakkor a c) esetben megtalált klaszter minkét

előbbit tartalmazza. Felhasználtuk, hogy adott sűrűségi korlát mellett kisebb

szomszédsági sugár nagyobb sűrűségű klasztereket eredményez.

2.5.7 ábra – DBSCAN adott sűrűségi korlát mellett. A sűrűbb klaszter mindig része

egy kevésbé sűrű klaszternek.

Az OPTICS algoritmus működésének megértéséhez, a DBSCAN algoritmus

leírásánál bevezetett fogalmakon túl a következőkben tárgyalt definíciókra is

szükségünk van.

Legyen D az adatpontok halmaza, d pedig a pontok között értelmezett

távolságmérték (metrika).

Definíció[1]: Egy 𝑝 ∈ 𝐷 pont k-sugara az az r távolság, amelyre igaz, hogy

legalább k darab olyan 𝑞 ∈ 𝐷\{𝑝} pont van, melyekre 𝑑(𝑝, 𝑞) ≤ 𝑟, illetve legfeljebb

𝑘 − 1 darab olyan 𝑞 ∈ 𝐷\{𝑝} pont van, melyekre 𝑑(𝑝, 𝑞) < 𝑟.

Egy adott pont k-sugarát végtelennek tekintjük, ha az algoritmus ε-szomszédsági

sugár paraméter szerinti sűrűsége kisebb k-nál, azaz |𝑁𝜀(𝑝)| < 𝑘.

Definíció: Egy 𝑝 ∈ 𝐷 pont magsugara (core-distance(p)) az a legkisebb sugár-

távolság, melyre a p magpont. Azt is mondhatjuk, hogy a magsugár a p pont 𝜇-

távolsága, ahol µ az algoritmus sűrűség-korlát paramétere.

Definíció: A 𝑝 ∈ 𝐷 pont egy 𝑜 ∈ 𝐷 magponttól mért elérhető távolsága,

reachability-distance(p, o), az a legkisebb távolság, melyen belül a p közvetlenül

sűrűség-elérhető o-ból, azaz max {𝑜 𝑚𝑎𝑔𝑠𝑢𝑔𝑎𝑟𝑎, 𝑑(𝑝, 𝑜)}.

27

2.5.8 ábra – Magsugár; elérhető távolság 𝝁 = 𝟒 esetén.

A fentebb leírt definíciók segítségével már vizsgálhatjuk az algoritmus működését.

Mint ahogyan azt említettük, az algoritmus az adatpontok egy sorrendjét adja

eredményül. Ez a sorrend a pontok lehető legkisebb (legközelebbi magpont szerinti)

elérhető távolságaik szerint növekvően rendezett. Ez biztosítja azt, hogy az algoritmus

futása során előbb mindig a legsűrűbb klaszterek pontjait dolgozza fel, hiszen egy

sűrűbb klaszter megtalálásához adott sűrűségkorlát esetén kisebb szomszédsági sugár

szükséges. Ezen rendezés felhasználásával tudjuk majd előállítani a konkrét

klasztereket.

Az algoritmus az adatpontok egy lineáris rendezésén kívül a következő értékeket

határozza meg minden egyes 𝑝 ∈ 𝐷 adatpontra:

p magsugara (core-distance(p));

p-nek egy megfelelően választott 𝑜 ∈ 𝐷 magponttól mért elérhető távolsága

(reachability-distance(p,o)).

Az OPTICS a DBSCAN algoritmushoz hasonlóan ugyancsak két bemeneti

paraméterrel dolgozik. Az egyik paraméter a szomszédsági sugár (ε), a másik pedig egy

sűrűségi korlát (µ). Ha az algoritmust adott ε és µ paraméterekkel futtatjuk, akkor a

kimenetből egy utólagos feldolgozás után az összes, DBSCAN algoritmusnak megfelelő

klaszterezés megkapható, ahol a DBSCAN paraméterei 𝜀′ ≤ 𝜀 és 𝜇′ = 𝜇.

Az OPTICS és DBSCAN algoritmusok közötti fő különbség az, hogy míg a

DBSCAN működése során tetszőlegesen választ a közvetlenül elérhető pontokból, addig

28

az OPTICS mindig a pillanatnyilag elérhető legnagyobb sűrűségű környezetből választ

egy új klaszter bejárása során.

Az algoritmus megvalósításakor szükségünk van egy speciális adatszerkezetre,

amely a vizsgálandó pontokat elérhető távolságuk szerint rendezetten tárolja. Ez lehet

például egy rendezett lista vagy egy fordított prioritásos sor, ahol a prioritások az

elérhető távolságok. Nevezzük a továbbiakban ezt a rendezett adatszerkezetet rList-nek.

Az rList egy eleme (p, r) alakú, ahol p a pont, r pedig az elérhető távolság.

A fentiek ismeretében már megfogalmazhatjuk az OPTICS algoritmus

pszeudokódját (D-adatpont halmaz, 𝜀-szomszédsági sugár, 𝜇-sűrűségi korlát).

OPTICS(D, ε, µ)

1. MINDEN 𝑜 ∈ 𝐷 adatpontra:

2. HA o pont feldolgozatlan, AKKOR:

3. Adjuk hozzá az (o, ε) elemet az rList-hez;

4. AMÍG az rList nem üres:

5. Válasszuk ki az rList első elemét. Ez legyen (o, r_dist);

6. Kérjük le az o pont 𝑁𝜀(𝑜) szomszédait és határozzuk meg o magsugarát;

legyen ez c_dist = core-distance(o);

7. Legyen az o pont címkéje „feldolgozott”;

8. Írjuk ki fájlba az (o, r_dist, c_dist) hármast;

9. HA o magpont, azaz 𝑐_𝑑𝑖𝑠𝑡 ≤ 𝜀, AKKOR:

10. MINDEN 𝑝 ∈ 𝑁𝜀(𝑜) feldolgozatlan pontra:

11. Határozzuk meg a p pont o magponttól mért elérhető távolságát,

azaz 𝑟_𝑑𝑖𝑠𝑡𝑝 = 𝑟𝑒𝑎𝑐ℎ𝑎𝑏𝑖𝑙𝑖𝑡𝑦_𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑒(𝑝, 𝑜)-t;

12. HA p ponthoz tartozó bejegyzés nincs az rList-ben, AKKOR:

13. Adjuk hozzá a (𝑝, 𝑟_𝑑𝑖𝑠𝑡𝑝) elemet az rList-hez;

14. KÜLÖNBEN HA (𝑝, 𝑜𝑙𝑑_𝑟_𝑑𝑖𝑠𝑡) ∈ 𝑟𝐿𝑖𝑠𝑡 és

𝑟_𝑑𝑖𝑠𝑡𝑝 ≤ 𝑜𝑙𝑑_𝑟_𝑑𝑖𝑠𝑡, AKKOR:

15. Frissítsük a p ponthoz tartozó bejegyzést rList-ben

(𝑝, 𝑟_𝑑𝑖𝑠𝑡𝑝)-re;

16. MINDEN_VÉGE;

17. AMÍG_VÉGE;

18. MINDEN_VÉGE.

29

Az algoritmus indulásakor minden adatpont „feldolgozatlan” címkével rendelkezik.

Amikor egy ponthoz tartozó numerikus értékeket meghatároztuk, kiírjuk egy listába

(fájlba). Az algoritmus futása után a pontok a fájlban már megfelelő sorrendben fognak

szerepelni a további feldolgozáshoz (klaszterezés).

Az algoritmus által fájlba kiírt adatokból már tetszőleges DBSCAN klaszterezést

megkaphatunk, melynek sűrűségi korlátja megegyezik az OPTICS sűrűségi korlátjával,

illetve szomszédsági sugara legfeljebb akkora, mint az OPTICS szomszédsági sugara.

Nevezzük az OPTICS kimeneteként szolgáló fájlt rend_fájl-nak. Az alább látható,

pszeudokóddal leírt algoritmussal megkaphatunk egy ilyen klaszterezést az OPTICS

algoritmus kimenetéből. Az algoritmus neve ExtractDBSCAN-Clustering, bemenő

paraméterei pedig ε’ szomszédsági sugár, valamint µ sűrűségi korlát. Fontos előfeltétel

az algoritmushoz, hogy 𝜀′ ≤ 𝜀, valamint 𝜇′ = 𝜇, ahol ε és µ az OPTICS algoritmus

paraméterei, amiből az adatfájlt kaptuk.

ExtractDBSCAN-Clustering(rend_fájl, ε’, µ)

1. 𝑘𝑙𝑎𝑠𝑧𝑡𝑒𝑟𝐼𝐷 ≔ 0 (kívülálló pontok klaszterindexe);

2. MINDEN 𝑖 ≔ 1 𝑡𝑜 |𝐷| esetén:

3. Kérjük le a rend_fájl i. elemét. Legyen ez (o, r_dist, c_dist);

4. HA 𝑟_𝑑𝑖𝑠𝑡 > 𝜀′ AKKOR:

5. HA 𝑐_𝑑𝑖𝑠𝑡 ≤ 𝜀′ AKKOR:

6. klaszterID++; (új klaszter jön létre);

7. Az o pontot besoroljuk a klaszterID indexű klaszterbe;

8. KÜLÖNBEN az o pontot besoroljuk a 0 indexű klaszterbe (kívülálló pont

lesz);

9. KÜLÖNBEN (𝑟_𝑑𝑖𝑠𝑡 ≤ 𝜀′): az o pontot besoroljuk a klaszterID indexű

klaszterbe;

10. MINDEN_VÉGE.

Az OPTICS algoritmus hatékonysága

Az OPTICS algoritmus futása során minden egyes adatpont környezetét egyszer

vizsgálja meg. Az algoritmus műveletigénye tehát 𝑂(𝑛 ∗ 𝑠𝑧𝑜𝑚𝑠𝑧é𝑑𝑜𝑘_𝑣𝑖𝑧𝑠𝑔á𝑙𝑎𝑡𝑎),

30

ahol n az adatpontok száma. Egy adott pont szomszédainak vizsgálata a DBSCAN

algoritmushoz hasonlóan, általánosságban n darab lekérdezést igényel, tehát a

műveletigény 𝑂(𝑛2). Térbeli indexek használata esetén ez a műveletigény itt is 𝑂(𝑛 ∗

𝑙𝑜𝑔𝑛)-re csökkenthető.

Az OPTICS algoritmus kimenetéből klaszterezést előállító ExtractDBSCAN-

Clustering algoritmus csak egyszer olvassa végig az eredményfájlt, ami pontosan

adatpontszámnyi bejegyzést tartalmaz. Tehát a műveletigény az ExtractDBSCAN-

Clustering algoritmus esetén 𝑂(𝑛), ahol n az adatpontok száma.

Vizsgáljuk meg a DBSCAN és OPTICS algoritmusok működése közötti alapvető

különbségeket. Jól láthatóan az OPTICS algoritmus egy bonyolultabb, precízebb

feltérképezést végez a pontokra azok környezetét illetően. Míg a DBSCAN

algoritmusban adott pont sűrűségét egy logikai értékkel leírhatjuk (magpont vagy sem),

addig az OPTICS a pontok sűrűségére egy numerikus értéket ad (magsugár). A

DBSCAN algoritmus szerint két pont sűrűség összekapcsoltságát ugyancsak leírhatjuk

egy logikai értékkel (sűrűség összekapcsolt vagy sem), az OPTICS algoritmusban

viszont ezt is egy numerikus érték reprezentálja, az elérhető távolság. További

különbség, hogy míg a DBSCAN algoritmus pontbejárási stratégiája véletlenszerű

(random), úgy az OPTICS algoritmusé mohó (greedy), hiszen mindig a lehető

legnagyobb sűrűségű környezettel rendelkező pontot választja a feltérképezés során. A

2.5.9 ábra ezeket a különbségeket foglalja össze Aidong Zhang előadásai alapján[6].

DBSCAN OPTICS

Pont sűrűsége Logikai érték

(magpont vagy sem)

Numerikus érték

(magsugár)

Sűrűség összekapcsoltság

Logikai érték

(sűrűség összekapcsolt vagy

sem)

Numerikus érték

(elérhető távolság)

Pontkiválasztási stratégia

a futás során véletlenszerű (random) mohó (greedy)

2.5.9 ábra – DBSCAN és OPTICS algoritmusok összehasonlítása

[6] Aidong Zhang, University at Buffalo, The State University of New York, http://www.cse.buffalo.edu/faculty/azhang/cse601/, 2014.05.10

31

2.6 Rács alapú klaszterező algoritmusok

Az eddig bemutatott klaszterező algoritmusok nagyon lassú működést

eredményezhetnek nagy adathalmazok esetén. Láthattuk, hogy bizonyos algoritmusok

futási ideje legrosszabb esetben 𝑂(𝑛2), ami a gyakorlatban többször előforduló

hatalmas, akár több millió adatpontot tartalmazó halmazok esetén már nem tűnik

hatékony algoritmusnak. Ilyen nagy adathalmazok klaszterezése esetén nyújtanak

segítséget a rács alapú klaszterező algoritmusok.

Egy rács alapú klaszterező algoritmus egy speciális algoritmus, mely egyaránt

rendelkezik a hierarchikus, illetve sűrűség alapú klaszterező algoritmusok bizonyos

jellemzőivel. Az algoritmus alapötlete az, hogy ne magukat az adatpontokat

klaszterezzük, hanem ehelyett bontsuk fel az adatpontok vektorterét részekre,

úgynevezett hipertéglalapokra, melyekben elhelyezzük az adatpontokat, mindegyiket a

megfelelő helyre, majd ezen hipertéglalapokra futtassunk le egy algoritmust, ami már az

adatpontok klaszterezését eredményezi. Az algoritmusról azt mondhatjuk, hogy

bizonyos értelemben hierarchikus algoritmus, hiszen a vektortér celláit

(hipertéglalapok) egy hierarchiába szervezve dolgozza fel. Ez a feldolgozás a cellák

sűrűsége alapján történik, ezért az algoritmus egy sűrűség alapú algoritmusnak is

tekinthető.

2.6.1 GRIDCLUS algoritmus

A rács alapú klaszterező algoritmusok közül részletesen a legalapvetőbb, 1993-ban

Erich Schikuta által megalkotott GRIDCLUS[7] algoritmust mutatjuk be, pontosabban

annak egy módosított változatát. Az egyszerűbb megértés érdekében az algoritmust két

dimenziós adatpontokra részletezzük, ez azonban könnyen kiterjeszthető nagyobb

dimenziók esetére is, hiszen egyedül a cellák indexelése változik.

A GRIDCLUS, mint minden rács alapú klaszterező algoritmus, egy teljesen új

megközelítéssel dolgozik. Eszerint nincs szükségünk az adatpontok közötti

[7] Erich Schikuta: „Grid-Clustering: A Fast Hierarchical Clustering Method for Very Large Data Sets”, Center for Research on Parallel Computation, Proceedings of the 13th International Conference on Pattern Recognition Volume IV, Track D: Parallel and Connectionist Systems: 101-105 vol 2. DOI: 10.1109/ICPR.1996.546732, 1993.

32

távolságfogalomra, ugyanis ezeket a hipertéglalapokra felosztott vektortérben helyezzük

el, majd ezen téglalapok feldolgozásával alakítjuk ki a klaszterezést.

Az algoritmus első lépésben felépíti az adatpontoknak megfelelő térbeli

rácsszerkezetet, majd minden egyes adatpontot hozzárendel a rács pontosan egy

cellájához. Fontos, hogy a hozzárendelés után az adatpontokat tartalmazó cellák, mint

halmazok, egymással páronként diszjunktak legyenek.

Vizsgáljuk meg, hogyan építhetjük fel a klaszterezéshez szükséges rácsszerkezetet.

Mint ahogyan azt Erich Schikuta tudományos cikkében olvashatjuk, a felépítéshez több,

célzottan erre a feladatra optimalizált adatszerkezet létezik. Ilyen többek között a

GridFile[8] adatszerkezet, melyről több elemzést is olvashatunk[9].

A GRIDCLUS algoritmus implementációja során a GridFile adatszerkezet

használatát nélkülözve, a következőképpen hozzuk létre a klaszterezéshez szükséges

rácsszerkezetet.

Első lépésben kiválasztjuk a vektortérből azt a hipertéglalapot, amelyik minden

adatpontunkat tartalmazza. Ez meghatározható akár egy előzetes durva becsléssel,

azonban ha nem tudjuk megbecsülni a téglalap méreteit, válasszuk a lehető legnagyobb

téglalapot, amit az implementációnk megenged. Ez a téglalap legyen a mi esetünkben

egy egyszerű négyzet, hiszen kétdimenziós pontok esetén demonstráljuk az algoritmust.

Második lépésben osszuk fel az előbb megkapott hipertéglalapot (négyzetet)

dimenziói mentén egyenlő méretű cellákra. Kétdimenziós esetben ez kisebb, egyenlő

méretű négyzeteket jelent. Megjegyezzük, hogy a felosztás finomsága nagyban

befolyásolhatja a klaszterezés pontosságát. Minél sűrűbb a felosztás, annál pontosabb

klaszterezési eredményt kapunk. Úgy is fogalmazhatunk, hogy nagyobb felosztás esetén

nagyobb sűrűségű klasztereket kapunk, a sűrűség alapú klaszterező algoritmusok

terminológiája szerint.

[8] K.H. Hinrichs: The grid file system: implementation and case studies of applications, Diss. ETH Nr. 7734, Zurich, 1985.

[9] H. Hromada: The GRIDCLUS data analysis system, diploma thesis Univ. Vienna, Vienna, 1989.

33

2.6.1 ábra – Adatpontok elhelyezkedése a rácsszerkezetben

Miután kialakítottuk magát a rácsot, nincs más dolgunk, mint elhelyezni az

adatpontokat a megfelelő cellákba. Elegendő csak azokat a cellákat nyilvántartanunk a

továbbiakban, amelyek tartalmaznak adatpontot. Minden egyes celláról a következő

adatokat tartjuk nyilván:

cella sorindexe és oszlopindexe (n dimenziós adat esetén n index) ami

mutatja, hogy a tér felosztásának megfelelően hol található a cella;

tartalmazott pontok listája;

cella sűrűsége.

Adott cella sűrűsége nem más, mint a cella által tartalmazott pontok számának,

illetve a cella területének (hipertérfogatának) hányadosa, azaz adott B cella esetén a

cellasűrűség 𝑠𝐵 = 𝑝𝐵/𝑉𝐵, ahol 𝑝𝐵 a cellában levő pontok száma, 𝑉𝐵 pedig a cella

területe (térfogata). Ezt a képletet használva azonban pontatlan eredményhez jutnánk,

hiszen mi az algoritmusunk során nem változtatjuk a cellák méretét, azaz nem igazítjuk

őket a tartalmazott pontokhoz, mint ahogyan azt a GridFile adatszerkezet teszi.

Használjuk ezért a cellák valós területe helyett azt a területet, amelyet a cellában levő

pontok „kifeszítenek”. Erre a számolásra láthatunk példát a 2.6.2 ábrán. Ebben az

esetben a cella pontok által kifeszített területét minden új pont felvételekor újra kell

számolnunk, azonban cserébe egy helyes, klaszterezésnek megfelelő cellasűrűséget

kapunk.

34

2.6.2 ábra – Cellák sűrűsége: a) esetben 𝒔𝑩 = 𝟎, b) esetben 𝒔𝑩 = 𝟑/(𝒃𝒙 ∗ 𝒃𝒚);

c) esetben 𝒔𝑩 = 𝟔/(𝒄𝒙 ∗ 𝒄𝒚)

Miután létrehoztuk az adatpontoknak megfelelő rácsszerkezetet, ami nem más, mint

a nyilvántartott cellák összessége, kialakítjuk a cellák egy hierarchiáját, azaz rendezzük

őket sűrűség szerint csökkenő sorrendben.

Rendezés után lefuttatjuk a GRIDCLUS algoritmus részét, ami nem az adatpontokat,

hanem a rácsszerkezet celláit gyűjti klaszterekbe. Így nyilvánvalóan megkapjuk a cellák

által tartalmazott pontok klaszterezését is.

A GRIDCLUS algoritmus pszeudokódja a következő (D az adatpontok halmaza, f a

rács felosztása):

GRIDCLUS(D, f)

1. Hozzuk létre az adatpontoknak megfelelő rácsszerkezetet f felosztás szerint.

Legyenek a rácsszerkezet nyilvántartott cellái 𝐵1, 𝐵2, … , 𝐵𝑘.

2. Rendezzük a cellákat sűrűségük szerint csökkenő sorrendbe. Legyen az

eredmény sorozat 𝑆 =< 𝐵1′ , 𝐵2′ , … , 𝐵𝑘′ >. A cellák i’. indexe az eredeti i.

index permutációjára utal.

3. Jelöljünk meg minden cellát „nem aktív” és „nem klaszterezett” címkével.

4. AMÍG az S sorozat tartalmaz „nem aktív” cellát:

5. Legyen az első megtalált „nem aktív” cella indexe ind.

6. Keressük meg az éppen aktuális aktív cellákat, azaz S-nek azt az ind indextől

kezdődő részsorozatát, melyre a cellák sűrűsége megegyezik, vagy csak

nagyon kis mértékben tér el. Ezen 𝐵𝑖𝑛𝑑, 𝐵𝑖𝑛𝑑+1, … , 𝐵𝑖𝑛𝑑+𝑗 (0 ≤ 𝑗 ≤ 𝑘 − 𝑖𝑛𝑑)

cellákat jelöljük meg „aktív” cellaként.

35

7. MINDEN B cellára a 𝐵𝑖𝑛𝑑, 𝐵𝑖𝑛𝑑+1, … , 𝐵𝑖𝑛𝑑+𝑗 cellák közül:

8. HA B „nem klaszterezett”, AKKOR:

9. Létrehozunk egy új C klasztert;

10. A B cellát hozzáadjuk a C klaszterhez;

11. A B cellát „klaszterezettnek” nyilvánítjuk;

12. NEIGHBOR-SEARCH(B, C);

13. MINDEN_VÉGE;

14. Minden S-beli cellát „nem klaszterezettnek” nyilvánítunk;

15. AMÍG_VÉGE.

Az algoritmus működése során meghívja a NEGHBOR-SEARCH nevű rekurzív

eljárást, ami a paraméterül kapott cella szomszédait rekurzívan megvizsgálva állítja elő

a főalgoritmus egy klaszterét. A klaszter kialakításában a cella összes olyan szomszédja

részt vesz, amelyik „aktív”, de még „nem klaszterezett”. Az eljárás pszeudokódja alább

olvasható.

NEIGHBOR-SEARCH(B, C)

1. MINDEN 𝐵𝑠𝑧 cellára a B szomszéd cellái közül:

2. HA 𝐵𝑠𝑧 „aktív” és „nem klaszterezett”, AKKOR:

3. Hozzáadjuk a 𝐵𝑠𝑧 cellát a C klaszterhez;

4. A 𝐵𝑠𝑧 cellát „klaszterezettnek” nyilvánítjuk;

5. NEIGHBOR-SEARCH(𝐵𝑠𝑧, C);

6. MINDEN_VÉGE.

Felmerülhet a kérdés, hogy a NEIGHBOR-SEARCH eljárásban mely cellák

számítanak a B cella szomszédainak. Említettük, hogy minden egyes cella esetén

nyilvántartjuk annak helyét a rácsszerkezetben, egy sor-, illetve oszlopindex

segítségével (n dimenzió esetén n darab index). Egy cellának d dimenzióban összesen

3𝑑 − 1 darab szomszédja lehet. Ezen szomszédok különböznek egymástól a cellát tőlük

elválasztó hipersík dimenziójának függvényében, ami összesen 𝑑 − 1 féle lehet. Erich

Schikuta szerint elegendő csak a 𝑑 − 1 dimenziós hipersíkok által határolt szomszédok

bejárása, hiszen az eredményt csak ezek befolyásolják számottevően.

36

A 2.6.3 ábrán a B rácscella szomszédai láthatóak. 1 dimenziós síkkal (egy éllel)

elválasztott szomszédok a B1, B2, B3, B4, 0 dimenziós síkkal (síkbeli ponttal) elválasztott

szomszédok pedig a C1, C2, C3, C4.

2.6.3 ábra – A B cella szomszédai két dimenzióban

GRIDCLUS algoritmus hatékonysága

Az algoritmus teljes műveletigénye függ a rácsszerkezet létrehozásának költségétől, a

rácscellák sűrűség szerinti rendezésének költségétől, valamint a cellák klaszterezésének

költségétől. A klaszterezés során minden cellát csak egyszer kérdezünk le, ami 𝑂(𝑐)

futásidőt eredményez, ahol c a cellák száma. Megjegyezzük, hogy a rácsszerkezetben

adott szomszéd lekérése konstans idejű a cellák megfelelő indexelésének köszönhetően,

valamint általában 𝑐 ≪ 𝑛, ahol n az adatpontok száma. A rácscellák sűrűség szerinti

sorba rendezésének műveletigénye a kiválasztott rendezési algoritmustól függ. A

hatékonyság szempontjából leglényegesebb elem a rácsszerkezet létrehozásának

költsége. Ez nagyban függ a rácsszerkezet implementációjától, azonban általánosan a

költség 𝑂(𝑛), ahol n az adatpontok száma, hiszen minden egyes pontot egyszer

lekérdezünk, majd elhelyezzük a megfelelő rácscellába. A rácscellák sűrűségének

számítása konstans idejű, az adatpontok dimenziószámától függ. Mivel a cellák száma

nagy adathalmazok esetén elhanyagolható az adatpontok számához képest, azaz 𝑐 ≪ 𝑛,

ezért az algoritmus teljes műveletigénye 𝑂(𝑛).

Mint ahogy azt már említettük, az algoritmus paramétere, a rácsrendszer felosztása

nagyban befolyásolja az algoritmus pontosságát. Kis felosztás esetén nagyméretű cellák

keletkeznek, melyek elfedik az általuk tartalmazott adatpontok struktúráját. Ebben az

esetben pontatlan eredményt kaphatunk, azonban az algoritmus nagyon kevés számítást

37

igényel. Nagy felosztás esetén kisméretű cellák keletkeznek, melyek segítségével

pontosabbá válik a klaszterezés, azonban az algoritmus több számítást igényel.

A GRIDCLUS algoritmus tulajdonképpen egy sűrűség alapú algoritmushoz

hasonlóan működik, ahol a sűrűség alapú algoritmusok paramétereit (szomszédsági

sugár és sűrűségkorlát) egy darab paraméterrel helyettesítünk, ami nem más, mint a

rácsszerkezet felosztása. Minél nagyobb a felosztás, annál sűrűbb klasztereket talál az

algoritmus. Ez az analógia azzal magyarázható, hogy itt is egy sűrűségfogalom, a

cellasűrűség segítségével klaszterezünk (2.4.6 ábra).

2.6.4 ábra – GRIDCLUS algoritmus működése egyre nagyobb rácsfelosztás esetén

(balról jobbra haladva)

A GRIDCLUS algoritmus a sűrűség alapú klaszterező algoritmusokhoz hasonló

tulajdonságokkal rendelkezik. Képes tetszőleges alakú klaszterek felfedezésére

megfelelő rácsfelosztás esetén, ugyanakkor rosszul kezeli a váltakozó sűrűségű

klasztereket. Nagy hátránya a sűrűség alapú klaszterező algoritmusokkal szemben, hogy

nem képes kezelni a kívülálló pontokat. Míg egy sűrűség alapú algoritmus külön

klasztert tart nyilván a kívülálló pontok számára, addig a GRIDCLUS ezeket általában

külön egyelemű klaszterekbe sorolja. Könnyen adódhat az ötlet a javításra, miszerint

reprezentálja a kívülálló pontokat az egyelemű klaszterek uniója.

2.6.5 ábra – GRIDCLUS működése kívülálló pontok esetén

38

A GRIDCLUS algoritmus sokszor pontatlan eredményt adhat, főleg váltakozó

sűrűségű klaszterek esetén, azonban megfelelő rácsfelosztással az algoritmus gyors,

ugyanakkor jól elkülönülő klasztereket hoz létre. A gyakorlatban emiatt a rács alapú

algoritmusokat a legtöbb esetben egy elő-klaszterezési algoritmusként alkalmazzák

nagyméretű adathalmazok esetén, azaz a módszer által kapott klasztereket utólag egy

másik klaszterező algoritmusnak vetik alá, ezzel pontosítva az eredményt.

2.7 Klaszterezés neurális hálózatok segítségével

A klaszter-analízis feladatát vizsgálhatjuk egy teljesen új megvilágításban is, neurális

hálózatok segítségével. Mint a mesterséges intelligencia tudományának eszközei, a

neurális hálózatok az emberi agyhoz hasonlóan tanulásra képes rendszerek, melyek

tanító minták alapján képesek összefüggések, szabályszerűségek felismerésére. Ha ezek

a szabályszerűségek egy adathalmaz pontjainak kapcsolatait tükrözik, akkor egy

neurális hálózat a klaszterezési feladat megoldására is alkalmazható.

2.7.1 Neurális hálózatok

A mesterséges intelligencia tudományának egyik legmeghatározóbb ága a neurális

hálózatok, melyek manapság igen nagy népszerűségnek örvendenek a legkülönfélébb

alkalmazási területeken. Ez a tudományág viszonylag újnak tekinthető, ugyanakkor

sikeresen alkalmazható olyan speciális feladatok megoldására, melyek nagy

problématérrel rendelkeznek és hagyományos, algoritmikus megközelítésük bonyolult,

nehéz számítások útján vezet eredményhez.

Neurális hálózatok kiválóan alkalmazhatóak különböző csoportosítási problémák

megoldására, így a klaszterezés feladata is egyszerűen elvégezhető speciális, pont erre a

feladatra optimalizált neuronhálók segítségével.

A neurális hálózatok alapötletét a természet ihlette. Megalkotásánál célunk egy

olyan rendszer létrehozása, mely az emberi agyhoz hasonlóan képes „gondolkodni”,

azaz bizonyos minták és tapasztalatok alapján tanulásra képes, így kialakítva, esetleg

folyamatosan tökéletesítve feladatmegoldó képességét. Egy biológiai neurális

rendszerhez hasonlóan, amely idegsejtekből, valamint az azok közötti szinapszisokból

áll, egy mesterséges neuronháló architektúrája is elemei feldolgozó egységekből,

39

úgynevezett neuronokból, valamint az eszek közötti kapcsolatokból épül fel. Ezen

kapcsolatokat a neuronok közötti súlyozott élek reprezentálják. Minél nagyobb egy

adott él súlya, annál szorosabb kapcsolatban van az általa összekötött két neuron.

A mesterséges neurális hálózat definíciója a következő:

Definíció: „Neurális hálózatnak nevezzük azt a hardver vagy szoftver

megvalósítású, párhuzamos, elosztott működésre képes információ-feldolgozó eszközt,

amely:

azonos, vagy hasonló típusú – általában nagy számú – lokális feldolgozást végző

műveleti elem, neuron (processing element, neuron) többnyire rendezett

topológiájú, nagymértékben összekapcsolt rendszeréből áll,

rendelkezik tanulási algoritmussal (learning algorithm), mely általában minta

alapján való tanulást jelent, és amely az információ-feldolgozás módját

határozza meg,

rendelkezik a megtanult információ felhasználását lehetővé tevő információ

előhívási, vagy röviden előhívási algoritmussal (recall algorithm).”[10]

Minden neurális hálózat alap építőöve a neuron, mely a hálózat processzáló eleme

(2.7.1 ábra). Egy neuron bemenő élekből, egy feldolgozó vagy processzáló egységből,

valamint a neuron kimenetéből áll. A neuron – működését leegyszerűsítve – egy

kimenetet állít elő bemenő impulzusok (adatok) élsúlyozott összegéből egy belső

függvény segítségével.

Egy neuron bemenetének élsúlyozott összege ∑ 𝑤𝑖𝑢𝑖 ahol 𝑤𝑖 az i. bemeneti él súlya,

𝑢𝑖 pedig az i. input. A neuron y kimenete az előbb kiszámolt súlyozott összegre

alkalmazott aktivációs függvény (belső függvény) eredménye: 𝑦 = 𝑓(∑ 𝑤𝑖𝑢𝑖). Az f

aktivációs függvény gyakorlatilag bármilyen függvény lehet, azonban a legtöbb esetben

az identikus függvény, vagy valamilyen speciális szigmoid függvény.

[10] Horváth Gábor: Neurális hálózatok, Hungarian Edition Panem Könyvkiadó Kft., Budapest 2006, [447], ISBN 963545464-3

40

2.7.1 ábra – Elemi neuron

Egy neurális hálózaton belül a neuronok rétegekbe szerveződnek.

Megkülönböztetünk bemeneti réteget, közbülső, úgynevezett rejtett rétegeket, valamint

kimeneti réteget. A rétegekben elhelyezett neuronok közötti kapcsolatokat általában

mátrixok segítségével reprezentáljuk, ahol a mátrix adott eleme két neuron közötti él

súlya.

A különböző neurális hálózatok közül a klaszterezés feladatának megoldására a

legalkalmasabb az úgynevezett Kohonen-hálózat, mely egy speciális tulajdonságtérkép

segítségével képes a tanító adatpontok közötti kapcsolatok topologikus eltárolására.

2.7.2 Önszerveződő térképek (SOM)

Az önszerveződő térkép (Self-Organizing Map) vagy Kohonen-hálózat[11] az egyik

legszélesebb körben alkalmazott, Teuvo Kohonen által feltalált neurális hálózat, melyet

a Finn Akadémia professzora mutatott be a nyolcvanas években[12]. Az egyszerű

hálózati topológiájából adódóan a Kohonen-hálózat különösen jól működik nagy

dimenziójú pontokat tartalmazó tanító adathalmazok esetén. A hálózat képes a tanító

adatpontok közötti szemantikus kapcsolatok topologikus eltárolása mellett az

adatpontok alacsonyabb dimenziós reprezentálására is[13].

A Kohonen-hálózat szerkezetét tekintve két rétegből áll:

bemeneti réteg (input layer)

[11] Kohonen, T.: The self-organizing map, Helsinki University of Technology, Espoo Sep, ISSN: 0018-9219, Digital Object Identifier: 10.1109/5.58325, 1990. [12] Kohonen, T.: Self-organized formation of topologically correct feature maps. Biological Cybernetics, 43:59-69, 1982. [13] Kohonen, T.: Self-Organizing Maps, Third, extended edition, Springer, 2001.

41

kimeneti réteg (output layer)

A bemeneti réteg egy neuronból áll, mely teljesen összekapcsolt a kimeneti réteggel.

Két hálózati réteg teljesen összekapcsolt, ha minden, adott rétegben levő neuron

kapcsolatban van az összes, másik rétegben levő neuronnal. A kimeneti réteg neuronjai

egy rácson helyezkednek el, melyet térképnek nevezünk. Ez a rács kvadratikus

topológiájú (𝑛 ∗ 𝑛 - es), azaz minden egyes neuron négy közvetlen szomszéddal

rendelkezik (2.7.2 ábra). A gyakorlatban egyéb rétegtopológiák is ismertek (pl.

hexagonális topológia), ezek azonban általánosságban nem minősülnek jobbnak a

kvadratikus topológiánál, implementációjuk viszont jóval bonyolultabb.

2.7.2 ábra – SOM hálózati topológiája. A kék neuronok a kimeneti réteget (térkép)

alkotják, a zöld neuron pedig a bemeneti réteget.

A hálózat neuronjai reprezentálhatóak egy-egy súlyvektorral (feature vector),

melyek dimenziója megegyezik a tanító adatpontok dimenziójával. Ha a bemenő

adatpont n dimenziós, akkor a térkép (kimeneti réteg) minden egyes neuronja egy n

dimenziós vektort tartalmaz. A bemeneti réteg neuronja minden egyes lépésben az

éppen aktuális bemenő adatvektort tartalmazza. A térkép neuronjai közötti kapcsolat a

2.7.2 ábrán csak a szomszédságot hivatott reprezentálni, hiszen ezek között nincs a

hagyományos értelembe vett információáramlás.

42

A hálózat tanítása

A Kohonen-hálózat működésének első és egyben legfontosabb fázisa, az összes

neurális hálózathoz hasonlóan a tanítás, melynek során a hálózat képes a minta

bemenetek közötti hasonlóságok alapján megváltoztatni szerkezeti topológiáját. Tanítás

előtt a hálózatot inicializálnunk kell. Ez általában a kimeneti réteg neuronjait

reprezentáló vektorok véletlen értékekkel való feltöltését jelenti, azonban léteznek

egyéb módszerek is. Ilyen például a súlyvektorok random tanító adatokkal való

feltöltése, vagy a gradiens módszer, melynek során a térképet egy adott vektortól

indulva fokozatosan nagyobb vektorokkal töltjük fel átlósan haladva. Tanító adatokkal

való feltöltés esetén kevesebb iterációszám is elegendő a tanító algoritmusnak, hiszen a

rácspontok geometriailag közelebb lesznek a tanító adatokhoz.

A tanítás célja, hogy a térkép neuronjainak súlyvektorait úgy változtassuk meg a

tanító adatok segítségével, hogy azok később tükrözzék a mintaadatok közötti

hasonlóságokat.

A hálózat tanítása egy felügyelet nélküli tanítás, azaz nincs szükségünk a bemenő

minta adatpontokhoz tartozó elvárt kimenetekre, hiszen a hálózat kimeneti rétege egy

önszerveződő térkép, amely magától adaptálódik a bemenethez.

A tanuló algoritmus minden egyes iterációjában a következő három dolog változik:

BMU (Best Matching Unit)

Szomszédsági függvény értéke

Tanulási ráta értéke

A BMU nem más, mint a térkép azon neuronja, melynek súlyvektora a legközelebb

áll az éppen aktuális tanító bemenethez. Azt a neuront keressük, melynek súlyvektora és

a bemenő adat közötti távolság minimális. Ez a távolság legyen a két vektor euklideszi

távolsága (a és b d-dimenziós vektorok):

𝑑(𝑎, 𝑏) = √∑(𝑎𝑖 − 𝑏𝑖)2

𝑑

𝑖=1

Minden iterációban a térkép a BMU körüli bizonyos sugárban változik úgy, hogy a

térkép neuronjainak súlyvektorait próbáljuk közelíteni a bemenő adatvektorhoz. Ez a

43

sugár a tanulás minden egyes iterációjában csökken. A szomszédsági függvény, illetve a

tanulási ráta azt mondja meg, hogy milyen mértékben változtassuk mega BMU körüli

neuronok súlyait, azaz mennyire legyen nagy a hatása az adott bemenetnek a térkép

topológiájára[14]. Maga a szomszédsági függvény határozza meg az információ terjedését

a BMU körül, a tanulási ráta pedig a súlyok változtatásának nagyságát szabályozza,

azaz minél távolabb kerülünk a BMU-tól, annál kevésbé változzanak a súlyok.

Mind a szomszédsági függvény, mind pedig a tanulási ráta az aktuális iterációszám

monoton csökkenő függvénye. Ez azt jelenti, hogy a tanulás kezdetén egy mintaadat

szinte a térkép egészére kihat, majd az iterációszám növekedésével csak lokális

módosulásokat idéz elő, a BMU körüli neuronok súlyvektorait illetően[15].

A tanulási algoritmus pszeudokódja a következő:

(1) Inicializáljuk a térkép neuronjainak súlyvektorait véletlen értékekkel.

Hatékonyabb a tanítás, ha ezen értékek abból az intervallumból vannak, melyből

a tanító adatok vehetik fel értékeiket. Ha a tanító adatoktól nagyon eltérő

értékekkel inicializáljuk a hálózatot, a tanítás több iterációt igényel.

(2) Válasszunk véletlenszerűen a tanító adatok közül. Legyen ez a választás a t.

iterációban 𝑣𝑡.

(3) Keressük meg a 𝑣𝑡-hez legközelebbi neuront a térképen. Ez lesz a BMU.

(4) A térkép (W) minden egyes neuronja esetén módosítsuk a súlyvektorokat a

következő képletek szerint:

𝑊𝑖,𝑗(𝑡 + 1) = 𝑊𝑖,𝑗(𝑡) + (𝑣𝑡 − 𝑊𝑖,𝑗(𝑡)) ∗ 𝜃(𝑡) ∗ 𝛼(𝑡)

𝜃(𝑡) = 𝑒−𝑑

2𝑟

𝑟 = 𝑅𝑒−𝑡𝑇

𝛼(𝑡) = 𝐴𝑒−𝑡𝑇

Ahol: t – aktuális iterációszám

T – iterációk száma

𝑊𝑖,𝑗(𝑡) – a térkép i. sorában és j. oszlopában található neuron súlyvektora

𝑣𝑡 – input vektor a t. iterációban

[14] Kohonen, T., Kaski, S. and Lappalainen, H.: Self-organized formation of various invariant-feature filters in the adaptive-subspace SOM, Neural Computation, 9: 1321-1344, 1997. [15] Kaski, S., Kangas, J., and Kohonen, T.: Bibliography of self-organizing map (SOM) papers: 1981-1997. Neural Computing Surveys, 1: 102-350, 1998.

44

𝜃 – szomszédsági függvény

𝛼 – tanulási ráta

d – a BMU és 𝑊𝑖,𝑗(𝑡) közötti euklideszi távolság a térkép szerint

(síkbeli)

r – aktuális szomszédsági sugár

R – a térkép sugara (a rácsba illeszthető kör sugara)

A – a tanulási ráta kezdeti értéke (tetszőleges lehet)

(5) Ismételjük meg az algoritmust a 2. lépéstől T-szer.

SOM működése színek esetén

Tanítás után a térkép hűen tükrözi az őt alkotó neuronokon keresztül a tanító adatpontok

tulajdonságait, illetve az azok közti kapcsolatokat topologikus módon eltárolja.

Vizsgáljuk meg ezt egy példán keresztül.

Egy olyan Kohonen-hálózatot szeretnénk létrehozni, amely színek betanulására

képes. Legyenek a tanító adatpontjaink olyan háromdimenziós vektorok, melyek

színeket reprezentálnak. Tudjuk, hogy egy adott szín reprezentálható a

színkomponenseinek RGB (Red Green Blue) hármasával. Legyen tehát egy színt

reprezentáló vektor 𝑣 = (𝑅, 𝐺, 𝐵)𝑇, ahol az R, G és B súlyok 0 és 255 közötti egész

értékek. Ennek megfelelően a térkép neuronjai is háromdimenziós vektorokat

tartalmaznak, melyek súlyai egy szín R, G és B értékei.

A térképet megjeleníthetjük oly módon, hogy minden csomópontját egy négyzettel

reprezentáljuk, melynek színe az általa tartalmazott RGB értéknek megfelelő.

Legyen a térképünk egy 40 ∗ 40-es méretű rács, melynek háromdimenziós

súlyvektorait a tanítás kezdetén véletlen módon inicializáljuk, azaz a vektorok súlyai

véletlenszerűen kapnak egy 0 és 255 közötti értéket.

Legyenek a tanító adataink nyolc darab színt (2.7.3 ábra) reprezentáló

háromdimenziós vektorok. A térkép állapota inicializáció után 2.7.4 ábrán látható.

45

2.7.3 ábra – A hálózat tanító adatainak megfelelő színek

2.7.4 ábra – Színeket reprezentáló SOM térkép inicializációja random értékekkel

Tanítás után a térkép topológiája a tanító színeknek megfelelően változik (2.7.5

ábra). Jól látható, hogy a térkép a tanító színeket tükröző területekre bomlik. Egy ilyen

terület „középpontjában” található az illető tanító adathoz tartozó, tanítás során

legtöbbször kiválasztott BMU (Best Matching Unit). A színterületek között átmenetek

figyelhetőek meg, melyek a tanító adatpontok közötti kapcsolatokat tükrözik. Ez azt

jelenti, hogy a térkép nem csak a tanító adatokat reprezentálja, hanem olyan

színértékeket is, melyek a tanító adatokhoz hasonlóak, esetleg két tanító adatpont között

helyezkednek el. Megfigyelhetjük, hogy a színterületek pozíciója sem teljesen

véletlenszerű, hiszen a térkép az adatpontok kapcsolatait is figyelembe véve

szerveződik. Ennek megfelelően például a narancssárga szín minden esetben a sárga és

piros színterületek között fog elhelyezkedni, mint a két szín „keveréke”. Megjegyezzük,

hogy minél nagyobb az iterációszám a tanítás során, annál kevésbé jelennek meg az

átmenetek, azaz a színterületek annál élesebben elhatárolódnak. Vigyáznunk kell tehát,

46

nehogy „túltanítsuk” a hálózatot (overlearning), hiszen ekkor elvész az adatpontok

közötti átmenetek információja és ezzel együtt a neuronhálózat általánosító képessége.

2.7.5 ábra – Színeket reprezentáló SOM térkép tanítás után

Osztályozás SOM segítségével

Vizsgáljuk meg, hogyan használható a SOM önszerveződő térkép az osztályozás

feladatának megoldására. Mint ahogy azt a második fejezet elején említettük, az

osztályozást az különbözteti meg a klaszterezéstől, hogy a klaszterezéssel ellentétben

egy felügyelt csoportosítási feladat, azaz rendelkezünk előzetes információkkal az

adatpontokat illetően. Ilyen információ például, hogy előre tudjuk, milyen csoportokba

akarjuk szervezni az adatpontjainkat.

Tekintsük az előbb bemutatott, nyolc darab színnel betanított SOM térképet. A

neurális hálózat segítségével osztályozni szeretnénk tetszőleges színt a hálózatot

betanító színek nyolc csoportjának valamelyikébe. Egy tanító adat tehát egy osztályt

reprezentál. Ahhoz, hogy ezt megtehessük a tanító adatainknak reprezentáns adatoknak

kell lenniük az osztályozás szempontjából. Tehát az osztályozás során egy zöldes

színárnyalat a „zöld” osztályba kerül, míg egy kékes szín a „kék” osztályába. Ezt a

következőképpen tehetjük meg:

47

1. A hálózatot betanító színekhez megkeressük az azokhoz tartozó legközelebbi

neuront a térképen, azaz a tanító adatok BMU-jait. Ezen pozíciókat eltároljuk.

2. Megkeressük az osztályozandó színhez tartozó legközelebbi neuront a hálón.

Legyen ez 𝐵𝑀𝑈𝑜.

3. Az osztályozandó színt abba az osztályba soroljuk, melyet reprezentáló tanító adat

BMU-ja a térképen legközelebb helyezkedik el 𝐵𝑀𝑈𝑜-hoz.

Egy gyakorlati példa lehet, hogy fényképeket szeretnénk színek szerint osztályozni

az általunk betanított SOM térkép segítségével. Ebben az esetben első dolgunk a

képeket egyetlen színnel reprezentálni, hiszen a SOM térképünk háromdimenziós

vektorként reprezentált színeket vár bemenetként. Legyen a képeket reprezentáló szín a

kép domináns színe. Ezt úgy kaphatjuk meg, hogy statisztikát készítünk a képet

pixelekre lebontva, minden egyes előforduló szín esetén nyilvántartva, hogy az

hányszor szerepelt a képen. Legyen a kép domináns színe a három leggyakrabban

szerepelt szín átlaga. Ezt követően a kép domináns színét osztályozzuk az előbb

bemutatott lépések szerint, ezzel megkapva a képek osztályozását is.

2.7.6 ábra – Képek osztályozás előtt és után

48

A 2.7.6 ábrán jól látható a képek osztályokba szerveződése. Az ábra bal oldalán a

képeket osztályonként egymás után jelenítettük meg, előbb a piros színnek megfelelő

osztályba került képeket, majd a világoszöld, sötétzöld, stb. színűeket.

Klaszterezés SOM segítségével

A klaszter-analízis egy felügyelet nélküli csoportosítási feladat, tehát semmilyen

előzetes információról nem rendelkezünk a klaszterezendő adatpontjainkról. Egy SOM

önszerveződő térkép tekintetében ez azt jelenti, hogy klasztereket reprezentáló

referenciapontokkal sem rendelkezünk, amivel a hálózatot betaníthatnánk. Nincs más

választásunk, mint az klaszterezendő adathalmaz összes pontját tanító adatnak

nyilvánítani és velük betanítani a hálózatot. Ez nem baj, hiszen a SOM térkép képes az

adatpontok tulajdonságait és azok közötti kapcsolatokat egy kétdimenziós rácsban

eltárolni. Ez a rács maga az önszerveződő térkép, mely tekinthető egy

dimenziócsökkentő hálónak is, hiszen az n dimenziós adatpontokat egy kétdimenziós

síkba vetíti le, megőrizve azok tulajdonságait.

Felmerül a kérdés, hogy hogyan lehet a teljes adathalmaz által betanított SOM

neuronhálót a klaszterezési feladat megoldására felhasználni. A válasz viszonylag

egyszerű. Használjuk ki SOM térkép dimenziócsökkentő tulajdonságát, azaz az

adatpontjainkat ne n dimenzióban klaszterezzük, hanem az önszerveződő térkép

kétdimenziós síkjában.

Az első probléma, amivel szembetaláljuk magunkat az, hogy a térkép síkjában

nincsenek olyan neuronok, melyek a tanító adatpontok vektorait tartalmaznák. Ezt

könnyen kiküszöbölhetjük úgy, hogy azt a térképen elhelyezkedő neuront választjuk a

tanító adatpont reprezentánsának, ami a legközelebb áll hozzá, azaz az ő BMU-ját. Ily

módon minden tanító adatpontot hozzákapcsoltunk a térkép egy neuronjához. Tudjuk,

hogy a hálózat tanítása után, elegendő tanítási iterációszám esetén a tanuló adatpontok

szinte teljesen megegyeznek BMU-jaikkal, hiszen a tanítás során a BMU minden

iterációban közeledik a tanító adatponthoz.

Miután minden klaszterezendő adatponthoz hozzárendeltük annak BMU-ját, nincs

más dolgunk, mint a térkép síkjában klaszterezni a BMU-kat, ezzel megkapva a nagy

dimenziós adatpontok klaszterezését is. Ez a síkbeli klaszterezés bármilyen eddig

bemutatott klaszterezési algoritmussal történhet.

49

Megjegyezzük, hogy a térkép méretének megfelelő megválasztása, illetve a tanítás

iterációszáma kulcsfontosságú lehet a klaszterezés eredményét illetően. Ha túl

nagyméretű térképet választunk, azaz sokkal több neuronból áll a térkép, mint ahány

adatpontunk van, akkor a helyes eredményhez nagyobb tanítási iterációszám szükséges.

Ha jóval kevesebb a neuronok száma az adatpontok számánál, akkor egy neuronhoz sok

adatpont kapcsolódhat a BMU neuronok által. Ez problémát okozhat akkor, ha ezek az

adatpontok nem ugyanazon klaszter elemei, hiszen a síkbeli klaszterezés már nem képes

őket szétbontani.

A SOM klaszterező algoritmus pszeudokódja a következő:

1. Tanítsuk be a hálózatot a klaszterezendő adatpontokat használva tanító

adathalmazként;

2. Keressük meg az adatpontokhoz tartozó BMU-kat. Legyenek ezek n darab

adatpont esetén rendre 𝐵𝑀𝑈1, 𝐵𝑀𝑈2, … , 𝐵𝑀𝑈𝑛;

3. Reprezentáljuk minden BMU-t egy síkbeli ponttal, ahol a pont koordinátái a

BMU pozíciójának sor-, illetve oszlopindexe a térképen. Legyenek ezek a

pontok rendre 𝑝1, 𝑝2, . . , 𝑝𝑛.

4. Klaszterezzük az eddig bemutatott klaszterező algoritmusok valamelyikével a

𝑝1, 𝑝2, . . , 𝑝𝑛 pontokat az egyszerű síkbeli euklideszi távolságfogalmat

felhasználva.

5. A kapott klaszterezésnek megfelelően megkaptuk az az adatpontok

klaszterezését is, hiszen a 𝑝𝑖 síkbeli pont klasztere az i. adatpont klasztere is

egyben.

50

3 Klaszterezés alkalmazása a képfeldolgozásban

A számítógépes képfeldolgozás az informatikának manapság igen nagy hangsúllyal

rendelkező területe. Ez ma már nem csak a tudományos célokra használt

képprocesszálásban merül ki, hiszen egyre nagyobb teret kap a mindennapi felhasználás

is. A fényképezőgéppel felszerelt mobil eszközök megjelenésének köszönhetően

hatalmas képmennyiség keletkezik, melynek jelentős része az interneten is közzétett.

Ezen fényképek feldolgozása és megfelelő rendszerezése egyre nagyobb kihívást jelent.

A digitális képek feldolgozása tágabb értelemben tekinthető a jelfeldolgozás egy

ágának is, ahol egy fényképet, mint kétdimenziós jelet dolgozunk fel. Egy digitális

fényképet a legtöbb esetben pixelek mátrixának tekintünk.

Egy gyakorlati feladat lehet képfeldolgozás során, hogy adott képhez hasonló

képeket szeretnénk keresni, illetve képek egy halmazát szeretnénk csoportosítani

(klaszterezni) bizonyos szempontok szerint. Ebben a fejezetben azt vizsgáljuk, hogy

hogyan alkalmazhatóak az eddig bemutatott klaszterező algoritmusok ezen feladatok

megoldására.

3.1 Képek vektoros reprezentációja

Mielőtt képekre alkalmazhatnánk algoritmusainkat, előbb azokat reprezentálnunk kell

egy tulajdonságvektorral (feature vector). Ezen vektorok lesznek az adatpontok az

algoritmusok számára. A tulajdonságvektornak tükröznie kell, hogy milyen szempontok

szerint szeretnénk vizsgálni a képeket. Ilyen szempont lehet például a kép domináns

színe vagy textúra-hisztogramja. Minél részletesebben és minél több szempont alapján

vizsgájuk a képet, annál nagyobb dimenziójú lesz a tulajdonságvektor.

Egy képről különböző adatokat gyűjthetünk. Ezek lehetnek a kép egészére kiterjedő

adatok (hisztogram), illetve csak a kép adott területére kiterjedő adatok (terület átlagok).

Mindkét esetben vizsgálhatjuk a képet szín, illetve textúra szerint is. Színek esetén a

képek pixeleinek színkomponenseit, azok RGB (Red Green Blue) értékét vesszük

figyelembe. Mindhárom színkomponenst egy 0 és 255 közötti egész szám reprezentál.

51

Mielőtt elkezdenénk a képekről adatokat gyűjteni, az egységes feldolgozás

érdekében 50 ∗ 50 pixelméretűre skálázzuk őket. Ennek megvalósítására a legtöbb

programkönyvtár beépített támogatást nyújt.

Szín-hisztogram esetén a tulajdonságvektor kinyerése a következőképpen történik.

A kép pixeleit színkomponensekre (RGB) lebontva különböző csoportokba soroljuk.

Minden egyes színkomponensre 16 csoportot hozunk létre (16 ∗ 16 = 256). Egy

színkomponens összesen 256 értéket vehet fel 0 és 255 között. Minden egyes pixel

színkomponensét a 16 csoport egyikébe soroljuk. Ha a színkomponens értéke 𝑒, akkor

őt az 𝑒/16 sorszámú csoportba tesszük, növelve annak elemszámát. A „/” egész osztást

jelent. Az első csoportba kerülnek tehát a nullához közeli értékek, a 16.-ba pedig a 255-

höz közeliek. Legyen az térkép adott színkomponensre vonatkozó tulajdonságvektora a

csoportok számosságait tartalmazó 16 dimenziós vektor. Mivel egy pixel színe három

színkomponensből áll, így a képet reprezentáló szín-hisztogram tulajdonságvektor egy

16 ∗ 3 = 48 dimenziós vektor.

Vizsgáljuk meg, hogyan számolhatjuk ki egy kép textúráját. A textúra azt méri,

hogy a kép pixelei mennyire különböznek az őket körülvevő pixelektől, azaz mennyire

változatos (zajos) a kép. Első lépésben a képet szürkeárnyalatossá tesszük, hiszen

textúra szempontjából a színeknek jelentősége elhanyagolható. Egy pixel

szürkeárnyalata (gray scale) a következőképpen számolható az RGB értékből:

𝑔𝑟𝑎𝑦 𝑠𝑐𝑎𝑙𝑒 = ⌊𝑅 ∗ 0.3 + 𝐺 ∗ 0.59 + 𝐵 ∗ 0.11⌋

Megjegyezzük, hogy a szürkeárnyalat is egy 0 és 255 közötti érték.

Egy szürkeárnyalatos kép adott pixelének textúrája legyen az őt körülvevő pixelek

közötti legnagyobb eltérés, tehát a szomszédai közötti legnagyobb szürkeárnyalat és

legkisebb szürkeárnyalat különbsége. Ez is egy 0 és 255 közötti egész érték.

A kép textúra-hisztogramot tükröző tulajdonságvektorát a színkomponensek

tulajdonságvektoraihoz hasonlóan kaphatjuk meg. A pixeleket 16 csoportba tesszük,

textúráiknak megfelelően. Ha a pixel textúrája 𝑡, akkor a 𝑡/16-odik csoportba kerül. Az

első csoportba a legalacsonyabb textúrájú pixelek kerülnek, míg az utolsóba a

legmagasabb textúrával rendelkezők. A tulajdonságvektor egy 16 dimenziós vektor lesz,

mely a csoportok számosságait tartalmazza.

52

Területi átlagok számolása esetén a képet 𝑛 ∗ 𝑛 egyenlő részre osztjuk (lásd 3.1.1

ábra). A tulajdonságvektor ezen területekre vonatkozó átlagokból áll. Textúra esetén ez

egy 𝑛 ∗ 𝑛 dimenziós tulajdonságvektort eredményez, melynek elemei a területek pixel-

textúráinak átlaga, szín esetén pedig egy 𝑛 ∗ 𝑛 ∗ 3 dimenziós vektor, mely a területek

átlagszíneit reprezentálja (egyszerű számtani közép színkomponensenként).

3.1.1 ábra – Kép felosztása 3*3 egyenlő részre területi átlag számolása esetén

Egy kép egészét reprezentáló tulajdonságvektor az előbb bemutatott

tulajdonságvektorok valamelyike, esetleg azok konkatenációja, attól függően, hogy

milyen tulajdonságokkal szeretnénk reprezentálni az adott képet.

3.2 SOM felhasználása a képfeldolgozásban

A 2.7.2 fejezetben tárgyaltaknak megfelelően az önszerveződő térkép kiválóan kezeli a

nagy dimenziós adatokat, így a képeket reprezentáló tulajdonságvektorokat is, melyek

akár százas nagyságrendű dimenziószámot is elérhetnek.

Tegyük fel, hogy az a feladatunk, hogy adott mintaképhez hasonló képeket

keressünk egy képadatbázisban. Ennek a feladatnak a megoldására a SOM neurális

hálózat használata kézenfekvőnek tűnik, hiszen az képes a képeket egy kétdimenziós

rácsszerkezetben eltárolni, melyben a keresés már egyszerű feladattá válik. A feladat

megoldásához a következőket kell tennünk:

Tanítsuk be a hálózatot az adatbázis képeiből kinyert tulajdonságvektorokkal;

53

Keressük meg minden egyes tanító adat BMU-ját a térképen. Legyenek ezek n darab

tanító adat esetén 𝐵𝑀𝑈1, 𝐵𝑀𝑈2, … , 𝐵𝑀𝑈𝑛;

A mintakép (amihez hasonló képeket keresünk) tulajdonságvektorához tartozó

BMU-t keressük meg a térképen. Legyen ez 𝐵𝑀𝑈𝑚;

Keressük meg a térképen a 𝐵𝑀𝑈𝑚-hez legközelebbi k darab BMU-t a

𝐵𝑀𝑈1, 𝐵𝑀𝑈2, … , 𝐵𝑀𝑈𝑛 közül. Ezek reprezentálják majd a mintaképhez hasonló

képeket, azaz a 𝐵𝑀𝑈𝑗 a j. képet reprezentálja a képhalmazból.

A pontos eredmény elérésének érdekében fontos, hogy az képadatbázis méretének

megfelelően válasszuk meg a térkép méretét. Mivel nagydimenziós adatokkal

dolgozunk, előnyösebb a térképet minél nagyobb méretűre állítani, hiszen az adatpontok

közötti átmenetek fontos szerepet játszanak. Minél nagyobb az adatok dimenziója, annál

nagyobb térkép használata javasolt. Például egy 40 darab képet tartalmazó adatbázis

esetén legalább 10 ∗ 10-es térkép ajánlott a pontos eredmény eléréséhez kizárólag szín-

hisztogram tulajdonságvektorokat használva.

3.2.1 ábra – Mintaképhez hasonló képek keresése (1)

A 3.2.1 ábrán a baloldali mintaképhez sorban a három legközelebbi kép látható. A

képek tulajdonságvektorait szín-hisztogram és szín terület-átlaggal nyertük 3 ∗ 3-as

képfelosztással. Megjegyezzük, hogy a mintakép nem szükséges az adatbázis része

legyen.

3.2.2 ábra – Mintaképhez hasonló képek keresése (2)

54

A 3.2.2 ábrán a baloldali képhez sorban a hat legközelebbi kép látható. A

mintaképp egy igen magas textúrájú kép a zebra csíkjainak, valamint a háttér

zajosságának köszönhetően, ezért ajánlott a textúra-hisztogram, illetve a textúra terület-

átlag használata is a képek tulajdonságvektorainak kinyerésénél. A példában egy 20 ∗

20-as SOM térképet alkalmaztunk 1000 iterációszámmal 40 képet tartalmazó adatbázis

esetén.

Megjegyezzük, hogy a tulajdonságvektorok kinyeréséhez, valamint a SOM

neuronhálózat méretéhez ideális beállítások nincsenek, hiszen ezek az aktuális

képadatbázistól függenek. Minden adatbázishoz, a képek változatosságától függően más

és más, egyedi beállítások szükségesek, melyeket empirikus úton találhatunk meg.

A SOM önszerveződő térképek képek klaszterezésére is jól használhatóak. Ezt a

következő alfejezetben tárgyaljuk.

3.3 Képek klaszterezése

Ebben a fejezetben egy gyakorlati példára való alkalmazhatóságát vizsgáljuk néhány

eddig bemutatott klaszterezési algoritmusnak. A megoldandó feladat nem más, mint egy

képadatbázis elemeinek klaszterezése bizonyos képjellemzők szerint. Ezen jellemzőket

a képeket reprezentáló tulajdonságvektorok tartalmazzák, melyeket a 3.1 fejezetben

mutattunk be részletesen. A klaszterezendő adatpontjaink tehát ezek a

tulajdonságvektorok, melyek képekből való kinyerési módja jelentős módon

befolyásolja a klaszterezés eredményét.

A képek klaszterezésének legalkalmasabb módszere a SOM neurális hálózat általi

megközelítés. Ez nem véletlen, hiszen az önszerveződő térkép ereje pont abban rejlik,

hogy nagy dimenziós adatok – jelen esetben képek tulajdonságvektorai – közötti

hasonlóságokat síkbeli pontokba szervezve képes eltárolni. Ezen síkbeli pontok a

képekhez tartozó legközelebbi neuronok, a térkép BMU neuronjai.

Alkalmazzuk a képek tulajdonságvektoraival betanított SOM neurális hálózatot

klaszterezésre a 2.7.2 fejezetben bemutatott algoritmus szerint. Az térkép síkjában a

BMU neuronok klaszterezéséhez bármelyik eddig bemutatott klaszterezési algoritmus

alkalmazható. A 3.3.1 ábrán a képadatbázis néhány klasztere látható egyszerű

hierarchikus felhalmozó klaszterezési algoritmust használva, mint a SOM klaszterező

módszer belső algoritmusa. A klaszterek külön sorban helyezkednek el. A térkép mérete

55

7 ∗ 7-es, 1000 iterációval betanítva. A képek tulajdonságvektorainak kinyerésénél szín-

hisztogramot, 4 ∗ 4-es felosztású szín terület-átlagot, valamint 3 ∗ 3-as felosztású

textúra terület-átlagot használtunk. Jól látható, hogy a terület átlagoknak köszönhetően a

program felismeri, ha a képek például azonos háttérrel rendelkeznek. Ennek

köszönhető, hogy a fehér háttérrel rendelkező képek egymáshoz közeli klaszterekbe

kerülnek (első két sor). Ha a felhalmozó algoritmus bemeneti paramétere (klaszterszám)

kisebb, ezek a képek azonos klaszterbe kerülnek, hiszen az algoritmus egyesíti őket,

mint két közeli klasztert.

3.3.1 ábra – SOM klaszterezés hierarchikus felhalmozó algoritmussal

A 3.3.2 ábrán az előbbihez teljesen hasonló beállítások mellett látható a SOM

klaszterezés egy részlete k-közép algoritmus használatával. Mivel a k-közép algoritmus

könnyen egy lokális minimumba ragadhat, ezért a helyes klaszterezés érdekében

érdemes többször lefuttatni azt, kiválasztva az eredmények közül a legjobbnak tűnőt.

3.3.2 ábra – SOM klaszterezés k-közép algoritmust használva

56

A következőkben vizsgáljuk meg, hogyan alkalmazhatóak a klaszterező

algoritmusok „natív” módon a képadatbázis klaszterezésére. „Natív” mód alatt azt

értjük, hogy az algoritmusok számára klaszterezendő pontok maguk a képeket

reprezentáló tulajdonságvektorok, azaz nem használunk egy dimenziócsökkentő SOM

neuronhálózatot.

A legjobb eredményt a k-közép algoritmus használatával érhetjük el, ami nem

véletlen, hiszen az jól használható magas dimenziójú adatpontok esetén is. Hátránya

viszont a lokális minimumba ragadáson kívül, hogy a kívülálló pontokat is a

klaszterekhez sorolja. A 3.3.3 ábrán egy ilyen klaszterezés részletét láthatjuk. Az alsó

képsornak megfelelő klaszterbe, a kék domináns színű képek közé egy ilyen kívülálló,

„sárga” kép került.

3.3.3 ábra – Képek klaszterezése k-közép algoritmussal

A hierarchikus lebontó algoritmus a k-közép algoritmushoz hasonlóan működik,

hiszen annak implementációjában a k-közép algoritmus segítségével vágjuk ketté a

klasztereket.

Hierarchikus felhalmozó algoritmus esetén a klaszterezés felettébb érzékeny a

kívülálló pontokra, hiszen ezek miatt akár két teljesen különböző klaszter is egyesülhet.

Erre láthatunk példát a 3.3.4 ábrán, ahol az alsó két sorban levő klaszterek erősen eltérő

képeket is tartalmaznak.

57

3.3.4 ábra – Képek klaszterezése hierarchikus felhalmozó algoritmussal

A sűrűség alapú klaszterezés rosszul működik váltakozó sűrűségű klaszterek esetén,

mely egy képadatbázis esetén gyakran előfordulhat. Ebben az esetben az algoritmus a

bemeneti paramétereinek értékeitől függetlenül rosszul működik. A másik problémát az

adatpontok magas dimenziószáma okozza, hiszen emiatt a paraméterek (szomszédsági

sugár és sűrűségi korlát) megfelelő értékei nehézkesen, empirikus úton határozhatóak

meg.

58

4 Klaszterezést bemutató demóprogram

4.1 Felhasználói dokumentáció

4.1.1 A rendszer rövid ismertetése

Az általunk készített demóprogram egy grafikus felületen keresztül lehetőséget nyújt az

eddig bemutatott klaszterező algoritmusok működésének szemléltetésére síkbeli

adatpontok esetén. Minden algoritmus tetszőlegesen paraméterezhető különböző

vezérlők segítségével. Lehetőségünk van a klaszterezendő adatpontok generálására,

valamint azok tetszőleges szerkesztésére.

A rendszer az algoritmusok működésének bemutatásán túlmenően lehetőséget

biztosít a klaszterezés egy speciális felhasználásának szemléltetésére a számítógépes

képfeldolgozásban. Ez nem más, mint digitális képek csoportosítása (klaszterezése)

bizonyos szempontok szerint.

4.1.2 Rendszerkövetelmények

A rendszer használatához alapvető szoftverkövetelményként meg kell említenünk a

Microsoft Windows operációs rendszert, valamint a .NET keretrendszer 4.5-ös

verzióját. Hardverkövetelmények tekintetben legalább 1.6 Ghz-es órajelű processzor és

1 GB RAM memória ajánlott, mindemellett szükségünk van a programot tartalmazó

DVD olvasásához szükséges optikai meghajtóra.

4.1.3 Üzembe helyezés

A program telepítése az adathordozón található Setup.exe telepítő-fájl segítségével

történik. A futtatható fájl megnyitásával elindul egy telepítési varázsló, mely végigvezet

minket a telepítési lépéseken. Kiválaszthatjuk a telepítés célmappáját, illetve

beállíthatjuk, hogy szeretnénk-e a program számára gyorsindító ikont az asztalra, illetve

az operációs rendszer Start menüjébe. Telepítés során a program forráskódja mellett, a

rendszer által használt képek, valamint egy minta képadatbázis (LearningData) is a

telepítési mappába kerül. Telepítés után nincs más dolgunk, mint az asztal vagy a Start

menü ikonjára kattintva használatba venni a programot.

59

4.1.4 A program használata

A futtatható állomány (Klaszter.exe) elindításával megjelenik az alkalmazás főablaka,

melynek fő része egy TabControl vezérlőelem. Ez három „lapból” áll, a program

funkcióinak megfelelően. Az első lapon az algoritmusok működését vizsgálhatjuk, a

másodikon a SOM neurális hálózat működését elemezhetjük színek esetén, míg a

harmadik lapon képadatbázisokat klaszterezhetünk. A TabControl „nyomógombjaira”

kattintva tetszőlegesen váltogathatunk a lapok között (4.1.1 ábra).

4.1.1 ábra – Program funkcióinak megfelelő TabControl vezérlőelem

A program indításakor alapértelmezett módon az első, algoritmusok vizsgálatára

lehetőséget nyújtó lap jelenik meg (4.1.2 ábra).

4.1.2 ábra – Alkalmazás főablaka indításkor (Algoritmusok lap)

Az ablak fő része egy kétdimenziós koordináta rendszer, mely a klaszterezni kívánt

adatpontok megjelenítésére szolgál. A jobb oldalon az algoritmusok működtetésére

60

szolgáló vezérlőelemek találhatóak, algoritmus-típusok szerint csoportosítva. A legalsó

csoportban találhatóak az adatpontok szerkesztésére vonatkozó vezérlők (4.1.3 ábra).

4.1.3 ábra – Adatpontok szerkesztésére vonatkozó vezérlőelemek

Lehetőségünk van a koordinátarendszerre tetszőleges adatpontot elhelyezni

egérkattintással, ha a „Szerkesztés” CkeckBox ki van jelölve. Ezen túlmenően

lehetőségünk van ponthalmazok generálására is. Egy ponthalmaz generálása mindig

adott pont köré történik. Összesen négyféle ponthalmazt generálhatunk az első,

legördülő menü vezérlőelem beállításától függően. Ezen ponthalmazok az őket

tartalmazó pontok elhelyezkedésében különböznek. A pontok elhelyezkedésével a

normális eloszlást próbáltuk közelíteni. Az első egy sugárirányba tetszőleges távolságra

szétszórt pontok halmaza, a második a középpont körül adott távolágra elhelyezkedő

köríveken véletlenszerűen szétszórt pontokat tartalmaz. A harmadik ponthalmaz az

elsőhöz hasonló, azzal a különbséggel, hogy kevésbé távol szóródtak a pontok a

középponttól, a negyedik pedig a középpont körüli adott körív mentén szórt pontokból

áll. Ezen pontgenerálási módszerek eredménye rendre balról jobbra haladva a 4.1.4

ábrán látható.

A „Generál” feliratú nyomógombra kattintva k darab, a koordinátarendszerben

véletlenszerűen elhelyezett ponthalmazt generálhatunk. Ezt a k darabszámot a főablak

legelső vezérlőelemének segítségével adhatjuk meg. Ez egy csak pozitív egész

számokat megengedő NumericUpDown vezérlő (4.1.5 ábra), mely egyúttal bizonyos

algoritmusok klaszter-darabszám bemenő paraméterét is beállítja.

61

4.1.4 ábra – Pontgenerálási módszerek

4.1.5 ábra – k darabszám beállítása

Lehetőségünk van egy ponthalmaz generálására adott pont köré is. Ez a pont mindig

a legutolsó, koordináta rendszerre felhelyezett pont. Ez természetesen kattintással is

felhelyezhető. A generált ponthalmaz típusa a legördülő menünek megfelelő. Ezt az

„1db klasztert generál” feliratú nyomógombbal tehetjük meg.

A „Törlés” nyomógombra kattintva törölhetjük a pontokat a koordináta rendszerből,

a „Nézet optimalizálás” feliratú nyomógomb pedig a koordinátarendszert az x és y

tengely mentén egyaránt a [-600, 600] intervallumom belül jeleníti meg. Ennek

szükségessége azzal indokolt, hogy a felhasználó az egér segítségével kijelölhet és

ránagyíthat adott területre a koordináta rendszerben, azaz változtathatja annak

méretezését.

A klaszterezési algoritmusok futtatása után az adatpontok színe megváltozik. A

futtatás eredményének megfelelően az azonos klaszterbe tartozó adatpontok azonos

színűvé válnak (4.1.6 ábra).

62

4.1.6 ábra – Klaszterezés eredménye

A „k-közép” feliratú gombra kattintva a k-közép klaszterező algoritmust futtathatjuk

le az adatpontokra. Az algoritmus klaszterszám paramétere a 4.1.5 ábrán látható

vezérlő segítségével állítható. Ez a hierarchikus algoritmusok bemenő paramétere

(megállási feltétele) is egyben.

A hierarchikus klaszterező algoritmusok esetében lehetőségünk van lépésenkénti

futtatásra is, ha be van jelölve a „Lépésenként” feliratú CheckBox vezérlő (4.1.7 ábra).

4.1.7 ábra – Hierarchikus klaszterező algoritmusok vezérlői

A sűrűség alapú klaszterező algoritmusok vezérlőinek csoportja a 4.1.8 ábrán

látható. A „Sugár”, illetve „Sűrűség korlát” feliratú TextBox vezérlők segítségével

adhatjuk meg a DBSCAN és OPTICS algoritmusok bemenő paramétereit. A „DBScan”

feliratú nyomógombra kattintva lefut a DBSCAN algoritmus és megjelenik annak

eredménye a koordinátarendszerben. Az „OPTICS” nyomógombra kattintva felépül a

háttérben az adatpontok sűrűség szerinti rendezett sorozata (kimeneti adatszerkezet) az

63

előbb említett paramétereknek megfelelően, illetve megjelenik az azoknak megfelelő

DBSCAN klaszterezés is. Az „OPTICS újra” feliratú gombra kattintva ezen

adatszerkezet segítségével megkapható az összes olyan sűrűség alapú DBSCAN

klaszterezés, mely az eredeti bemenő paraméterhez képest kisebb szomszédsági sugárral

operál. Ezt a sugarat a nyomógombtól balra található TextBox vezérlő segítségével

állíthatjuk.

4.1.8 ábra – Sűrűség alapú algoritmusok vezérlői

Az tervezésnél ügyeltünk az adatbeviteli hibák kezelésére is. Helytelen adatbevitel

esetén a program hibát jelez (4.1.9 ábra).

4.1.9 ábra – Hibás adatbevitel

Rács alapú klaszterező algoritmus esetén egyedüli bemenő paraméter a rács

felosztásának mérete. Ez a „Rács felosztása” címkéjű TextBox vezérlővel állítható

(4.1.10 ábra). A „GRIDCLUS” feliratú nyomógombra kattintva lefut az algoritmus és

megjelenik az eredmény a koordinátarendszerben.

4.1.10 ábra – Rács alapú klaszterező algoritmus vezérlői

A TabControl második, „SOM” feliratú lapján az önszerveződő térkép tanítását

vizsgálhatjuk színeket reprezentáló bemenő adatokra. Az lap bal oldalán található a

64

színek vektorait tartalmazó neuronokból álló 40 ∗ 40-es méretű önszerveződő térkép,

mely kezdetben véletlenszerű értékekkel van feltöltve (4.1.11 ábra).

4.1.11 ábra – Alkalmazás „SOM” lapja indításkor

A „SOM tanítás” feliratú gombra kattintva a térképet 8 darab színnel betanítjuk

1000 iterációszámmal. Ezen tanító adatok tanítás utáni BMU neuronjaink színei (maguk

a tanító színek is egyben) a térkép alatt láthatóak.

Az „Osztályoz” feliratú nyomógomb lenyomásával az ablak jobb oldalán található

képeket osztályozhatjuk domináns színük szerint, az önszerveződő térkép segítségével,

az azt betanító színeknek megfelelően. Egy osztályozás utáni állapot a 4.1.12 ábrán

látható.

65

4.1.12 ábra – Alkalmazás „SOM” lapja osztályozás után

A TabControl harmadik lapján képadatbázisok klaszterezését valósíthatjuk meg

különböző klaszterezési algoritmusok segítségével, valamint adott képhez hasonló

képeket kereshetünk. Az első, „Vektorok betöltése” feliratú vezérlőcsoport (GroupBox)

a képek betöltéséért felel (4.1.13 ábra). A „Képek betöltése” nyomógombra kattintva

kiválaszthatunk egy képeket tartalmazó mappát, ami a felhasznált képadatbázisként

szolgál (4.1.14 ábra). Az alkalmazás könyvtárában található egy erre célra szolgáló

minta képadatbázis a „LearningData” nevű mappában. A „Feature-vektorok” feliratú

gomb segítségével az előbb betöltött képadatbázis képeiből tulajdonságvektorokat

nyerhetünk ki az erre vonatkozó vezérlők beállításainak megfelelően. Színhisztogramot

a program automatikusan gyűjt a képekből. A szín terület-átlag felosztását a

„Képfelosztás” címkéjű NumericUpDown vezérlővel állíthatjuk. Textúra hisztogram,

illetve egy 3 ∗ 3-as felosztású textúra terület-átlag kinyerése az ezeknek megfelelő

CheckBox vezérlők megjelölésével történik.

66

4.1.13 ábra – Képek betöltéséért felelő vezérlők

4.1.14 ábra – Képadatbázis kiválasztása

A képek tulajdonságvektoraival betanítható SOM önszerveződő térkép beállítása a

4.1.15 ábrán látható vezérlők segítségével történik. A „SOM tanítás” feliratú gombra

kattintva betaníthatjuk a hálózatot.

4.1.15 ábra – SOM tanítása

A SOM neurális hálózat betanítása után adott mintaképhez hasonló képet is

kereshetünk a képadatbázisból. A mintakép nem szükséges a tanító adathalmaz része

legyen. A „Kép választása” feliratú nyomógomb segítségével kiválaszthatunk egy

tetszőleges képet a számítógépről. Ez a kép a nyomógomb jobb oldalán meg is jelenik.

67

A „Hasonló képek” gombra kattintva megjelenik a „Darabszám” címkéjű vezérlő

értékének megfelelő darabszámnyi, a mintaképhez legjobban hasonlító kép az

adatbázisból. Ezek a nyomógomboktól jobbra elhelyezett panelen jelennek meg (4.1.16

ábra).

4.1.16 ábra – Hasonló képek keresése

A 4.1.16 ábrán a képadatbázis klaszterezéséért felelős vezérlők is láthatóak. Ezek a

„Képek klaszterezése” feliratú vezérlőcsoport (GroupBox) elemei. A „SOM felhalm.”

feliratú nyomógomb a SOM önszerveződő térképet használó hierarchikus felhalmozó

algoritmust valósítja meg, a „SOM k-közép” feliratú pedig ugyanezt a k-közép

algoritmust használva a térkép síkjában. Lehetőségünk van a térkép minden egyes

neuronjához kapcsolt adatbázisbeli képnek a megjelenítésére külön sorokban. Ebben az

esetben minden, adott neuronhoz tartozó képek külön klasztert alkotnak. Ezt a „SOM

neurononként” feliratú nyomógombra való kattintással tehetjük meg.

A képek tulajdonságvektoraira vonatkozó natív klaszterező algoritmusok is

futtathatóak a demóprogramban. A „k-közép” feliratú gombra kattintva a k-közép

algoritmus a „Klaszterszám” címkéjű vezérlőnek megfelelő bemeneti paraméterrel

futtatható. Hasonló módon hierarchikus felhalmozó és hierarchikus lebontó

algoritmusok is futtathatóak rendre a „Felhalmozó”, illetve a „Lebontó” feliratú

nyomógombok segítségével. A „DBScan” feliratú nyomógombra való kattintással a

DBSCAN, sűrűség alapú algoritmus futtatható. Ennek bemenő paraméterei a „Sugár”,

illetve „Sűrűség korlát” címkéjű vezérlőkkel állíthatók.

A klaszterező algoritmusok eredménye az ablak alsó felében elhelyezett panelen

jelenik meg. Egy új klaszter mindig új sorban kezdődik (4.1.17 ábra).

68

4.1.17 ábra – Klaszterezés eredménye

4.2 Megvalósítás

A demóprogramot C# nyelven, a .NET keretrendszer támogatásával valósítottuk

meg, Windows Forms könyvtárszerkezeten alapuló klienstechnológia segítségével. Az

implementáció során igyekeztünk minél jobban kihasználni a C# programozási nyelv

fejlett nyelvi elemeit, valamint törekedtünk a kód minél könnyebb átláthatóságának

fenntartására. Ennek érdekében magyarázatokkal, megfelelő tördelésekkel segítettük a

kód egyszerűbb megértését és olvashatóságát.

A megvalósítás során szükségünk volt a ZedGraph[16] nevű, nyílt forráskódú

könyvtárra, mely egy, különböző grafikonok megjelenítését támogató könyvtár. Ennek

segítségével rajzoltuk ki síkbeli koordinátarendszerbe az adatpontjainkat. A ZedGraph

könyvtár az LGPL (Lesser General Public Licence) jogvédelem alatt áll.

[16] http://sourceforge.net/projects/zedgraph/ - 2014.05.10

69

5 Irodalomjegyzék

[1] Iványi Antal (Szerk.): Informatikai algoritmusok 2. , ELTE Eötvös Kiadó Kft.,

Budapest 2005, [768], ISBN 9789634637752.

[2] Jiawei Han – Micheline Kamber: Adatbányászat koncepciók és technikák, Panem

Könyvkiadó Kft., 2004, [532], ISBN 9789635453948.

[3] Martin Ester, Hans-Peter Kriegel, Jörg Sander, Xiaowei Xu: "A density-based

algorithm for discovering clusters in large spatial databases with noise",

Proceedings of the Second International Conference on Knowledge Discovery and

Data Mining (KDD-96). AAAI Press. pp. 226–231. ISBN 1-57735-004-9, 1996.

[4] Mihael Ankerst, Markus M. Breunig, Hans-Peter Kriegel, Jörg Sander: "OPTICS:

Ordering Points To Identify the Clustering Structure". ACM SIGMOD international

conference on Management of data. ACM Press. pp. 49–60, 1999.

[5] Hinneburg A., Keim D.: “An Efficient Approach to Clustering in Large Multimedia

Databases with Noise”, Proc. 4th Int. Conf. on Knowledge Discovery & Data

Mining, New, York City, NY, 1998.

[6] Aidong Zhang, University at Buffalo, The State University of New York,

http://www.cse.buffalo.edu/faculty/azhang/cse601/, 2014.05.10

[7] Erich Schikuta: „Grid-Clustering: A Fast Hierarchical Clustering Method for Very

Large Data Sets”, Center for Research on Parallel Computation, Proceedings of the

13th International Conference on Pattern Recognition Volume IV, Track D: Parallel

and Connectionist Systems: 101-105 vol 2. DOI: 10.1109/ICPR.1996.546732,

1993.

[8] K.H. Hinrichs: The grid file system: implementation and case studies of

applications, Diss, ETH Nr. 7734, Zurich, 1985.

[9] H. Hromada: The GRIDCLUS data analysis system, diploma thesis Univ. Vienna,

Vienna, 1989.

[10] Horváth Gábor: Neurális hálózatok, Hungarian Edition Panem Könyvkiadó Kft.,

Budapest 2006, [447], ISBN 963545464-3.

70

[11] Kohonen, T.: The self-organizing map, Helsinki University of Technology, Espoo

Sep, ISSN: 0018-9219, Digital Object Identifier: 10.1109/5.58325, 1990.

[12] Kohonen, T.: Self-organized formation of topologically correct feature maps,

Biological Cybernetics, 43:59-69, 1982.

[13] Kohonen, T.: Self-Organizing Maps, Third, extended edition, Springer, 2001.

[14] Kohonen, T., Kaski, S. and Lappalainen, H.: Self-organized formation of various

invariant-feature filters in the adaptive-subspace SOM, Neural Computation, 9:

1321-1344, 1997.

[15] Kaski, S., Kangas, J., and Kohonen, T.: Bibliography of self-organizing map (SOM)

papers: 1981-1997. Neural Computing Surveys, 1: 102-350, 1998.