• Nem Talált Eredményt

Jel¨oltek t´amogatotts´ag´anak meghat´aroz´asa

4. Gyakori elemhalmazok 53

4.2. Az APRIORI algoritmus

4.2.2. Jel¨oltek t´amogatotts´ag´anak meghat´aroz´asa

A jel¨oltek el˝ofordul´asait ¨ossze kell sz´amolni. Ehhez egyes´evel vizsg´aljuk a kosarakat, ´es azon jel¨oltek sz´aml´al´oit n¨ovelj¨uk eggyel, amelyeket tartalmaz a kos´ar.

1- ´es 2-elem˝u jel¨oltek t´amogatotts´aga

K¨onny˝u dolgunk van, amennyiben a jel¨oltek m´erete 1 vagy 2. A feladatot megoldhatjuk egy olyan lista, illetve f´elt¨omb seg´ıts´eg´evel, amelyekben a sz´aml´al´okat t´aroljuk. Az elemek t´amogatotts´ag´anak meghat´aroz´as´an´al a lista j-edik eleme t´arolja a j-edik elem sz´aml´al´oj´at.

A tranzakci´ok feldolgoz´as´an´al v´egigmegy¨unk a tranzakci´o elemein ´es n¨ovelj¨uk a megfelel˝o cell´akban tal´alhat´o sz´aml´al´okat.

Az els˝o v´egigolvas´as ut´an kiv´alogathatjuk a gyakori elemeket. A tov´abbiakban m´ar csak ezekkel az elemekkel dolgozunk, ´ıgy ´uj sorsz´amokat adhatunk nekik a [1..|GY1|] intervallumb´ol (eml´ekeztet˝o¨ul GYj-vel jel¨olj¨uk aj-elem˝u gyakori mint´akat). Azl ´es k-adik elemekb˝ol ´all´o p´ar t´amogatotts´ag´at a t¨omb l-edik sor´anak k−l-edik eleme t´arolja (az ´altal´anoss´ag megs´ert´ese n´elk¨ul feltehetj¨uk, hogy l < k).

Ha egy sz´aml´al´o 4 byte-ot foglal, akkor a t¨omb helyig´enye nagyj´ab´ol 4· |GY21|

byte. Azon elemp´arokhoz tartoz´o t¨ombelem ´ert´eke, amelyek sosem fordulnak el˝o egy¨utt, 0 lesz. Helyet takar´ıthatunk meg, hogy ha csak akkor vessz¨uk fel egy jel¨oltp´ar sz´aml´al´oj´at, ha a p´art leg-al´abb egy tranzakci´o tartalmazza [127]. A p´arok t´amogatotts´ag´anak meghat´aroz´asa kevesebb mem´ori´at fog ig´enyelni, de ezzel egy¨utt lassabb is lesz.

. . . . .

4.4. ´abra. Adatstrukt´ur´ak az 1- ´es 2-elem˝u jel¨oltek t´amogatotts´ag´anak meghat´aroz´as´ahoz.

Nagyobb elemhalmazok t´amogatotts´aga

Vizsg´aljuk meg r´eszletesebben az 5. sort. Adott egy tranzakci´o ´es `-m´eret˝u jel¨oltek egy hal-maza. Feladatunk meghat´arozni azon jel¨olteket, amelyek a tranzakci´o r´eszhalmazai. Megold-hatjuk ezt egyszer˝uen ´ugy, hogy a jel¨olteket egyes´evel vessz¨uk, ´es eld¨ontj¨uk, hogy tartalmazza-e

˝oket a tranzakci´o. Rendezett halmazban rendezett r´eszhalmaz keres´ese elemi feladat.

jel¨olt :

Vegy¨unk fel k´et mutat´ot, amelyek a kos´ar, illetve a jel¨olt elemein fognak v´egighaladni. Kezdetben mu-tasson mindk´et mutat´o az elemhalmazok els˝o elemeire.

Amennyiben a k´et mutat´o ´altal mutatott elemek meg-egyeznek, akkor l´eptess¨uk mindk´et mutat´ot a k¨ovet-kez˝o elemre. Ha a tranzakci´oban tal´alhat´o elem kisebb sorsz´am´u, akkor csak a kos´ar mutat´oj´at l´eptess¨uk, el-lenkez˝o esetben pedig ´alljunk meg ; ekkor a kos´ar biz-tosan nem tartalmazza a jel¨oltet. Ha a jel¨olt utols´o eleme is megegyezik a kos´ar valamelyik elem´evel, ak-kor a kos´ar tartalmazza a jel¨oltet.

Ennek az egyszer˝u m´odszernek a h´atr´anya, hogy sok jel¨olt eset´en lass´u, hiszen annyiszor kell a tranzakci´o elemein v´egighaladni, amennyi a jel¨oltek sz´ama. A gyorsabb m˝uk¨od´es ´erdek´eben a jel¨olteket sz´of´aban vagy hash-f´aban (hash-tree) c´elszer˝u t´arolni. A sz´of´at szok´as prefix-f´anak vagy lexikografikus f´anak is h´ıvni [3]. Az eredeti APRIORI implement´aci´oban hash-f´at alkal-maztak, azonban tesztek bizony´ıtj´ak, hogy a sz´ofa gyorsabb m˝uk¨od´est eredm´enyez, mint a hash-fa. A hash-fa sz´of´aval val´o helyettes´ıt´es´er˝ol m´ar a [123]-ban ´ırtak, ahol a sz´of´at alkal-maz´o APRIORI algoritmust SEAR-nek nevezt´ek el. A tov´abbiakban a sz´of´aban val´o keres´est ismertetj¨uk (a sz´of´ak fel´ep´ıt´es´er˝ol a 2.8.1 r´eszben m´ar sz´oltunk).

Asz´ofa ´eleinek c´ımk´ei elemek lesznek. Minden cs´ucs egy elemhalmazt reprezent´al, amelynek elemei a gy¨ok´erb˝ol a cs´ucsig vezet˝o ´ut ´eleinek c´ımk´eivel egyeznek meg. Feltehetj¨uk, hogy az egy cs´ucsb´ol indul´o ´elek, tov´abb´a az egy ´uton tal´alhat´o ´elek c´ımk´ek szerint rendezve vannak (pl.

legnagyobb elem az els˝o helyen). A jel¨oltek sz´aml´al´oit a jel¨oltet reprezent´al´o lev´elhez rendelj¨uk.

A 4.5. ´abr´an egy sz´of´at l´athatunk.

Attranzakci´oban az`-elem˝u jel¨olteket ´ugy tal´aljuk meg, hogy a jel¨olteket le´ır´o fa gy¨oker´eb˝ol kiindulva, rekurz´ıv m´odon bej´arunk bizonyos r´eszf´akat. Ha egydszint˝u bels˝o cs´ucshoz a tranz-akci´o j-edik elem´en kereszt¨ul jutunk, akkor azon ´elein kereszt¨ul l´ep¨unk eggyel m´elyebb szintre,

A

B C

C D D

B

C D

4.5. ´abra. AzABC, ABD, ACD, BCD jel¨olteket t´arol´o sz´ofa.

amelyeknek c´ımk´eje megegyezik a tranzakci´o j0-edik elem´evel, aholj < j0≤ |t|−`+d (ugyanis

`−d elemre m´eg sz¨uks´eg van ahhoz, hogy lev´elbe ´erj¨unk). Ha ily m´odon eljutunk egy ` szint˝u cs´ucshoz, az azt jelenti, hogy a cs´ucs ´altal reprezent´alt elemhalmazt tartalmazza t, ´ıgy ennek a lev´elnek a sz´aml´al´oj´at kell n¨oveln¨unk eggyel.

A sz´of´at prefix f´anak is szokt´ak h´ıvni, ami arra utal, hogy a k¨oz¨os prefixeket csak egyszer t´arolja. Ett˝ol lesz gyorsabb a sz´of´as t´amogatotts´ag-meghat´aroz´as a naiv m´odszern´el. A k¨oz¨os prefixeket ¨osszevonjuk, ´es csak egyszer foglalkozunk vel¨uk.

A sz´ofa nagy el˝onye a gyors t´amogatotts´ag-meghat´aroz´as mellett, hogy a jel¨olt-el˝o´all´ıt´ast is t´amogatja. Tudjuk, hogy k´et gyakori elemhalmaz akkor lesz gener´ator, ha a legnagyobb sorsz´am´u elem¨uk elhagy´as´aval ugyanazt az elemhalmazt kapjuk, vagy m´as szavakkal, a k´et gyakori elemhalmaz `−1 hossz´u prefixei megegyeznek. A t´amogatotts´ag-meghat´aroz´as´aban haszn´alt sz´of´at felhaszn´alhatjuk a k¨ovetkez˝o iter´aci´os l´ep´es jel¨oltjeinek az el˝o´all´ıt´as´ara, hiszen a sz´ofa t´arolja a jel¨olt-el˝o´all´ıt´ashoz sz¨uks´eges gyakori elemhalmazokat.

Az eg´esz algoritmus alatt teh´at egyetlen sz´of´at tartunk karban, amely az algoritmus kezde-tekor csak egy cs´ucsb´ol ´all (ez reprezent´alja az ¨ures halmazt). A t´amogatotts´ag-meghat´aroz´as ut´an t¨or¨olj¨uk azon leveleket, amelyek sz´aml´al´oja kisebbmin supp-n´al. Az iter´aci´os l´ep´es v´eg´ere kialakul´o sz´ofa alapj´an el˝o´all´ıtjuk a jel¨olteket, amely sor´an a sz´ofa ´uj, eggyel m´elyebb szinten l´ev˝o levelekkel b˝ov¨ul. A jel¨olt-el˝o´all´ıt´as sor´an arra is lehet˝os´eg¨unk van, hogy az el˝oz˝o iter´aci´oban gyakorinak tal´alt elemhalmazokat ´es azok sz´aml´al´oit ki´ırjuk (a kimenetre vagy a h´att´ert´arol´ora).

A 2.8.1 r´eszben m´ar volt arr´ol sz´o, hogy az elemeken defini´alt rendez´es milyen hat´assal van a sz´ofa alakj´ara. Tapasztalatok alapj´an gyakoris´ag szerint cs¨okken˝o rendez´es kisebb sz´of´at eredm´enyez, mint a gyakoris´ag szerint n¨ovekv˝o rendez´es, vagy m´as v´eletlenszer˝uen megv´alasztott rendez´esek. Ennek ellen´ere olyan sz´of´at c´elszer˝u alkalmazni, amelyben az ele-meken ´ertelmezett rendez´es a gyakoris´ag szerint n¨ovekv˝o sorrendnek felel meg. Ennek ugyanis k´et el˝onye van. Egyr´eszr˝ol a sz´ofa pontjai kisebbek lesznek (kevesebb ´el indul ki bel˝ol¨uk), de ami m´eg fontosabb, hogy a ritka elemek lesznek k¨ozel a gy¨ok´erhez. A ritka elemekkel keve-sebb kos´arbeli elem fog egyezni, ez´altal a sz´ofa kikeve-sebb r´esz´et j´arjuk be a t´amogatott jel¨oltek meghat´aroz´asa sor´an.

A sz´ofa hat´ekony megval´os´ıt´as´anak r´eszleteit ´es tov´abbi gyors´ıt´asi ¨otleteket a [20, 23, 58]

´ır´asokban tal´alhatunk. Egy olyan programcsomag, amely sz´ofa alap´u APRIORI implement´aci´ot tartalmaz (tov´abb´a hat´ekony Eclat ´es Fp-growth implement´aci´ot) ´es kutat´asi c´elokra szabadon let¨olthet˝o a

http ://www.cs.bme.hu/~bodon/en/fim env oldalr´ol.