GYAKORI RÉSZGRÁFOK KERESÉSE HÁLÓZATOKON

Hasonló dokumentumok
Gyakori elemhalmazok kinyerése

Gyakori elemhalmazok

Gyakori elemhalmazok és asszociációs szabályok

Gráfelméleti alapfogalmak

Diszkrét matematika 2.C szakirány

KOVÁCS BÉLA, MATEMATIKA I.

Diszkrét matematika 2.C szakirány

Gráfelméleti feladatok. c f

Diszkrét matematika 2. estis képzés

Diszkrét matematika 2.C szakirány

Adatszerkezetek 2. Dr. Iványi Péter

GRÁFELMÉLET. 7. előadás. Javító utak, javító utak keresése, Edmonds-algoritmus

Gráfelmélet. I. Előadás jegyzet (2010.szeptember 9.) 1.A gráf fogalma

III. Gráfok. 1. Irányítatlan gráfok:

Diszkrét matematika 1. estis képzés

Algoritmuselmélet. Mélységi keresés és alkalmazásai. Katona Gyula Y.

Gráfok, definíciók. Gráfok ábrázolása. Az adott probléma megoldásához ténylegesen mely műveletek szükségesek. Ábrázolások. Példa:

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2. estis képzés

Diszkrét matematika 2.C szakirány

EGYSZERŰ, NEM IRÁNYÍTOTT (IRÁNYÍTATLAN) GRÁF

22. GRÁFOK ÁBRÁZOLÁSA

Diszkrét matematika 2.

Diszkrét matematika 2. estis képzés

Struktúra nélküli adatszerkezetek

Diszkrét matematika 2. estis képzés

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Diszkrét matematika 2.

30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK

Diszkrét matematika 2. estis képzés

KOVÁCS BÉLA, MATEMATIKA I.

Általános algoritmustervezési módszerek

1. tétel - Gráfok alapfogalmai

Diszkrét matematika 2.C szakirány

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

Diszkrét matematika 1. estis képzés

Algoritmusok bonyolultsága

Elemi adatszerkezetek

INFORMATIKA javítókulcs 2016

Amortizációs költségelemzés

Algoritmusok és adatszerkezetek gyakorlat 07

19. AZ ÖSSZEHASONLÍTÁSOS RENDEZÉSEK MŰVELETIGÉNYÉNEK ALSÓ KORLÁTJAI

Melykeres(G) for(u in V) {szin(u):=feher Apa(u):=0} for(u in V) {if szin(u)=feher then MBejar(u)}

Gráfalgoritmusok ismétlés ősz

A továbbiakban Y = {0, 1}, azaz minden szóhoz egy bináris sorozatot rendelünk

Nagyméretű adathalmazok kezelése (BMEVISZM144) Reinhardt Gábor április 5.

Leképezések. Leképezések tulajdonságai. Számosságok.

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé.

Felvételi tematika INFORMATIKA

Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t

Feladatok, amelyek gráfokkal oldhatók meg 1) A königsbergi hidak problémája (Euler-féle probléma) a

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).

Az optimális megoldást adó algoritmusok

Algoritmuselmélet. 2-3 fák. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 8.

Adatszerkezetek 7a. Dr. IványiPéter

Gráfok 2. Legrövidebb utak, feszítőfák. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Diszkrét matematika 2 (C) vizsgaanyag, 2012 tavasz

Algoritmuselmélet. Gráfok megadása, szélességi bejárás, összefüggőség, párosítás. Katona Gyula Y.

B-fa. Felépítés, alapvető műveletek. Programozás II. előadás. Szénási Sándor.

Shannon és Huffman kód konstrukció tetszőleges. véges test felett

definiálunk. Legyen egy konfiguráció, ahol és. A következő három esetet különböztetjük meg. 1. Ha, akkor 2. Ha, akkor, ahol, ha, és egyébként.

Hadamard-mátrixok Előadó: Hajnal Péter február 23.

5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus.

ELTE IK Esti képzés tavaszi félév. Tartalom

A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny második fordulójának feladatai. INFORMATIKA II. (programozás) kategória

32. A Knuth-Morris-Pratt algoritmus

Javító és majdnem javító utak

Diszkrét Matematika MSc hallgatók számára 7. Előadás Párosítási tételek Előadó: Hajnal Péter Jegyzetelő: Kovácsházi Anna

2. Visszalépéses stratégia

Gráfelmélet jegyzet 2. előadás

15. A VERSENYRENDEZÉS

bármely másikra el lehessen jutni. A vállalat tudja, hogy tetszőlegesen adott

26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA

Algoritmuselmélet 1. előadás

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) Halmazok 1

Sorozatok határértéke SOROZAT FOGALMA, MEGADÁSA, ÁBRÁZOLÁSA; KORLÁTOS ÉS MONOTON SOROZATOK

1. ábra. Egy rekurzív preorder bejárás. Egy másik rekurzív preorder bejárás

Országos Középiskolai Tanulmányi Verseny 2009/2010 Matematika I. kategória (SZAKKÖZÉPISKOLA) 2. forduló feladatainak megoldása

Alap fatranszformátorok II

Halmazelmélet. 1. előadás. Farkas István. DE ATC Gazdaságelemzési és Statisztikai Tanszék. Halmazelmélet p. 1/1

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

Adatszerkezetek és algoritmusok

Programozási módszertan. Dinamikus programozás: A leghosszabb közös részsorozat

OSZTHATÓSÁG. Osztók és többszörösök : a 3 többszörösei : a 4 többszörösei Ahol mindkét jel megtalálható a 12 többszöröseit találjuk.

Nagy Gábor compalg.inf.elte.hu/ nagy

SzA II. gyakorlat, szeptember 18.

Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.

Programozási módszertan. Mohó algoritmusok

Algoritmuselmélet. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 13.

Algoritmusok és adatszerkezetek 2.

15. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: január 30.

17. előadás: Vektorok a térben

Visszalépéses kiválogatás

Programozási segédlet

Diszkrét matematika II., 8. előadás. Vektorterek

... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)

Adatszerkezetek I. 7. előadás. (Horváth Gyula anyagai felhasználásával)

Nagyságrendek. Kiegészítő anyag az Algoritmuselmélet tárgyhoz. Friedl Katalin BME SZIT február 1.

Átírás:

EÖTVÖS LORÁND TUDOMÁNYEGYETEM TERMÉSZETTUDOMÁNYI KAR GYAKORI RÉSZGRÁFOK KERESÉSE HÁLÓZATOKON SZAKDOLGOZAT Kovács Ténia Alexandra Matematika BSc Matematikai elemző szakirány Témavezető: Dr. Kósa Balázs Információs Rendszerek Tanszék Budapest 2015

Tartalomjegyzék 1. Bevezetés 3 1.1. Hálózatok.................................. 3 1.2. Gyakori elemhalmazok........................... 4 1.2.1. Fogalma............................... 4 1.2.2. Apriori algoritmus......................... 6 1.2.3. ECLAT algoritmus......................... 8 2. Gyakori részgráfok 11 2.1. Alapfogalmak................................ 11 3. TreeMiner algoritmus 14 3.1. Alapfogalmak................................ 14 3.2. Jelölt előállítás............................... 16 3.3. A Treeminer algoritmus menete...................... 19 4. AGM algoritmus 28 4.1. Alapfogalmak................................ 28 4.2. Jelölt előállítás............................... 30 4.3. Az AGM algoritmus menete........................ 36 5. Összegzés 37 Irodalomjegyzék 37 2

1. fejezet Bevezetés A szakdolgozatom célja, bemutatni azon algoritmusokat, melyek alkalmasak az irányított, a véletlen és a skálafüggetlen hálózatok gyakori részgráfjainak megkeresésére. A továbbiakban szó lesz a hálózatok nevezetes tulajdonságairól, illetve a gyakori elemhalmazok fogalmáról. Továbbá részletesen tárgyalni fogom az apriori elven alapuló AGMés a treeminer- algoritmust. 1.1. Hálózatok "A hálózatok mindenütt jelen vannak." [1]- írja Barabási László, a Behálózva című könyvében. Valóban, a hálózatok felfedezhetőek az élet minden területén, amelyeket tipikusan gráfokként reprezentálunk, ahol a csomópontok a modellezni kívánt esetek, az élek pedig valamely közös tulajdonságot, vagy kapcsolatot jelölnek a két csúcs között. Ilyenre lehet példa az emberi kapcsolati rendszer, amelyet szociális hálónak is szokás nevezni, ahol az embereket a csúcsok, a közöttük lévő kapcsolatokat, pedig az élek jelölik. Vagy a biológiában a neurális hálózatok, ahol a neuronok helyezkednek el a gráf csomópontjaiban, míg a szinapszisokat az élek reprezentálják. De a számítástechnikában is nagy számban fordulnak elő, mint az internet felépítésében, ahol a számítógépek és router-ek a csúcsok és a kábeles, vagy wifi-s adatátviteli kommunikációk pedig a gráf élei. Ugyanígy modellezhető a Word Wide Web is, ahol a web oldalakat linkekkel kötjük össze. Ezen hálózatok sok érdekes tulajdonsággal rendelkeznek, melyekből kettőt emelnék ki, a kisvilág tulajdonságot és a hálózatok fokszámainak hatványeloszlását. Az előbbire talán a legjobb példa, a web átmérőjének vizsgálata. Tegyük fel azt a kérdést, hogy egy barátunk blogjáról, átlagosan hány kattintással juthatunk el, egy Fokvárosban élő biológus honlapjára. A kérdés megválaszolásához, érdemes megemlítenem Stanley Milgram nevét, aki 1967-ben azt vizsgálta, hogy átlagosan hány ismeretségi távolságra van egymástól, két véletlenszerűen kiválasztott amerikai állampolgár. A kísérlet eredménye átlagosan 5,5 lett. Már Milgram előtt is elterjedt volt az az elmélet miszerint bármely két ember az egész világon átlagosan hat lépésnyi távolságra van egymástól, de ez az egész emberiségre vonatkozott, amely felveti azt a sejtést hogy a távolság, nem függ a vizsgált hálózat 3

nagyságától. Ezen a gondolatmeneten elindulva Barabási és csapata elkezdte kutatni a világháló átmérőjét és arra jutottak, hogy a távolság arányos a hálózatban lévő csomópontok számának logaritmusával [1]. Így egy 1998-as mérés szerint a web átmérője 19 kattintás volt. Ami lényegében azt jelenti, hogy egy tetszőleges weboldalról 19 kattintással eljuthattunk, bármelyik másikba 17 évvel ezelőtt. A másik érdekes tulajdonsága a hálózatoknak, különösen a skálafüggetlen hálózatoknak, hogy a csúcsok fokszámainak eloszlása, hatványfüggvényt követ. Ez azt jelenti, hogy csak kevés csúcs rendelkezik nagy számú élekkel, amelyekkel a többi csúcshoz kapcsolódnak, míg a kevés fokszámmal rendelkező csúcsok vannak többségben a hálózaton. Ez a jelenség megfigyelhető a szociális hálókban, a légiforgalmi rendszerekben, illetve az interneten is. Mind a három esetben vannak olyan csomópontok, amelyek nagyságrendekkel több éllel rendelkeznek, mint a társaik. Ezen csúcsokat középpontoknak nevezzük és a hatványfüggvény farkánál helyezkednek el. 1.1. ábra. Példa egy hálózat fokszámainak hatványeloszlására [1] 1.2. Gyakori elemhalmazok A gyakori elemhalmazok kutatási területe, akkor vált érdekessé, amikor a vásárlói szokásokat modellezték, a nagyobb profit érdekében. Rájöttek, hogy az együtt vásárolt termékekből levont következtetések, nagyobb nyereséget tudnak termelni az áruházaknak, így lett a gyakori elemhalmazok keresése és meghatározása az adatbányászat egy új kutatási területe, ahol ennek megoldása végett számtalan algoritmus látott napvilágot. Ezekből az Apriori és az Eclat algoritmust mutatom be nagy vonalakban, mert ez a két legfontosabb és leggyakrabban használt algoritmus, továbbá az ott szereplő ötletek a gyakori részgráf keresésnél is szerepelni fognak. 1.2.1. Fogalma Legyen I = {i 1, i 2,..., i m } az elemek halmaza, továbbá T = {t 1, t 2,..., t n } a tranzakciók halmaza, amely az I hatványhalmaza felett értelmezett, bemeneti sorozat, azaz t i I. Másképp I a termékek, T pedig a tranzakciók, vagy a vásárlói kosarak halmaza. 4

Azt mondjuk, hogy az A I elemhalmaz fedése megegyezik, azon tranzakciókkal, amelyeknek A részhalmaza. Ekkor a fedésének elemszáma, adja meg az A halmaz támogatottságát, amelyet supp(a)-val jelölünk. Például, ha egy termék több vásárlói kosárban is szerepel, akkor annak a terméknek a támogatottsága megegyezik ezen kosarak számával. A feladat az, hogy meghatározzuk az összes olyan elemhalmazt, amely gyakori. Egy elemhalmazt, akkor nevezünk gyakorinak, ha annak támogatottsága elér egy előre definiált támogatottsági küszöböt, amelyet min supp -pal szokás jelölni. Előfordul, hogy nem a minimális támogatottságot, hanem egy gyakorisági küszöböt adnak meg. Ekkor a gyakoriságot az elemhalmaz támogatottságának és a tranzakciók elemszámának hányadosa adja meg. Formálisan freq(a) = supp(a) és ennek az értéknek kell nagyobbnak lennie, T mint az előre meghatározott gyakorisági küszöb. Ahhoz hogy meghatározzuk a gyakori elemhalmazokat, át kell vizsgálunk az összes tranzakciót és elemhalmazt, így célszerű nagy gondot fektetni ezen kosarak tárolásának módjára az adatbázisokban. Erre a tárolásra háromféle lehetőség adott. Horizontális, mikor is a tranzakciók sorszámához hozzárendeljük a bennük lévő elemeket. Vertikális, ahol minden elemhez hozzárendeljük, hogy mely tranzakciókban szerepelnek, illetve relációs tábla, ahol a tranzakciók sorszámához, külön felsoroljuk azon elemeket, amelyeket tartalmaznak. Például legyen T = {(XY ), (XY Z), (Y ), (Y Z)} a tranzakciók halmaza. Az 1.2 ábrán látható, mind a három adattárolási formához példák. 1.2. ábra. Adattárolási típusok A tranzakciók ábrázolására két módszert alkalmazhatunk. A bináris mátrixot, ahol a sorok a tranzakciókat, az oszlopok az elemeket jelölik, így az i-dik sor j-edik eleme 1, ha az i-dik tranzakció tartalmazza a j-edik elemet, különben 0. A másik ábrázolási mód a gráfban való reprezentálás. Ekkor legyen G = (A, B, E) irányítatlan páros gráf, ahol A a tranzakciók, B az elemek, E pedig az élek halmaza. Ha a A és b B, akkor a és b között csak akkor megy él, ha az a tranzakció tartalmazza a b elemet. Fentebb említettem, hogy az elemhalmazok támogatottságának meghatározásához végig kell nézni az összes tranzakciót. Ez a művelet kevés elemre jól működik, mert elfér 5

a memóriában, de nagyobb számú elemhalmazok esetében exponenciálisan nagy méretek ölthet az I hatványhalmazainak száma. Ahhoz, hogy megvizsgáljuk hogy egy elemhalmaz szerepel-e a tranzakciók sorozatán, az összes tranzakciót és az elemek halmazán értelmezett hatványhalmazokat is végig kell olvasnunk. Azért, hogy ez hatékonyan működjön definiálnunk kell egy lehetőleg teljes rendezést az I elemein és így a tranzakciókat és az I hatványhalmazait ezen rendezés szerint tároljuk. Ez után következhet a gyakori részhalmazok keresése, amelyre az úgynevezett GYEK (gyakori elemhalmazokat kinyerő) algoritmusok vannak a segítségünkre. Az Apriori és az Eclat algoritmus alapját az alábbi három lépés iterációja adja. jelölteket állítanak elő meghatározzák ezen jelöltek támogatottságát kiválogatják a gyakoriakat a jelöltek közül Mind a kettő az üres mintából kiindulva állítja elő a jelölteket, ahol a jelöltek azon elemhalmazok, amelyekről a támogatottság meghatározása után el szeretnénk dönteni, hogy gyakoriak-e vagy sem. Egy algoritmus akkor teljes, ha minden gyakori elemhalmazt megtalál és helyes, ha csak a gyakoriakat találja meg. [2] Azt mondjuk, hogy a jelölt-előállítás ismétlés nélküli, ha nem állítja elő ugyanazt a jelöltet többféleképpen. Az Apriori és az Eclat algoritmus ismétlés nélkül állítja elő a jelölteket, amelyet az elemek és a tranzakciók felett értelmezett rendezéssel tudunk garantálni. 1.2.2. Apriori algoritmus Az Apriori algoritmus az üres halmazból kiindulva, szélességi bejárás szerint határozza meg a gyakori elemhalmazokat, azaz minden szinten eggyel nagyobb méretű elemhalmazokkal foglalkozik. Az algoritmus alapját a jelöltek definiálásánál használt állítás adja, miszerint: 1.1. Állítás. Gyakori elemhalmaz minden részhalmaza gyakori. Ugyanígy értelmes ennek megfordítása is, hogy ha egy elemhalmaznak van ritka részhalmaza, akkor az biztosan nem gyakori. Ennek alapján ne legyen jelölt az az elemhalmaz, amelynek van ritka részhalmaza. A fenti állítás az anti-monoton tulajdonságból következik. 1.2. Definíció. Legyen (H, ) egy részben rendezett halmaz. A p : H {igaz, hamis} predikátum anti-monoton, amennyiben tetszőleges x H elem esetén, ha p(x) = igaz, akkor p(y) is igazat ad y x elemre. A jelöltek előállítása során az l elemű jelölteket a bemeneti sorozat l-edik átolvasása előtt állítja elő, azaz a priori, ahonnan a nevét is kapta az algoritmus. 6

Jelöltek előállítása Legyen GY l olyan halmaz, amely csak az l méretű gyakori elemhalmazokat tartalmazza, ekkor az algoritmus a GY l -ből (l + 1) méretű jelölteket állít elő a következő képpen. I 1 és I 2 párokat keres, amelyek elemei a GY l -nek. Ezek lesznek az úgynevezett generátorok. Ha igaz rájuk, hogy: I 1 lexikografikusan megelőzi I 2 -t I 1 -ből a legnagyobb elem törlésével ugyanazt az elemhalmazt kapjuk, mintha I 2 legnagyobb elemét töröltük volna akkor vesszük I 1 és I 2 unióját, majd megvizsgáljuk, hogy a kapott elemhalmaz minden részhalmaza gyakori-e. Ehhez persze elég csak azt ellenőriznünk, hogy az összes (l + 1) darab l-elemű prefixe gyakori-e, hisz az 1.1 állításból következik, hogy azok minden részhalmaza is gyakori, mivel abból indultunk ki, hogy ők gyakori elemhalmazok. Ha minden részhalmaza gyakori volt, akkor az I 1 I 2 jelölt lesz. Ahol egy sorozat l-elemű prefixén a sorozat első l eleméből képzett részsorozatát értjük [2]. Támogatottság meghatározása Miután előállította az összes jelöltet az iterációban következik a jelöltek támogatottságának meghatározása. Amennyiben 1 vagy 2 elemű jelöltekről van szó egyszerű dolgunk van. 1 eleműeknél elég egy lista vagy tömb, ahol az index jelöli az elemet, az indexnél lévő számláló pedig a támogatottságot. Így a tranzakciók egyszeri átolvasásával, csak a megfelelő elemekhez tartozó számlálót kell növelni eggyel, amennyiben tartalmazza a kosár az adott elemet. Ezután kiválogatjuk, azokat melyek gyakoriak a többit pedig eldobjuk, majd új sorszámot adunk a gyakoriaknak, így jutunk el a 2 elemű jelöltekhez. Ekkor ha n db elemet találtunk gyakorinak, akkor létrehozunk a kételemű jelöltek számára egy (n 1) (n 1)-es tömböt vagy mátrixot, mivel az indexelést nullával kezdjük. Tegyük fel, hogy i < j, ekkor az i és j elemekből álló pár támogatottságát a tömb vagy mátrix i-dik sorának (j i)-dik oszlopában találjuk. Abban az esetben, ha kettőnél több elemszámú jelölteket vizsgálunk két mutatóra van szükségünk. Az egyik mutató a kosár elemein a másik a jelölt elemein fut végig. Kezdetben mind a két mutatót az első elemekre állítjuk, azaz a rendezés szerinti növekvő sorrend legkisebb elemeire. Ha azok megegyeznek, akkor továbbléptetjük mind a kettőt. Ellenkező esetben, ha a tranzakcióban található elem, amelyre mutatunk a rendezés szerint kisebb, mint a jelöltünk, akkor csak a kosár mutatóját léptetjük, különben megállunk, mert biztosan nem tartalmazza a kosár a jelöltünket. Ha a jelölt utolsó eleme megegyezik a tranzakció valamely elemével, akkor az tartalmazz a jelöltet. Ez a módszer sajnos nagy elemszámú jelölteknél és tranzakcióknál igen lassú, ezért hogy az algoritmus futási ideje gyorsabb legyen, szokás a jelölteket szófába, vagy hash-fában tárolni. Az algoritmus Összefoglalva az algoritmusnak szüksége van a bemeneti tranzakciók sorozatára és egy minimális támogatottsági küszöbre, hogy a gyakori elemhalmazokat megtudjuk határozni. 7

Ezután az üres halmazból kiindulva meghatározza a támogatottságokat, majd azokból kiválogatja a gyakoriakat és eggyel nagyobb elemszámú jelölteket állít elő a gyakoriakból. Az algoritmus pszeudokódja a következő, ahol GY l az l elemű gyakori elemhalmazokat jelöli, bemenetként pedig meg kell adni a T tranzakciók halmazát, illetve a min supp -ot, azaz a minimális támogatottsági küszöböt: Apriori algoritmus - pszeudokód l := 0 J l := { } while J l 0 do támogatottság _ meghatározása(t,j l ) GY l :=gyakoriak_ kiválogatása(j l, min supp ) J l+1 =jelölt_ előállítás(gy l ) l := l + 1 end while 1.2.3. ECLAT algoritmus Az Eclat algoritmus hasonlóan az Apriori algoritmushoz, az üres halmazból kiindulva állítja elő a jelölteket, ellenben egy rekurzív mélységi bejárással halad az elemhalmazokon szemben az Apriori algoritmussal. Továbbá amint előállított egy jelöltet azonnal meg is határozza annak a támogatottságát. Tehát az (l + 1) elemű, P prefixű jelölteket, ahol P = l 1 az l-elemű, P prefixű gyakori elemhalmazokból állítja elő, páronkénti unióképzéssel [2]. Az algoritmus erejét az úgynevezett TID (Transaction IDentifier) halmazok adják. Egy elemhalmaz TID-halmazának elemei azon tranzakciók sorszámai, amelyek tartalmazzák a vizsgált elemhalmazt. Az általánosság megsértése nélkül feltesszük, hogy a számozást nullától kezdjük és hogy egy tranzakció azonosítója megegyezik a bemeneti sorozatban elfoglalt helyével. Például legyen T = {XY, XY Z, X, Y Z}, ekkor az I = {Y Z} elemhalmaz TID-halmaza {1, 3}. A TID-halmazoknak két fontos tulajdonságuk van. Az I elemhalmaz TID-halmazának mérete megadja az I támogatottságát. Egy jelölt TID-halmazát megkaphatjuk a generátorainak TID-halmazából egy egyszerű unióképzéssel [2]. Tehát az algoritmus első lépésben meghatározza az elemek támogatottságát, majd kiválogatja a gyakoriakat. Ekkor látható, hogy az első iterációs lépés során előállított jelöltek megegyeznek az Apriori első lépésben előállított jelöltjeivel, azaz GY = GY 1. Ezután megadja a gyakori elemek TID-halmazait és csak ezek segítségével keresi a nagyobb méretű gyakori elemhalmazokat. Általánosan egy iteráció a következőképpen zajlik. Legyen GY P, a P prefixű, P + 1 méretű gyakori elemhalmaz család. Továbbá adott a 8

min supp. Jelölje gy a GY P egy rögzített elemét. Ekkor minden olyan gy GY P elemmel veszi az unióját gy -nek, melyre igaz, hogy gy gy az elemhalmazokon definiált rendezés szerint. Ezek lesznek a jelöltek, majd meghatározza a TID-halmazaikat, melyből könnyen kiolvasható ezen jelöltek támogatottsága. Ezután kiválogatja belőlük a gyakoriakat, melyeket hozzáad a GY gy halmazhoz. Ezután sorra veszi a GY P többi elemét is, amelyekből szintén kap egy egy gyakori elemhalmazt, majd veszi ezek unióját, amely megadja a GY P +1 -et. Például legyen T = {(XY ), (XY Z), (Y ), (Y Z)} és min supp = 2. Ekkor GY = {X, Y, Z}, a TID-halmazaik pedig rendre {0, 1}{0, 1, 2, 3}{1, 3}. Ezután vesszük az X többi elemmel képzett unióját, azaz {XY, XZ} melyeknek TID-halmazai {0, 1}{1}, ahol látható, hogy a Z-vel képzett uniója nem gyakori és mivel több részhalmazt nem tudunk előállítani ezen az ágon, így XY biztosan gyakori és következhet az Y Z, mert csak őt előzi meg a rendezésben elfoglalt helyével, melynek TID-halmaza {1, 3}, azaz mérete kettő, tehát ő is gyakori. Az általános lépés pszeudokódja - Eclat_segéd Input: P : prefix halmaz GY P : P prefixű, P -nél eggyel nagyobb méretű gyakori elemhalmazokból alkotott halmazcsalád min supp for all gy GY P do for all gy GY P, gy gy do j := gy gy j.t ID := gy.t ID gy.t ID if j.t ID min supp then GY gy := GY gy j end if end for if GY gy 2 then GY := GY GY gy Eclat_segéd(gy, GY gy, min supp ) else GY := GY GY gy end if end for return GY [2] Az algoritmus a jelölt-előállítások során nem ellenőrzi, hogy az unióképzéssel kapott halmaznak minden részhalmaza gyakori-e, szemben az Apriorival, bár erre nem is lenne lehetősége a mélységi bejárás miatt [2], mivel egyből meghatározza az elemhalmaz támogatottságát és tovább is megy az eggyel nagyobb méretűekre, továbbá a TID-halmazokból már nem tud erre következtetni, mert a bemeneti sorozatot már nem használja. Ebből kifolyólag legalább annyi jelöltet állít elő az Eclat, mint az Apriori, így több lesz a ritka jelöltje is. 9

Mindennek ellenére a nagy előnye az Apriorival szemben, hogy a jelöltek TID halmazainak előállítása egy rendkívül egyszerű és gyors folyamat, mivel minél nagyobb elemszámú jelöltet állít elő, úgy csökken a TID-halmazok mérete és így nagyon gyorsan megtudja adni azok támogatottságát, szemben az Apriorival, ahol minél nagyobb számú a jelöltek elemhalmazának mérete, úgy lassul az algoritmus futási ideje a támogatottságok meghatározásánál. Összefoglalva az algoritmus először meghatározza a jelölteket, majd azok TID-halmazait, melyből adott azok támogatottsága, ezután pedig kiválogatja közülük a gyakoriakat. Ezt a rekurziós eljárást addig ismételgeti, amíg be nem járja az egész teret és nem talál több gyakori elemhalmazt. 10

2. fejezet Gyakori részgráfok A gyakori részgráfok keresése, számos környezetben előforduló feladat. Ilyen terület például a webes szokások elemzése, a bioinformatika, illetve a félig strukturált és XML struktúrájú adatok vizsgálata. Mivel ezeket a hálózati rendszereket gráfokként tudjuk csak reprezentálni, azon belül is a legtöbb esetben irányított gráfokként, így a feladata következőkben gyakori mintázatok, vagy -részgráfok keresésére az adathalmazon. 2.1. Alapfogalmak 2.1. Definíció. Legyen G = (V, E) irányított gráf, ahol V { } és E V V, ahol V a csúcsok E pedig az élek halmaza. A G gráf irányítatlan, ha x, y V : (x, y) E (y, x) E. 2.2. Definíció. A G = (V, E, L, l) gráfot címkézett gráfnak nevezzük, ahol V a csúcsok, E V V élek, L pedig a címkék halmaza és l : V E L olyan függvény, amely megadja a csúcsok vagy élek címkéjét. [5] 2.3. Definíció. Sétának nevezzük a szomszédos csúcsok és élek egy váltakozó sorozatát. Ha a séta kezdő és végpontja nem egyezik meg és önmagát nem metsző akkor útnak, ha a kezdő és végpont megegyezik akkor pedig körnek nevezzük. 2.4. Definíció. Legyen G irányított gráf és x, y, z V, akkor ha út x-ből z-be, amely áthalad az y csúcson, azt mondjuk hogy y őse z-nek és z leszármazottja y-nak. Jelölésben y l z, ahol l az y-ból z-be vezető út hossza. Ha l = 1, akkor azt mondjuk hogy y szülője z-nek és fordítva z gyereke y-nak. Amennyiben két csúcsnak megegyezik a szülője, úgy őket testvéreknek definiáljuk. 2.5. Definíció. A G = (V, E ) gráf a G = (V, E) gráf részgráfja, ha V V, E E. A továbbiakban jelölje ezt G G. 2.6. Definíció. A G = (V, E) és a G = (V, E ) gráfok izomorfak, ha van olyan egy-egy értelmű megfeleltetés - bijekció - V és V között, hogy G-ben pontosan akkor szomszédos két pont, ha G -ben a nekik megfelelő pontok szomszédosak és szomszédos pontpárok esetén ugyanannyi él fut közöttük [3]. 11

2.7. Definíció. Legyen G = (V, E, L, l) egy címkézett irányított gráf és f : V (G) V (G ) egy bijektív függvény, akkor G izomorf G -vel ha: u V (G), l G (u) = l G (f(u)) és (u, v) E(G), (f(u), f(v)) E(G ) és l G (u, v) = l G (f(u), f(v)). [5] A gráfok izomorfiájának eldöntése nehéz feladat, mivel egy n csúcsú gráf esetében n! bijekció lehetséges. A feladat bizonyítottan NP-teljes [8]. A gráf izomorfia problémájából született a gráfok kanonikus kódolásának problémája [2]. 2.1. ábra. Példa kanonikus kódra: 12242-1-1-1315-1-1-1-15-1 2.8. Definíció. A gráfok kanonikus kódolása (vagy kanonikus címkézése) egy olyan kódolás, amely az izomorf gráfokhoz és csak azokhoz azonos kódsorozatot rendel [2]. Megjegyzés: Egy gráfnak több kanonikus kódolása is lehet. Például ha a gyermekek sorrendje minden fában egyértelmű a címkéjük alapján, akkor az egy kanonikus kód. A továbbiakban a 2.1 példában ismertetett kódolást alkalmazzuk. Példa 2.1 A 2.1 ábrán látható példában mélységi bejárást alkalmazva, rendre feljegyezzük a látott csúcsok címkéjét és amennyiben nem tudunk tovább haladni, úgy a visszalépést a kódban -1-gyel jelöljük, így feltéve hogy nincs olyan csúcs a gráfban, amely ilyen címkével rendelkezne. A kódnak akkor van vége, ha visszaléptünk a kiindulási csúcsba. 2.9. Definíció. Azt mondjuk, hogy G előfordul G -ben, ha olyan G részgráfja G -nek, ahol G és G izomorfak. Legyen G = {G 1, G 2,..., G k } a bemeneti gráfok halmaza, továbbá G részgráfja G i - nek (i k). Ekkor jelölje δ Gi (G ) azon részgráfok számát G i -ben, melyek izomorfak G -vel. Ha δ Gi > 0 d Gi (G ) = 1 ha δ Gi = 0 d Gi (G ) = 0. 12

Így a σ(g ) = G i G d G i (G ) a G támogatottságával egyenlő, magyarán azon G i -k száma, melyek tartalmazzák G -t a G bemeneti halmazon. Szokás még súlyozott támogatottságot is számítani, ekkor σ w (G ) = G i G δ G i (G ), amely megadja G összes előfordulásainak számát G-n. Amennyiben ha egy a gyakori elemhalmazok keresésénél használt minimális támogatottsági küszöböt megadunk és a G részgráf támogatottsága nem kisebb mint ez a min supp, úgy azt mondjuk, hogy G gyakori részgráf a G halmazban. 13

3. fejezet TreeMiner algoritmus A Treeminer algoritmus, melyet Zaki publikált [4] a gyakori részfák keresésére alkotta. Az algoritmus irányítatlan, csúcs-címkézett, gyökeres és rendezett fákban keresi a gyakori részfákat, de egy kis módosítással az algoritmus általánosítható a címkézetlen gráfokban és erdőkben való keresésre is. 3.1. Alapfogalmak A fa definíció szerint egy összefüggő, körmentes gráf. Jelölje ezt T = (V, E), ahol V a csúcsok, E pedig az élek halmaza. Így egy n csúcsú fa esetén, a fa mérete T = n. A nem összefüggő, de körmentes gráfok összességét erdőnek nevezzük. Gyökeres egy fa, ha egy csúcsot a többitől kitüntetettként kezelünk, ez lesz a gyökér csúcs. Rendezettnek mondunk egy gyökeres fát, ha minden csúcsára teljesül, hogy a gyerekeik között adott egy rendezés. Ez a rendezés kiterjeszthető egy teljes rendezéssé a gráf pontjai között. A továbbiakban jelölje n i egy csúcs pozícióját/helyét annak függvényében, hogy a fát a gyökér csúcsból kiindulva, mint 0. lépésből mélységi bejárás szerint végiglátogatva, a csúcsot az i-dik lépésben fedeztük fel, ahol i = 0, 1,..., T 1. Legyen L = {0, 1,..., m 1} a címkék halmaza és l : V L olyan függvény mely megadja az n i csúcs címkéjét, azaz l(n i ) = y L. Jelölje a T fa egy élét az e = (n x, n y ) E, ami a továbbiakban egy rendezett pár, ahol n x szülője n y -nak. A fák egyszerűbb és helytakarékosabb tárolása végett, a Példa 2.1-ben bemutatott kanonikus kódolással reprezentáljuk. Ha elhagyjuk a kódból a -1-eket, akkor a T fa címke listáját (label sequence) kapjuk, jelölje ezt l(t ). Erre mutat példát a 3.1-es ábra. 14

3.1. ábra. Példa a kódos tárolásra, a címke listára (label sequence), valamint a csúcsok pozíciójára 3.1. Definíció. Azt mondjuk, hogy S = (V S, E S ) egy beágyazott részfa (embedded subtree) a T = (V, E) fában, jelölje ezt S T, ha i) V S V ii) e = (n x, n y ) E S akkor és csak akkor, ha n x l n y a T fában, azaz akkor tartalmaz egy élt S, ha n x leszármazottja az n y. Ha S T, akkor azt mondjuk, hogy T tartalmazza S-t. Egy részfa méretét jelölje k, ekkor őt k-részfának (k-subtree) nevezzük. Látható, hogy a fenti definíció némileg eltér az 2.9-es részgráfokra kimondott általános definíciótól, mert nem csak a szülő-gyerek éleket tartalmazhatja egy részfa, mint a részgráfoknál, hanem az ős-leszármazott éleket is [4]. Erre mutat példát a 3.2-es ábra, ahol a T fának részfái az a),b) és c) jelű fák. Jelölje T a fák halmazát és legyen S T, ahol T T. Ekkor S egy előfordulását T -ben az úgynevezett illeszkedési címkével (match label) kaphatjuk meg. Azaz legyen {t 1, t 2,..., t n } a T csúcsainak halmaza, {s 1, s 2,..., s m } az S csúcsainak halmaza, ahol T = n és S = m. Ekkor S illeszkedési címkéje {t i1, t i2,..., t im } akkor és csak akkor, ha i) l(s k ) = l(t ik ), k = 1,..., m ii) e = (s j, s k ) E S ha t ij őse t ik -nak T -ben. Megjegyzés: S összes csúcsának címkéje illeszkedik T -re. Valamint a csúcsok illeszkedésének topológiája T -ben és S-ben is megegyezik [4]. S előfordulásainak száma T -ben, azonos az 2.9-ben definiált támogatottsággal, illetve a 15

3.2. ábra. Példa egy fa lehetséges részfáira súlyozott támogatottság definíciójával. Ugyanígy érvényes a min supp támogatottsági küszöb is a gyakori részfák meghatározásához. A továbbiakban jelölje a k méretű gyakori részfák halmazát F k. Ahhoz, hogy könnyebben megtudjuk számolni a gyakori részfákat, szükséges definiálnunk az érvényességi tartomány (scope) fogalmát. 3.2. Definíció. Legyen T (n l ) egy n l gyökerű részfa és az n r csúcs, a T (n l ) fa legjobboldalibb levele, azaz a legnagyobb pozícióban lévő csúcs a részfában. Ekkor [l, r] intervallumot az n l csúcs érvényességi tartományának nevezzük, ahol l az intervallum alsó, r pedig a felső korlátja. Példa 3.1 A 3.3 ábrán látható egy T T fa, valamint annak két részfája S 1 és S 2. A már bevezetett n i csúcsjelölések mellett, az ehhez tartozó érvényességi tartomány, valamint a kanonikus kódjuk alatt, a címke listájuk is fel van tüntetve. Az illeszkedési címkék halmaza T azon pozícióit tartalmazza, melyekre illeszkedik a részfa címke listája. Látszik, hogy mindkét részfa támogatottsága 1, valamint a súlyozott támogatottság az S 1 részfa esetében 3, mivel kétféleképpen is illeszkedik a címke listája a T fa címke listájára. 3.2. Jelölt előállítás A Treeminer algoritmus az Apriori GYEK algoritmushoz hasonlóan a jelöltek előállításához az anti-monoton tulajdonságot használja fel. Azaz egy mintázat gyakorisága kisebb vagy egyenlő mint annak részmintáinak gyakorisága. Így hasonlóan a fentebb bemutatott GYEK algoritmusokhoz a (k + 1)-részfa jelölteket a gyakori k-részfákból állítja elő. Ekvivalencia osztály 16

3.3. ábra. Példa fa részfáira és a csúcsok érvényességi tartományára Azt mondjuk, hogy két k-részfa X, Y ugyanabban a prefix ekvivalencia osztályban van, akkor és csak akkor, ha a (k 1)-dik csúcsig a prefixük megegyezik. Formálisan legyen X, Y a két fa kanonikus kódja és p(x, i) olyan függvény, amely megadja X prefixszét az i-dik csúcsig. Ekkor X és Y ugyanabban a prefix osztályban van akkor és csak akkor, ha p(x, k 1) = p(y, k 1). Azaz a két részfa prefixsze legfeljebb az utolsó csúcsban térhet el egymástól [4]. Legyen P egy k 1 méretű részfa prefixsze és jelölje ezt az osztályt [P ] k 1. Jelölje (x, i) pár azt, hogy az x címkéjű csúcs, az i-dik pozícióban lévő csúcshoz csatlakozik a P prefixben.ekkor ha (x, i) eleme ennek az osztálynak, akkor az (x, i) [P ] jelölést használjuk. Amennyiben egy új prefixszű részfát alkotunk, úgy hogy (x, i) elemet hozzáadjuk a P -hez, úgy azt P x -szel jelöljük. Példa 3.2 A 3.4 ábrán látható, hogy az 5 pontú részfák közül, melyek azok amik a 4 hosszú prefixszükben egyeznek meg, tehát ugyanabban az osztályban vannak. Látszik, hogy az (x, 2) nem ilyen, mivel csak az utolsó (k 2) prefixszében egyezik meg az eredetivel, így a lehetséges jelöltek, amelyek egy prefix ekvivalencia osztályban vannak, csak a 0, 1, 3 17

3.4. ábra. Prefix ekvivalencia osztály pozíciókban csatlakozhatnak a részfához. 3.3. Lemma. Legyen P egy részfa prefix osztálya és n r a legjobboldalibb levél csúcs P - ben, amelynek az érvényességi tartománya [r, r]. Legyen (x, i) [P ]. Ekkor azon csúcsok pozíciói, melyek az x címkéjű csúcshoz csatlakozhatnak a P -ben az [i, r] érvényességi tartományba esnek, ahol n i az i-dik csúcs a P -ben és a hozzátartozó érvényességi tartomány az [i, r]. Azaz egy új csúcs, csak a legjobboldalibb csúcshoz csatlakozhat a prefixben, amely pozíciója az [i, r] érvényességi tartományba esik. Az (x, i) párokon definiálunk egy rendezést, miszerint először az x címkék, majd az i pozíciók szerint rendezzük őket. Az (x, i) < (y, j) akkor és csak akkor, ha x < y vagy x = y és i < j, akkor ez egy teljes rendezés a [P ] k 1 osztályban. Az osztályok kiterjesztése 3.4. Definíció. Legyen P egy prefix osztály, melynek kanonikus kódját jelölje P és (x, i), (y, j) ennek az osztálynak két eleme. Jelölje P x azt az osztályt, amely tartalmazza az (x, i) elemet. Definiáljuk az összekapcsolás (join) operátort a két elem között, azaz a (x, i) (y, j) művelet a következőket eredményezi, ha: i = j ha P, akkor adjuk hozzá (y, j) és (y, j + 1) elemet a [P x ] osztályhoz. ha P =, akkor adjuk hozzá (y, j) elemet a [P x ] osztályhoz. i > j: adjuk hozzá (y, j) elemet a [P x ] osztályhoz. i < j: nem tudunk jelöltet előállítani. 3.5. Tétel. Legyen [P ] k 1 egy prefix osztály teljes rendezés szerint rendezett elemekkel, azaz (x, i) < (y, j) akkor és csak akkor, ha x < y vagy x = y és i < j. Ekkor az osztályok kiterjesztésének módszere [P ] k osztályú, csúcsaiban rendezett jelölteket generál. 18

3.6. Tétel. Az osztályok kiterjesztésének módszere, az összes lehetséges részfa jelöltet előállítja helyesen és legfeljebb egyszer. Példa 3.3 A 3.5 ábrán X és Y részfákból jelölteket generálunk az összekapcsolás művelet segítéségével. Először a (2, 1) (2, 1) összekapcsolást hajtjuk végre, ahol a 3.4 definíció első esete szerint 1 = 1, így hozzácsatoljuk az X részfához a (2, 1) és a (2, 2) csúcsot (lásd 1.a)1.b)). Mind a kettőnél bővítjük a P 2 -t a megfelelő elemekkel. A következő összekapcsolás a (2, 1) (3, 0), melyre a második eset teljesül, miszerint 1 > 0, így az X fához és P 2 -hez hozzáadjuk a (3, 0) elemet (lásd 2.a)). A (3, 0) (3, 0) esetében szintén egyenlőség teljesül, azaz 0 = 0 tehát hozzáadjuk az Y fához a (3, 0) és a (3, 1) elemet, továbbá bővítjük a P 3 halmazt is. A (3, 0) (2, 1) műveletnél a tétel utolsó pontja teljesül, így ebből nem tudunk jelölteket generálni. Tehát az 15 prefixszű jelöltekből elő tudtunk állítani egy 152, illetve egy 15-13 prefixszű jelöltet. 3.5. ábra. Jelöltek generálása, az összekapcsolás műveletének alkalmazása [4] 3.3. A Treeminer algoritmus menete Az algoritmus a gyakori részfákat a mélységi keresés segítségével kutatja fel. Annak érdekében, hogy a támogatottság kiszámításának művelete gyors legyen, úgynevezett érvényességi tartomány listákban tárolja a fákat. 19

Érvényességi tartomány lista Jelölje X, T egy részfáját, amelynek utolsó csúcsa x k. Jelölje L(X) az X részfa érvényességi tartomány listáját, amely (t, m, s) párokat tartalmaz, ahol t annak a fának az azonosítója, amely tartalmazza az X-et, m az X (k 1) hosszú prefixszének illeszkedési címkéje, valamint s az x k érvényességi tartománya. Ekkor a lista elemszáma, egyenlő a részfa súlyozott támogatottságával, ha a minimális támogatottsági küszöböt eléri. Megjegyzés Az egyelemű részfáknak üres a prefixszük, mert nincs nekik még illeszkedési címkéjük. Példa 3.4 A 3.6 ábrán a fák tárolására láthatunk példát. Az algoritmus horizontális és vertikális tárolást alkalmaz. Az 1. táblázat a horizontális tárolást mutatja be, ahol az első attribútum a fa ID-ja a második, pedig annak kanonikus kódja. A 2. táblázat az egyelemű fák vertikális tárolásra mutat példát. Azaz az érvényességi tartomány listára, ahol a fejlécben az egy elemű fák címkéi találhatóak, azon belül a felsorolásban pedig olyan párok, melyek első eleme annak a fának az azonosítója, amelyben az egyelemű fa megtalálható, a másik eleme pedig, a hozzá tartozó érvényességi tartomány. Mivel az egyelemű fáknak nincsen illeszkedési címkéje, így csak a fák ID-ját és az érvényességi tartományokat tartalmazzák a listák, az egyelemű fák esetében. 3.6. ábra. Példa a horizontális és vertikális tárolásra 1- és 2-elemű gyakori részfák meghatározása 20

Az F 1 -ek meghatározásánál a fák horizontális tárolását alkalmazza, azaz (faid, kanonikus kód ). Az 1 elemű fákat, egy 1-dimenziós tömbben számlálja meg, ahol az index jelöli a fát, a tömb elemei pedig a számlálókat tartalmazzák, akárcsak, mint az Apriori GYEK algoritmusnál. Ezután kiválogatja közülük a min supp segítségével a gyakoriakat és létrehozza az F 1 -et. Ekkor F 1 elemeinek prefixsze üres, azaz [P 0 ] =, ezeket jelölje: {(i, 1), i F 1 }. Ennek a lépésnek a lépésszáma O(n), ahol n = T. A kételemű gyakori részfák meghatározása a 3.4 definíció szerint történik, ahol a jelöltek osztálya [P ] 1 = [i] (i F 1 ), amely csak (j, 0) alakú elemeket tartalmazhat, ahol j > i. Ezek leszámlálására egy 2-dimenziós tömböt alkalmazunk, melynek mérete F 1 F 1 és az [i][j]-dik elem az ij 1 kanonikus kódú elem számlálóját tartalmazza. Miután végzett az algoritmus a leszámlálással, akkor a gyakoriak kiválogatása közben megalkotja F 2 érvényességi tartomány listáját is. A teljes lépés műveletszáma O(n 2 ). A kettőnél nagyobb elemszámú részfák meghatározása a jelöltek előállításánál az érvényességi tartomány listák összekapcsolásának műveletével hajtható végre, jelölése: L(x) L(y). Legyen két részfa érvényességi tartománya az s x = [l x, u x ] és az s y = [l y, u y ] a [P ] osztályban. Ekkor azt mondjuk, hogy s x szigorúan kisebb, mint az s y, azaz s x < s y, akkor és csak akkor, ha u x < l y. Továbbá s x tartalmazza az s y -t, jelölésben s y s x, akkor és csak akkor, ha l x l y és u y u x. Így két eset állhat fenn. Vagy y leszármazottja az x-nek, vagy x és y beágyazott testvérek (embedded sibilings), azaz x-nek és y-nak van közös ősük. A 3.4 definíció szerint az (x, i) (y, j) művelet két elemmel bővítheti a P x osztályt, vagy (y, j + 1)-gyel, vagy (y, j)-vel. Ha (y, j + 1)-et adjuk hozzá a [P x ] osztályhoz, akkor a tétel szerint szükségszerű, hogy i = j legyen és hogy y az x gyereke. Ekkor ezt a (P x y) kanonikus kóddal tudjuk reprezentálni, ahol P x az x prefix osztály kódja. Ahhoz, hogy leellenőrizzük, hogy ez a részfa előfordul-e a bemeneti T fában a t azonosítóval, úgy a (t y, s y, m y ) L(y)-ra és a (t x, s x, m x ) L(x)-re teljesülniük kell a következőknek: 1) t y = t x, azaz mind a két hármas előfordul ugyanabban a t azonosítójú fában. 2) m y = m x, x és y prefixsze megegyezik az m illeszkedési címkéjével. 3) s y s x, azaz x tartalmazza az y-t. Ha a fentiek teljesülnek a két hármasra, úgy találtunk egy jelöltet, ahol x-nek leszármazottja az y a T fában és bővíthetjük a P prefixet az m y illeszkedési címkével, így ezt az új prefixet jelöljük P x -szel és hozzáadjuk a (t y, s y, {m y l x }) hármast az (y, j + 1) érvényességi tartomány listájához a [P x ]-ben. Ha a (y, j) elemet adjuk hozzá a [P x ]-hez, akkor az a helyzet áll fenn, hogy y és x beágyazott testvérek a P prefixben és s x < s y. Az elem hozzáadása után annak kanonikus kódja (P x 1... 1y) alakú lesz, ahol a 1-ek száma függ, a j-ből x-be menő út hosszától. Ekkor (y, j) előfordul a T fában a t azonosítóval, ha teljesülnek a (t y, s y, m y ) L(y)-ra és a (t x, s x, m x ) L(x)-re a következők: 21

1) t y = t x, azaz mind a két hármas előfordul ugyanabban a t azonosítójú fában. 2) m y = m x, x és y prefixsze megegyezik az m illeszkedési címkéjével. 3) s x < s y, azaz x-et előbb láttuk meg a mélységi bejárás során, mint az y-t és nincs átfedés a két csúcs érvényességi tartományán. Amennyiben a fentiek igazak a két hármas párra úgy (y, j) érvényességi tartomány listájához, hozzáadjuk a (t y, s y, {m y l x }) hármast a [P x ]-ben. A fentieket alkalmazva az F k -k meghatározása, ahol (k 2) a következőképpen történik. Bemenetként adott egy [P ] osztály, ami az elemeket és a hozzájuk tartozó érvényességi tartomány listákat tartalmazza. Ezután leellenőrzi, hogy a lista csak gyakori elemeket tartalmazzon, majd összekapcsolja az összes elem érvényességi tartomány listáját, beleértve az önmagával vett összekapcsolását is az elemeknek. Az (x, i) (y, j) összekapcsolás eredménye két jelölt lehet a tétel szerint, amiket az egyszerűség kedvéért egy R halmazban tárol az algoritmus és L(R) jelöli ezeknek az érvényességi tartomány listáját. Ha egy részfát gyakorinak talál egy szinten, akkor a következő szint megegyezik ezen elemek osztályával. Az eljárás a rekurziót addig ismételgeti, amíg elő tud állítani jelölteket. Ha [P ] n számú elemet tartalmaz, akkor a lépésszáma az algoritmusnak O(ln 2 ), ahol l az érvényességi tartományok listás összekapcsolásának műveletigénye. Valamint a memória használata is kicsi, mert csak a jelenlegi [P ] osztályt és az új jelöltek [P x ] osztályát tárolja el. A Treeminer algoritmus pszeudokódja TreeMiner (D, min supp ): F 1 = {gyakori 1-részfák} F 2 = { gyakori 2-részfák a [P ] 1 osztályon} for all [P ] 1 E do gyakori_részfák_előállítása([p ] 1 ); gyakori_részfák_előállítása([p ]): for each elem (x, i) [P ] do P x = ; for each elem (y, j) [P ] do R = {(x, i) (y, j)}; L(R) = {L(x) L(y)}; if for any R R, R gyakori then [P x ] = [P x ] {R}; gyakori_részfák_előállítása([p x ]); Példa 3.5 A 3.7 ábrán látható három különböző fa T 0, T 1, T 2 azonosítóval, amelyekben keressük a 22

3.7. ábra. 1-elemű jelöltek előállítása és érvényességi tartomány listájuk gyakori részfákat. Az ott látható táblázat, tartalmazza az 1-elemű fák érvényességi tartomány listáját. Legyen a min supp = 100%, azaz akkor tekintünk gyakorinak egy részfát, ha az mind a három bementi fában előfordul. A 3. táblázatban látszik, hogy a (2, 1) és (4, 1) elemek nem gyakoriak, így az L(2) és L(4)listáját a továbbiakban nem vesszük figyelembe. Ezután következik a két elemű részfák előállítása, ahol az érvényességi listákat fogjuk összekapcsolni. Mivel itt a gyakoriak prefixsze üres és az elemek, amikkel bővíthetjük a gyakoriakat (1, 1), (3, 1), (5, 1). Így a 3.4 definíció első esete áll fent, azon belül is az első állítás, miszerint a gyakori elemekhez az (x, i) (y, j) összekapcsolással, csak (y, j + 1) alakú elemeket adhatjuk hozzá. Továbbá legyen s x az x csúcs, s y az y csúcs érvényességi tartománya, akkor s y s x -nek teljesülnie kell, azaz x érvényességi tartománya tartalmazza az y érvényességi tartományát. Tehát legyen az érvényességi listák összekapcsolása a következő: L(x) L(y), ahol x, y = 1, 3, 5, ekkor: L(1) L(1): t = 0, s 1 = [0, 3] - mivel nincs s 2 így a T0 fa biztosan nem tartalmaz ilyen jelöltet. t = 1, s 1 = [0, 5], s 2 = [2, 3] s 2 s 1 így hozzáadhatjuk az (1, 1) elemhez az (1, 0) elemet, így a (1, 0, [2, 3]) hármast hozzáadjuk az új érvényességi tartomány listához. t = 2, s 1 = [0, 7], s 2 = [1, 3] s 2 s 1 (2, 0, [1, 3]). L(3) L(3): 23

t = 0, s 1 = [2, 2] - mivel nincs s 2 nem tudunk jelöltet előállítani. t = 1, s 1 = [3, 3] - mivel nincs s 2 nem tudunk jelöltet előállítani. t = 2, s 1 = [2, 3], s 2 = [4, 7] s 2 s 1 nem tudunk jelöltet előállítani. L(5) L(5): t = 0, s 1 = [3, 3] - mivel nincs s 2 nem tudunk jelöltet előállítani. t = 1, s 1 = [4, 4], s 2 = [5, 5] s 2 s 1 nem tudunk jelöltet előállítani. t = 2, s 1 = [6, 6] - mivel nincs s 2 nem tudunk jelöltet előállítani. L(1) L(3): t = 0, s 1 = [0, 3], s 2 = [2, 2] s 2 s 1 (0, 0, [2, 2]). t = 1, s 1 = [0, 5], s 2 = [3, 3] s 2 s 1 (1, 0, [3, 3]). t = 1, s 1 = [2, 3], s 2 = [3, 3] s 2 s 1 (1, 2, [3, 3]). t = 2, s 1 = [0, 7], s 2 = [2, 3] s 2 s 1 (2, 0, [2, 3]). t = 2, s 1 = [0, 7], s 2 = [4, 7] s 2 s 1 (2, 0, [4, 7]). t = 2, s 1 = [1, 3], s 2 = [2, 3] s 2 s 1 (2, 1, [2, 3]). L(1) L(5): t = 0, s 1 = [0, 3], s 2 = [3, 3] s 2 s 1 (0, 0, [3, 3]). t = 1, s 1 = [0, 5], s 2 = [4, 4] s 2 s 1 (1, 0, [4, 4]). t = 1, s 1 = [0, 5], s 2 = [5, 5] s 2 s 1 (1, 0, [5, 5]). t = 2, s 1 = [0, 7], s 2 = [6, 6] s 2 s 1 (2, 0, [6, 6]). L(3) L(1): t = 0, s 1 = [2, 2], s 2 = [0, 3] s 2 s 1 nem tudunk jelöltet előállítani. t = 1, s 1 = [3, 3], s 2 = [0, 5] s 2 s 1 nem tudunk jelöltet előállítani. t = 2 esetében nem tudunk jelöltet előállítani, mert az L(3) egyik érvényességi tartománya sem tartalmazza L(1) érvényességi tartományait. L(3) L(5): t = 0, s 1 = [2, 2], s 2 = [3, 3] s 2 s 1 nem tudunk jelöltet előállítani. t = 1, s 1 = [3, 3], s 2 = [4, 4] s 2 s 1 nem tudunk jelöltet előállítani. t = 1, s 1 = [3, 3], s 2 = [5, 5] s 2 s 1 nem tudunk jelöltet előállítani. t = 2, s 1 = [4, 7], s 2 = [6, 6] s 2 s 1 (2, 4, [6, 6]) nem tudunk jelöltet előállítani. L(5) L(1): t = 0, s 1 = [3, 3], s 2 = [0, 3] s 2 s 1 nem tudunk jelöltet előállítani. 24

t = 1 esetében nem tudunk jelöltet előállítani, mert az L(5) egyik érvényességi tartománya sem tartalmazza L(1) érvényességi tartományait. t = 2 esetében nem tudunk jelöltet előállítani, mert az L(5) egyik érvényességi tartománya sem tartalmazza L(1) érvényességi tartományait. L(5) L(3): t = 0, s 1 = [3, 3], s 2 = [2, 2] s 2 s 1 nem tudunk jelöltet előállítani. t = 1 esetében nem tudunk jelöltet előállítani, mert az L(5) egyik érvényességi tartománya sem tartalmazza L(1) érvényességi tartományait. t = 2 esetében nem tudunk jelöltet előállítani, mert az L(5) egyik érvényességi tartománya sem tartalmazza L(1) érvényességi tartományait. A fenti jelöltek alapján, két jelöltet nyilváníthatunk gyakorinak, L(1) L(3) és az L(1) L(5) eredményeképp kapott részfákat. A két részfa az 3.8 ábrán látható, valamint a hozzájuk tartozó érvényességi tartomány listát a 4. táblázat tartalmazza. Látható hogy mind a két részfának 1 a támogatottsága, valamint az elsőnek 6, a másodiknak, pedig 4 a súlyozott támogatottsága. 3.8. ábra. 2-elemű gyakori részfák és érvényességi tartomány listájuk Ezután következik a háromelemű jelöltek előállítása, ahol a prefix 1 hosszú és az elemek pedig a (3, 0) és a (5, 0). Így a következő összekapcsolások generálhatnak új háromelemű jelölteket [9]: L(3, 0) L(3, 0): t = 0, m = 0, s 1 = [2, 2] - mivel nincs s 2 nem tudunk jelöltet előállítani. 25

t = 1, m 1 = 1, m 2 = 2 m 1 m 2 - nem tudunk jelöltet előállítani. t = 2, m 1 = m 2 = 0, s 1 = [2, 3], s 2 = [4, 7] s 1 < s 2 (2, 02, [4, 7]) L(3, 0) L(5, 0): t = 0, m 1 = m 2 = 0, s 1 = [2, 2], s 2 = [3, 3] s 1 < s 2 (0, 02, [3, 3]) t = 1, m 1 = m 2 = 0, s 1 = [3, 3], s 2 = [4, 4] s 1 < s 2 (1, 03, [4, 4]) t = 1, m 1 = m 2 = 0, s 1 = [3, 3], s 2 = [5, 5] s 1 < s 2 (1, 03, [5, 5]) t = 2, m 1 = m 2 = 0, s 1 = [2, 3], s 2 = [6, 6] s 1 < s 2 (2, 02, [6, 6]) t = 2, m 1 = m 2 = 0, s 1 = [4, 7], s 2 = [6, 6] s 2 s 1 (2, 04, [6, 6]) (itt a fentiekkel ellentétben nem az (5, 0) elemet, hanem az (5, 1) elemet csatoljuk hozzá a részfához) L(5, 0) L(5, 0): t = 0, m = 0, s 1 = [3, 3] - mivel nincs s 2 nem tudunk jelöltet előállítani. t = 1, m 1 = m 2 = 0, s 1 = [4, 4], s 2 = [5, 5] s 1 < s 2 (1, 04, [5, 5]) előállítani. t = 2, s 1 = [6, 6] - mivel nincs s 2 nem tudunk jelöltet előállítani. L(5, 0) L(3, 0): t = 0, m = 0, s 1 = [3, 3], s 2 = [2, 2] s 1 s 2 és s 1 s 2 - nem tudunk jelöltet előállítani. t = 1 esetén L(5)-nek nincs olyan érvényességi tartománya, amely vagy tartalmazná, vagy kisebb lenne, mit az L(3) érvényességi tartományai. t = 2 esetén L(5)-nek nincs olyan érvényességi tartománya, amely vagy tartalmazná, vagy kisebb lenne, mit az L(3) érvényességi tartományai. A fentiek alapján látható, hogy csak a L(3, 0) L(5, 0) összekapcsolás eredményezett, olyan részfát, amelyet gyakorinak tekintünk, azaz mind a három bementi fában előfordul. Még egy utolsó szintje van az algoritmusnak, ahol a prefix 2 hosszú, illetve a hozzáadható elem az (5, 0). Mivel a L(5, 0) L(5, 0) összekapcsolással, csak egy jelöltet tudunk előállítani, ahol t 1 = t 2 = 1, m 1 = m 2 = 03, s 1 = [4, 4], s 2 = [5, 5] s 1 < s 2 (1, 034, [5, 5]) lesz a listabeli eleme, de mivel ez csak egy fában fordul elő nem lehet gyakori. Így az egyetlen gyakori részfa a 3.9 ábrán látható az érvényességi listájával, amiből látszik, hogy a támogatottsága 1, valamint a súlyozott támogatottsága 4. Összegzés A Treeminer algoritmus a bemeneti gyökeres és rendezett fákon, képes megtalálni a gyakori beágyazott részfákat, a jelölt előállítás módszerével, ahol minden jelöltet legfeljebb, csak egyszer állít elő. Továbbá a fákat egy úgynevezett kóddal látja el és így tárolja azokat az adatbázisban, majd ezekből generál egy érvényességi tartomány listát és a mélységi bejárás alkalmazásával ezen listákat összekapcsolja és legenerálja az eggyel nagyobb számú jelölteket és azok érvényességi tartomány listáját, majd meghatározza azok támogatottságát. 26

3.9. ábra. A 3-elemű gyakori részfák és érvényességi tartomány listájuk 27

4. fejezet AGM algoritmus Az apriori algoritmuson alapuló gyakori részgráfokat kereső algoritmus, a továbbiakban AGM (Apriori-based Graph Mining) a gráfokat szomszédsági mátrixokban reprezentálja és ezen mátrixokon definiál egy kanonikus kódot [6]. Az algoritmus erőssége, hogy irányított és irányítatlan, valamint címkézett gráfokban való keresésre is alkalmas, így könnyedén használható a való életben előforduló hálózatokban való keresésre. 4.1. Alapfogalmak Az él és csúcs címkézett gráfokat a következőképpen reprezentálhatjuk szomszédsági mátrixokban. Legyen G = (V (G), E(G), L(V (G)), L(E(G))) olyan címkézett gráf, ahol L(V (G)) a csúcsok címkéjének, L(E(G)) pedig az élek címkéjének a halmaza. Megjegyzés a gráf mérete megegyezik a csúcsainak számával. 4.1. Definíció. Adott egy G = (V (G), E(G), L(V (G)), L(E(G))) gráf, ahol az X szomszédsági mátrix (i, j)-dik eleme az x ij, ekkor { num(l),ha e = (vi, v x ij = j ) E(G) és l = l(e) 0,ha (v i, v j ) / E(G) (4.1) ahol num(l) a címkét jelöli, egy egész számnak megfeleltetve. Ezen felül a mátrix i-dik sorához (oszlopához) hozzárendelünk egy num(l) számot, ahol v i V (G) és l = l(v i ). 4.2. Definíció. Egy G = (V (G), E(G), L(V (G)), L(E(G))) gráf egy tranzakció és jelölje G ezen tranzakciók egy halmazát, ahol G = {G 1, G 2,..., G n }. A továbbiakban egy k méretű gráf szomszédsági mátrixát jelölje X k, magát a gráfot pedig G(X k ). 4.3. Definíció. A G(X k ) gráf X k szomszédsági mátrixának csúcsai rendezettek, ha num(l(v i )) num(l(v i+1 )) ( i = 1,..., k 1). 28

4.1. ábra. Példa a szomszédsági mátrix sorainak (oszlopainak) rendezésére Példa 4.1 A 4.3 definícióra látható példa a 4.1 ábrán, ahol az a) mátrix egy jó rendezettséget reprezentál a fenti definíció értelmében, a b) mátrix pedig egy helytelent. 4.4. Definíció. Egy írányítatlan gráf csúcsaiban rendezett X k szomszédsági mátrixának kódját jelölje code(x k ), ahol x 1,1 x 1,2... x 1,k x 2,1 x 2,2... x 2,k X k = x 3,1 x 3,2... x 3,k...... x k,1 x k,2... x k,k Ekkor irányítatlan gráf esetében az X k mátrix kódja: code(x k ) = x 1,1 x 1,2 x 2,2 x 1,3 x 2,3 x 3,3 x 1,4... x k 1,k x k,k (4.2) Azaz a felső háromszög mátrix elemei oszloponként felsorolva. Irányított gráf esetében az X k mátrix kódja: code(x k ) = x 1,1 x 1,2 x 2,1 x 2,2 x 1,3 x 3,1 x 2,3 x 3,2... x k 1,k x k,k 1 x k,k (4.3) Azaz a bal felső elemtől indulva háromszögekben sorolja fel az elemeket. 4.5. Definíció. Adott egy G = (V (G), E(G), L(V (G)), L(E(G))) gráf, akkor G s = (V (G s ), E(G s ), L(V (G s )), L(E(G s ))) részgráfja G-nek, ha teljesülnek rá a következők: V (G s ) V (G), E(G s ) E(G) u, v V (G s ), (u, v) E(G s ) (u, v) E(G) Azaz megegyezik a részgráf hagyományos definíciójával (lásd 2. fejezet). 29

4.2. Jelölt előállítás Az AGM az Apriori GYEK-hez hasonlóan először az 1 elemű gyakori gráfokat állítja elő. Az i-dik lépésben az (i 1) elemű gyakori részfgráfok segíségével előállítja a i elemű jelölteket, majd ellenőrzi, hogy azok gyakoriak-e. Egy gráf gyakoriságának eldöntéséhez szüksége van a gráf támogatottságának meghatározására. Ez a támogatottság megegyezik a 2. fejezetben kimondott támogatottsággal, azaz 4.6. Definíció. Adott egy G gráf és annak egy G gráfja. Ekkor G támogatottsága: sup(g ) = azon G tranzakciók száma, ahol G G G. (4.4) az összes G G tranzakciók száma Amennyiben a sup(g ) nem kisebb, mint a minimális támogatottsági küszöb (lásd. 1.3.) úgy azt mondjuk, hogy G gyakori részgráf. A jelöltek generálása a következőképpen zajlik. Legyen X k és Y k két a csúcsaiban rendezett szomszédsági mátrixa a G(X k ) és G(Y k ) gyakori k méretű feszített részgráfoknak. Ha X k és Y k elemei megegyeznek, kivéve a k-dik sort és k-dik oszlopot, úgy X k -t és Y k -t összekapcsolhatjuk (join) és megalkotjuk a Z k+1 mátrixot. ( Xk 1 x X k = 1 x T 2 x k,k ) ( ) Yk 1 y, Y k = 1 y2 T, Z y k+1 = k,k X k 1 x 1 y 1 x T 2 x k,k z k,k+1 y2 T z k+1,k y k,k (4.5) ahol az X k 1 egy k 1 méretű gráf szomszédsági mátrixa, x i és y i (i = 1, 2) (k 1) 1-es oszlopvektorok. A Z k+1 mátrixban található z k,k+1 és z k+1,k elemeknek, nincs meghatározva az X k és Y k mátrixok által az értékük, így azok bármilyen num(l) értéket felvehetnek, beleértve a 0-t is. Abban az esetben, ha a gráf irányítatlan, úgy z k,k+1 = z k+1,k és az értékük 1, ha megy közöttük él, ha nem akkor 0. Ha a gráf irányított, úgy 4 eset fordulhat elő. 1) A k-dik csúcsból él megy a k + 1-dik csúcsba. 2) A k + 1-dik csúcsból él megy a k-dik csúcsba. 3) Két irányú él van a k-dik és a k + 1-dik csúcs között. 4) Nincs él közöttük [7]. Ebben az esetben több különböző mátrixot generál az összekapcsolás művelete. Minden esetben X k -t első mátrixnak (first matrix), Y k -t pedig második mátrixnak (second matrix) nevezzük. Formálisan a (4.5) összekapcsolás, azaz ha a következő feltételek teljesülnek, úgy az X k, Y k, Z k+1 mátrixok megtartják a csúcsaikban a rendezettséget és elvégezhető rajtuk összekapcsolás művelete, mely megtartja ezt a rendezettséget. 30

l(v i v i V (G(X k ))) = l(v i v i V (G(Y k ))) = l(v i v i V (G(Z k+1 ))) l(v i v i V (G(X k ))) l(v i+1 v i+1 V (G(X k ))) l(v k v k V (G(X k ))) = l(v k v k V (G(Z k+1 ))) l(v k v k V (G(Y k ))) = l(v k+1 v k+1 V (G(Z k+1 ))) l(v k v k V (G(X k ))) l(v k v k V (G(Y k ))) (i = 1, 2,..., k 1) (4.6) Továbbá két szomszédsági mátrixot csak akkor kapcsolhatunk össze, ha teljesül rájuk, hogy: x k,k < y k,k. (4.7) Példa 4.2 (code(első mátrix) code(második mátrix) A 4.2 ábra a) és b) két négy csúcsú irányítatlan, csúcsaiban címkézett gráfjához tarto- 4.2. ábra. Példa két gráf összekapcsolására és annak eredményére zó szomszédsági mátrixok a következők, rendre jelölje őket X 4 és Y 4. Az X 4 és Y 4 mátrix 1. sora az 1-es, 2. sora a 2-es 3. sora a 3-as, 4. sora szintén a 3-as címkéhez tartozik, ugyanez igaz az oszlopokra is. 0 0 1 0 0 0 1 1 X 4 = 0 0 0 1 1 0 0 0, Y 4 = 0 0 0 1 1 0 0 0 0 1 0 0 1 1 0 0 Ekkor a két mátrix kódja a következő: code(x 4 ) = 0001000100 code(y 4 ) = 0001001100 Látszik, hogy X 4 és Y 4 a bal felső 3 3-as részmátrixában megegyezik. Ekkor ellenőrizzük, hogy a címkéik sorrendje megfelelő-e, valamint a (4.8)-nak is teljesülnie kell, azaz x 4,3 y 4,3. Így összekapcsolhatjuk a két mátrixot és megalkotjuk a Z 5 mátrixot. 31