• Nem Talált Eredményt

Az Apriori algoritmus

Gyakori mintázatok és asszociációs szabályok

5.1. Gyakori elemhalmazok

5.1.2. Az Apriori algoritmus

Az Apriorialgoritmus az egyik legelső GYEK algoritmus. Szélességi bejárást valósít meg, ami azt jelenti, hogy a legkisebb mintából (ami az üres halmaz) ki-indulva szintenként halad előre a nagyobb méretű gyakori elemhalmazok meg-határozásához. A következő szinten (iterációban) az eggyel nagyobb méretű elemhalmazokkal foglalkozik. Az iterációk száma legfeljebb eggyel több, mint a legnagyobb gyakori elemhalmaz mérete.

A jelöltek definiálásánál a következő egyszerű tényt használja fel: Gyakori elemhalmaz minden részhalmaza gyakori. Az állítást indirekten nézve

elmond-hatjuk, hogy egy elemhalmaz biztosan nem gyakori, ha van ritka részhalmaza.

Ennek alapján ne legyen jelölt azon elemhalmaz, amelynek van ritka részhal-maza. Az Apriori algoritmus ezért építkezik lentről. Egy adott iterációban csak olyan jelöltet veszünk fel, amelynek összes valódi részhalmazáról tudjuk, hogy gyakori. Az algoritmus onnan kapta a nevét, hogy az ℓ-elemű jelölteket a bemeneti sorozat ℓ-edik átolvasásának megkezdése előtt (a priori) állítja elő.

Az ℓ-elemű jelöltek halmazát J-lel, az ℓ-elemű gyakori elemhalmazokat pedig GY-lel jelöljük.

A kezdeti értékek beállítása után egy ciklus következik, amely akkor ér véget, ha nincsen egyetlenℓ-elemű jelölt sem. A cikluson belül először megha-tározzuk a jelöltek támogatottságát. Ehhez egyesével vesszük a tranzakciókat, és azon jelöltek számlálóját növeljük eggyel, amelyeket tartalmaz a vizsgált tranzakció. Ha rendelkezésre állnak a támogatottságok, akkor a jelöltek közül kiválogathatjuk a gyakoriakat.

Jelöltek előállítása

AJelölt-előállítás függvény azℓ-elemű gyakori elemhalmazokból(ℓ+ 1)-elemű jelölteket állít elő. Azok és csak azok az elemhalmazok lesznek jelöltek, amelyek minden részhalmaza gyakori.

A jelöltek előállítása során olyanℓ-elemű, gyakoriI1,I2elemhalmaz párokat keresünk, amelyekre igaz, hogy

I1 lexikografikusan megelőzi I2-t,

I1-ből a legnagyobb elem törlésével ugyanazt az elemhalmazt kapjuk, mintha az I2-ből törölnénk a legnagyobb elemet.

Ha a feltételeknek megfelelő párt találunk, akkor képezzük a pár unióját, majd ellenőrizzük, hogy a kapott elemhalmaznak minden valódi részhalmaza gyakori-e. A támogatottság anti-monotonitása miatt szükségtelen az összes valódi

részhalmazt megvizsgálni; ha mind az + 1 darab ℓ-elemű részhalmaz gya-kori, akkor az összes valódi részhalmaz is gyakori. AzI1,I2 halmazokat a jelölt generátorainak szokás hívni.

Példa Legyenek a 3-elemű gyakori elemhalmazok a következők: GY3 = {ABC, ABD, ACD, ACE, BCD}. Az ABC és ABD elemhalmazok megfelel-nek a feltételmegfelel-nek, ezért képezzük az uniójukat. Mivel ABCD minden három-elemű részhalmaza aGY3-nak is eleme, az ABCD jelölt lesz. Az ACD, ACE pár is megfelel a két feltételnek, de uniójuknak van olyan részhalmaza (ADE), amely nem gyakori. AzAprioria következő iterációban tehát már csak egyet-len jelölt támogatottságát határozza meg.

A fenti módszer csak akkor alkalmazható, ha ℓ > 0. Az egyelemű jelöltek előállítása egyszerű: minden egyelemű halmaz jelölt, amennyiben az üres elem-halmaz gyakori (|T | ≥min_supp). Ez összhangban áll azzal, hogy akkor lehet egy elemhalmaz jelölt, ha minden részhalmaza gyakori.

Jelöltek támogatottságának meghatározása

A jelöltek előfordulásait össze kell számolni. Ehhez egyesével vizsgáljuk a kosa-rakat, és azon jelöltek számlálóit növeljük eggyel, amelyeket tartalmaz a kosár.

1- és 2-elemű jelöltek támogatottsága – Könnyű dolgunk van, amennyi-ben a jelöltek mérete 1 vagy 2. A feladatot megoldhatjuk egy olyan lista, illetve féltömb segítségével, amelyekben a számlálókat tároljuk. Az elemek tá-mogatottságának meghatározásánál a lista j-edik eleme tárolja a j-edik elem számlálóját. A tranzakciók feldolgozásánál végigmegyünk a tranzakció elemein és növeljük a megfelelő cellákban található számlálókat.

Az első végigolvasás után kiválogathatjuk a gyakori elemeket. A további-akban már csak ezekkel az elemekkel dolgozunk, így új sorszámokat adhatunk nekik a[1..|GY1|]intervallumból (emlékeztetőülGYj-vel jelöljük aj-elemű gya-kori mintákat). Azlésk-adik elemekből álló pár támogatottságát a tömbl-edik sorának(k−l)-edik eleme tárolja (az általánosság megsértése nélkül feltehetjük, hogy l < k).

Ha egy számláló 4 byte-ot foglal, akkor a tömb helyigénye nagyjából4·(|GY1|

2

) byte. Azon elempárokhoz tartozó tömbelem értéke, amelyek sosem fordulnak elő együtt, 0 lesz. Helyet takaríthatunk meg, hogy ha csak akkor vesszük fel egy jelöltpár számlálóját, ha a párt legalább egy tranzakció tartalmazza [Ozden és tsa., 1998]. A párok támogatottságának meghatározása kevesebb memóriát fog igényelni, de ezzel együtt lassabb is lesz.

Nagyobb elemhalmazok támogatottsága – Vizsgáljuk meg részletesebben

. . . . .

1 2 3 N-1 N

supp(j)=vector[j]

1 2 3 |GY1| −1

1 . . .

2 . . .

...

|GY1| −2

|GY1| −1

supp({l, k})=tömb[l][k-l]

5.3. ábra. Adatstruktúrák az 1- és 2-elemű jelöltek támogatottságának megha-tározásához.

jelölt:

kosár:

B E G

A B C D E F G I

jelöltmutató

6

kosármutató

?

5.4. ábra. Jelöltmutató és kosármutató

az 5. sort. Adott egy tranzakció ésℓ-méretű jelöltek egy halmaza. Feladatunk meghatározni azon jelölteket, amelyek a tranzakció részhalmazai. Megoldhat-juk ezt egyszerűen úgy, hogy a jelölteket egyesével vesszük, és eldöntjük, hogy tartalmazza-e őket a tranzakció. Rendezett halmazban rendezett részhalmaz keresése elemi feladat.

Vegyünk fel két mutatót, amelyek a kosár, illetve a jelölt elemein fognak végighaladni. Kezdetben mutasson mindkét mutató az elemhalmazok első ele-meire. Amennyiben a két mutató által mutatott elemek megegyeznek, akkor léptessük mindkét mutatót a következő elemre. Ha a tranzakcióban található elem kisebb sorszámú, akkor csak a kosár mutatóját léptessük, ellenkező eset-ben pedig álljunk meg; ekkor a kosár biztosan nem tartalmazza a jelöltet. Ha a jelölt utolsó eleme is megegyezik a kosár valamelyik elemével, akkor a kosár tartalmazza a jelöltet.

Ennek az egyszerű módszernek a hátránya, hogy sok jelölt esetén lassú,

hi-5.5. ábra. AzABC, ABD, ACD, BCD jelölteket tároló szófa.

szen annyiszor kell a tranzakció elemein végighaladni, amennyi a jelöltek száma.

A gyorsabb működés érdekében a jelölteket szófában vagy hash-fában (hash-tree) célszerű tárolni. A szófát szokás prefix-fának vagy lexikografikus fának is hívni [Agrawal és tsa., 2001]. Az eredeti Apriori implementációban hash-fát alkalmaztak, azonban tesztek bizonyítják, hogy a szófa gyorsabb működést eredményez, mint a hash-fa. A hash-fa szófával való helyettesítéséről már a [Mueller, 1995]-ban írtak, ahol a szófát alkalmazóApriori algoritmust SEAR-nek nevezték el. A továbbiakban a szófában való keresést ismertetjük (a szófák felépítéséről és típusairól az alapfogalmak 2.5.1 részében már szóltunk).

Aszófa éleinek címkéi elemek lesznek. Minden csúcs egy elemhalmazt rep-rezentál, amelynek elemei a gyökérből a csúcsig vezető út éleinek címkéivel egyeznek meg. Feltehetjük, hogy az egy csúcsból induló élek, továbbá az egy úton található élek címkék szerint rendezve vannak (pl. legnagyobb elem az első helyen). A jelöltek számlálóit a jelöltet reprezentáló levélhez rendeljük. A 5.5. ábrán egy szófát láthatunk.

A t tranzakcióban azℓ-elemű jelölteket úgy találjuk meg, hogy a jelölteket leíró fa gyökeréből kiindulva, rekurzív módon bejárunk bizonyos részfákat. Ha egy d szintű belső csúcshoz a tranzakciój-edik elemén keresztül jutunk, akkor azon élein keresztül lépünk eggyel mélyebb szintre, amelyeknek címkéje meg-egyezik a tranzakció j-edik elemével, ahol j < j ≤ |t| −ℓ+d (ugyanis ℓ−d elemre még szükség van ahhoz, hogy levélbe érjünk). Ha ily módon eljutunk egyszintű csúcshoz, az azt jelenti, hogy a csúcs által reprezentált elemhalmazt tartalmazzat, így ennek a levélnek a számlálóját kell növelnünk eggyel.

A szófát prefix fának is szokták hívni, ami arra utal, hogy a közös prefixeket csak egyszer tárolja. Ettől lesz gyorsabb a szófás támogatottság-meghatározás a naiv módszernél. A közös prefixeket összevonjuk, és csak egyszer foglalkozunk velük.

A szófa nagy előnye a gyors támogatottság-meghatározás mellett, hogy a jelölt-előállítást is támogatja. Tudjuk, hogy két gyakori elemhalmaz akkor lesz generátor, ha a legnagyobb sorszámú elemük elhagyásával ugyanazt az elem-halmazt kapjuk, vagy más szavakkal, a két gyakori elemhalmaz ℓ−1 hosszú