Selles artiklis arutame funktsionaalsete sÔltuvuste olemust, rakendusvaldkondi ja olemasolevaid algoritme nende tuvastamiseks andmebaasides.
KĂ€sitleme funktsionaalset sĂ”ltuvust suhteliste andmebaaside kontekstis. Ăksikasjalikult öeldes salvestatakse sellistes andmebaasides teave tabelite kujul. Edasi kasutame ligikaudseid mĂ”isteid, mis ei ole rangelt vastastikku asendatavad, nagu nimetame ise tabelit suhteliseks, veerge atribuuttideks (nende kogum on skeem) ning rida vÀÀrtuste kogumit teatud atribuutide alamhulgas - kordu.

NĂ€iteks ĂŒlaltoodud tabelis, (Benson, M, M organ) on kordu atribuutide suhtes (Patsient, Soov, Arst).
TÀpsemalt vÀljendatakse seda jÀrgmisel kujul:
[Patsient, Soov, Arst] = (Benson, M, M organ).
NĂŒĂŒd saame tutvustada funktsionaalsete sĂ”ltuvuste (Đ€Đ) mĂ”istet:
MÀÀratlus 1. Suhe R rahuldab funktsionaalset sĂ”ltuvust X â Y (kus X, Y â R) siis ja ainult siis, kui iga kordu puhul
,
â R kehtib: kui
[X] =
[X], siis
[Y ] =
[Y ]. Sellisel juhul öeldakse, et X (determinant vÔi mÀÀratlev atribuutide hulk) mÀÀratleb funktsionaalselt Y (sÔltuv atribuutide hulk).
TeisisĂ”nu, FZ olemasolu X â Y tĂ€hendab, et kui meil on kaks tuple R ja need kattuvad atribuutidega X, siis nad kattuvad ka atribuutidega Y.
NĂŒĂŒd, jĂ€rjestikku. Vaatleme atribuutide Patsient ja Sugu mille jaoks tahame teada, kas nende vahel on sĂ”ltuvusi vĂ”i mitte. Sellise atribuutide hulga jaoks vĂ”ivad eksisteerida jĂ€rgmised sĂ”ltuvused:
- Patsient â Sugu
- Sugu â Patsient
Ălaltoodud mÀÀratlemise kohaselt peab esimese sĂ”ltuvuse sĂ€ilitamiseks iga unikaalne vÀÀrtus veerus Patsient olema seotud ainult ĂŒhe vÀÀrtusega veerus Sugu. Ja nĂ€idistabeli jaoks on see tĂ”esti nii. Kuid vastupidi see ei toimi, st teine sĂ”ltuvus ei kehti ning atribuut Sugu ei ole determinant Patsiendi. Sarnaselt, kui vĂ”tta sĂ”ltuvus Doktor â Patsient, vĂ”ib mĂ€rgata, et see rikutakse, kuna vÀÀrtus Robin antud atribuudil on mitu erinevat vÀÀrtust â Ellis ja Graham.


Seega vĂ”imaldavad funktsionaalsed sĂ”ltuvused mÀÀratleda olemasolevad seosed tabeli atribuutide kogumite vahel. Edaspidi uurime kĂ”ige huvitavamaid seoseid, nimelt neid, X â Y, mis on:
- ei ole triviaalne, ehk parempoolne osa sĂ”ltuvusest ei ole vasakpoolse alamhulk (Y Ìžâ X);
- minimaalsed, st ei ole sellist sĂ”ltuvust Z â Y, et Z â X.
Kuni praeguseni kÀsitletud sÔltuvused olid ranged, st ei lubanud tabelis mingeid rikkumisi, kuid nende kÔrval on ka selliseid, mis lubavad teatud jÀrjendite vÀÀrtuste vahel mÔningast ebakÔla. Sellised sÔltuvused jagunevad eraldi klassiks, neid nimetatakse ligikaudseteks ja nende rikkumist lubatakse teatud arvu jÀrjendite pÔhjal. See arv reguleeritakse maksimaalse vea nÀitajaga emax. NÀiteks veamÀÀr
= 0.01 vĂ”ib tĂ€hendada, et sĂ”ltuvuse rikkumine vĂ”ib esineda 1% olemasolevatest tupikutest arvestatavas atribuutide kogumis. Seega, 1000 kirje puhul vĂ”ivad maksimaalselt 10 tupikut rikkuda seadust. Meie vaatleme natuke teistsugust mÔÔdikut, mis pĂ”hineb vĂ”rreldavate tupikute paarilistest vÀÀrtustest. SĂ”ltuvuse jaoks X â Y suhtes r arvutatakse jĂ€rgmiselt:

Arvutame vea Doktor â Patsient ĂŒlaltoodud nĂ€ite puhul. Meil on kaks tupikut, mille vÀÀrtused erinevad atribuudi Patsient, kuid kattuvad Doktor:
[Doktor, Patsient] = (Robin, Ellis) ja
[Doktor, Patsient] = (Robin, Graham). JÀrgides veamÀÀratlust, peame arvestama kÔiki konfliktseid paare, seega on neid kaks: (
,
) ja nende inverseerimine (
,
). Asendame valemisse ja saame:

Ja nĂŒĂŒd pĂŒĂŒame vastata kĂŒsimusele: «Miks see kĂ”ik vajalik on?». Tegelikult on sĂ”ltuvusi erinevaid. Esimene tĂŒĂŒp â need on sĂ”ltuvused, mis mÀÀratakse administraatori poolt andmebaasi projekteerimise etapis. Neid on tavaliselt vĂ€he, need on rangelt mÀÀratletud, ja nende peamine rakendus on andmete normaliseerimine ja suhte skeemi kujundamine.
Teine tĂŒĂŒp on sĂ”ltuvused, mis esindavad "peidetud" andmeid ja varasemaid teadmata seoseid atribuutide vahel. See tĂ€hendab, et selliste sĂ”ltuvuste ĂŒle ei mĂ”eldud projekteerimise hetkel ning need avastatakse juba olemasolevates andmekogumites, et seejĂ€rel tuletada mitmete avastatud funktsionaalsete sĂ”ltuvuste pĂ”hjal jĂ€reldusi salvestatud teabe kohta. Just nende sĂ”ltuvustega me tegeleme. Nendega tegeleb terve andmekaevanduse valdkond, kasutades erinevaid otsingutehnikaid ja nende pĂ”hjal vĂ€ljatöötatud algoritme. Vaatame nĂŒĂŒd, kuidas vĂ”ivad leitud funktsionaalsed sĂ”ltuvused (tĂ€psed vĂ”i ligikaudsed) olla kasulikud mingites andmetes.

Praegu on sĂ”ltuvuste peamisteks rakendusvaldkondadeks andmete puhastamine. See hĂ”lmab âmustade andmeteâ avastamise protsesside vĂ€ljatöötamist, millele jĂ€rgneb nende parandamine. TĂŒĂŒpilised nĂ€ited âmustadest andmetestâ on dubleerimised, andmevead vĂ”i trĂŒkivead, puuduolevad vÀÀrtused, aegunud andmed, liigsuured tĂŒhikud jne.
Andmevea nÀide:

Andmete dubleerimise nÀide:

NĂ€iteks, meil on tabel ja komplekt nĂ”udeid, mida tuleb tĂ€ita. Andmete puhastamine tĂ€hendab antud juhul andmete muutmist nii, et nĂ”uded oleksid tĂ€idetud. Seejuures peab muudatuste arv olema minimaalne (selle protseduuri jaoks on olemas oma algoritmid, millest me ei hakka kĂ€esolevas artiklis rÀÀkima). Allpool on toodud nĂ€ide sellisest andmete vormindamisest. Vasakul on algne suhe, milles ei tĂ€ideta vajalikke nĂ”udeid (punase vĂ€rviga on esitatud ĂŒhe nĂ”ude rikkumise nĂ€ide). Paremal on uuendatud suhe, kus rohelised lahtrid nĂ€itavad muudetud vÀÀrtusi. PĂ€rast sellise protseduuri lĂ€biviimist vajalikud sĂ”ltuvused on tagatud.

Teiseks populaarseks rakenduseks on andmebaasi disain. Siin on oluline meelde jĂ€tta normaalsed vormid ja normaliseerimine. Normaliseerimine on protsess, mille kĂ€igus suheldakse seostega vastavalt teatud nĂ”udmiste kogumile, millest igaĂŒht mÀÀratleb omaette normaalsed vormid. Me ei hakka nende erinevate normaalsete vormide nĂ”udeid arutama (seda tehakse algajatele mĂ”eldud andmebaasi Ă”pikutes), vaid mĂ€rgime vaid, et igaĂŒhel neist on oma viis funktsionaalsete sĂ”ltuvuste kontseptsiooni kasutamiseks. LĂ”ppude lĂ”puks on funktsionaalsed sĂ”ltuvused oma olemuselt terviklikkuse piirangud, mida arvestatakse andmebaasi projekteerimisel (selle ĂŒlesande kontekstis nimetatakse funktsionaalseid sĂ”ltuvusi vahel supervĂ”tmeteks).
Vaatleme nende rakendust nelja normaalse vormi puhul alloleval pildil. Kordame, et Boyce-Coddi normaalsed vormid on rangemad kui kolmas vorm, kuid samas vÀhem ranged kui neljas. Viimast me praegu ei arutle, kuna selle mÀÀratlemiseks on vajalik arusaamine mitme vÀÀrtuse sÔltuvusest, mis ei ole selles artiklis meie jaoks huvitav.




Veel ĂŒks valdkond, kus sĂ”ltuvused on leidnud oma rakenduse, on funktsioonide ruumide mÔÔtmete vĂ€hendamine, nagu nĂ€iteks naiivse Bayesi klassifikaatori ehitamine, oluliste tunnuste eristamine ja regressioonimudeli reparametreerimine. Originaalartiklites nimetatakse seda ĂŒlesanne liigsete tunnuste mÀÀratlemiseks (feature redundancy) ja asjakohaste tunnuste (feature relevancy) leidmiseks, ning selle lahendamine toimub aktiivsete andmebaasikonseptsioonide kasutamisega. Selliste tööde jaoks vĂ”ime öelda, et tĂ€na on nĂ”udlus lahenduste jĂ€rele, mis vĂ”imaldavad kombineerida andmebaasi, analĂŒĂŒsi ja eelnevalt nimetatud optimeerimise probleeme ĂŒhte tööriista.
FZ otsimiseks andmekogus on palju algoritme (n nii kaasaegseid kui ka vĂ€hem moodsaid). Sellised algoritmid vĂ”ib jagada kolme rĂŒhma:
- Algebraliste vÔrgustike lÀbimise algoritmid (Lattice traversal algorithms)
- Algoritmid, mis pÔhinevad kokkusobivate vÀÀrtuste leidmisel (Difference- and agree-set algorithms)
- Algoritmid, mis pÔhinevad paariliste vÔrdlemiste saavutamisel (Dependency induction algorithms)
Iga algoritmi tĂŒĂŒbi lĂŒhikokkuvĂ”te on esitatud allolevas tabelis:

Selle klassifikatsiooni kohta saab lugeda rohkem [4]. Allpool on toodud nĂ€ited iga tĂŒĂŒbi algoritmidest:


Praegu ilmuvad uued algoritmid, mis ĂŒhendavad mitmeid lĂ€henemisviise funktsionaalsete sĂ”ltuvuste otsingus. NĂ€iteks sellised algoritmid nagu Pyro [2] ja HyFD [3]. Nende töö analĂŒĂŒsitakse jĂ€rgmistes kĂ€esoleva artikli seerias. Selle artikli raames kĂ€sitleme vaid pĂ”hikontseptsioone ja lemma, mis on vajalikud sĂ”ltuvuste tuvastamistaktikate mĂ”istmiseks.
Alustame lihtsast â difference- ja agree-set, mida kasutatakse teise tĂŒĂŒbi algoritmides. Difference-set koosneb tuplidest, mille vÀÀrtused ei kattu, samas kui agree-set sisaldab tupleid, mille vÀÀrtused kattuvad. Oluline on mĂ€rkida, et selles kontekstis kĂ€sitleme ainult sĂ”ltuvuse vasakut poolt.
Samuti on oluline mÔistet, mille juurde viidatud, algebraline ruum. Kuna paljud kaasaegsed algoritmid toimivad selle mÔistega, peame olema teadlikud, mis see on.
Ette defineerida relva mĂ”istet, on vajalik osaliselt jĂ€rjestatud kogumi (inglise keeles partially ordered set, lĂŒhendatult â poset) mÀÀratlemine.
MÀÀratlus 2. Ăeldakse, et kogum S on osaliselt jĂ€rjestatud binaarse suhtega ⩜, kui igasuguste a, b, c â S kehtivad jĂ€rgmised omadused:
- Reflektiivsus, st a ⩜ a
- AntisĂŒmmeetrilisus, st kui a ⩜ b ja b ⩜ a, siis a = b
- Transitiivsus, st kui a ⩜ b ja b ⩜ c, siis a ⩜ c
Seda suhet nimetatakse (mitte range) osalise jĂ€rjestuse suhtes ning kogumit ise â osaliselt jĂ€rjestatud kogumiks. Formaalne tĂ€histus: âšS, ⩜â©.
Lihtsama nĂ€iteks osaliselt jĂ€rjestatud kogumi kohta vĂ”ib tuua kĂ”igi naturaalarvude N kogumi, kus kehtib tavaline jĂ€rjestussuhe ⩜. Pole raske kontrollida, et kĂ”ik vajalikud aksioomid on tĂ€idetud.
Rikkalikum nĂ€ide. Vaatame kĂ”iki alamhulkade kogumit {1, 2, 3}, mis on jĂ€rjestatud sisaldusjĂ€rel â. TĂ”epoolest, see suhe rahuldab kĂ”iki osalise jĂ€rjekorra tingimusi, seega âšP ({1, 2, 3}), ââ© on osaliselt jĂ€rjekordne kogum. Alloleval joonisel on kujutatud selle kogumi struktuuri: kui ĂŒhest elemendist saab noolede kaudu teise elemendini jĂ”uda, siis on nad jĂ€rjekorras.

Me vajame veel kahte lihtsat mÀÀratlust matemaatika valdkonnast â supremumit (supremum) ja infimumit (inïŹmum).
MÀÀratlus 3. Olgu âšS, ⩜⩠â osaliselt jĂ€rjekordne kogum, A â S. A ĂŒlemine piir on selline element u â S, et âx â S: x ⩜ u. Olgu U â kĂ”igi S ĂŒlemiste piiride kogum. Kui U-s on olemas vĂ€ikseim element, siis nimetatakse seda supremumiks ja sĂŒmboliks on sup A.
Sarnasel viisil mÀÀratletakse tÀpse alumise piiri mÔisted.
MÀÀratlus 4. Olgu âšS, ⩜⩠â osaliselt jĂ€rjekordne kogum, A â S. A alumine piir on selline element l â S, et âx â S: l ⩜ x. Olgu L â kĂ”igi S alumiste piiride kogum. Kui L-s on olemas suurim element, siis nimetatakse seda infimumiks ja sĂŒmboliks on inf A.
Vaatleme nĂ€iteks eespool mainitud osaliselt jĂ€rjendatud hulka âšP ({1, 2, 3}), ââ© ja leidke sellest supreemia ja infimium.

NĂŒĂŒd saab sĂ”nastada algebrailise vĂ”rgustiku mÀÀratlemise.
MÀÀratlemine 5. Olgu âšP, ⩜⩠â osaliselt jĂ€rjendatud hulk, nii et igal kahel elemendi alamhulgal on tĂ€psed ĂŒlemised ja alumised piirid. Siis nimetatakse P algebrailiseks vĂ”rgustikuks. Samuti kirjutatakse sup{x, y} kui x âš y ja inf {x, y} kui x â§ y.
Kontrollime, kas meie nĂ€idishulk âšP ({1, 2, 3}), ââ© on vĂ”rgustik. TĂ”epoolest, igasuguste a, b â P ({1, 2, 3}) puhul kehtib aâšb = aâȘb ja aâ§b = aâ©b. NĂ€iteks vaatleme gruppe {1, 2} ja {1, 3} ja leiame nende infimiumi ja supreemia. Kui me need ristame, saame hulga {1}, mis on infimium. Supreemia saame aga nende liitmisega â {1, 2, 3}.
FZ avastamise algoritmides on otsinguruum sageli esitatud vĂ”rgustiku kujul, kus ĂŒheelementilised hulgad (loe: otsinguvĂ”rgu esimene tase, kus sĂ”ltuvuste vasak pool koosneb ĂŒhest atribuudist) esindavad iga algse seose attribuuti.
Alguses kĂ€sitletakse sĂ”ltuvusi vormis â
â Ăksik atribuut. See etapp vĂ”imaldab mÀÀrata, millised atribuudid on peamised vĂ”tmed (selliste atribuutide puhul ei ole determinantide olemasolu, seega vasak pool on tĂŒhi). Edasi liiguvad sellised algoritmid vĂ”rku ĂŒlespoole. Oluline on mĂ€rkida, et vĂ”rku ei pea tingimata tĂ€ielikult lĂ€bima, see tĂ€hendab, et kui edastate soovitud maksimaalse vasaku poole suuruse, siis algoritm ei liigu selle suuruse tasemest kaugemale.
Alloleval joonisel on nĂ€idatud, kuidas saab kasutada algebralist vĂ”rku FZ-i otsingu ĂŒlesandes. Iga serv (X, XY) esindab sĂ”ltuvust X â Y. NĂ€iteks oleme lĂ€binud esimese taseme ja teame, et sĂ”ltuvus hoitakse A â B (kujuta seda ette rohelise ĂŒhendusena tippude vahel A ja B). See tĂ€hendab, et kui liigume vĂ”rku ĂŒlespoole, siis me ei saa enam sĂ”ltuvust kontrollida A, C â B, kuna see ei ole enam minimaalne. Samamoodi ei kontrolliks me seda, kui sĂ”ltuvus oleks hoitud C â B.


Lisaks kasutavad kĂ”ik kaasaegsed FZ-otsingu algoritmid tavaliselt andmestruktuuri, mida nimetatakse partiitsiooniks (algallikas â stripped partition [1]). Partiitsiooni formaalne mÀÀratlus on jĂ€rgmine:
MÀÀratlemine 6. Olgu X â R â atribuutide kogum suhtes r. Klaster on kogum r-tuple indeksitest, mille X-i vÀÀrtused on ĂŒhesugused, st c(t) = {i|ti[X] = t[X]}. Partiitsioon on klastrite hulk, vĂ€lja arvatud ĂŒksikpikkuste klastrid:

Lihtsalt öeldes, partiitsioon atribuudile X on loendite kogum, kus iga loend sisaldab ridade numbreid, mille vÀÀrtused on ĂŒhesugused X. Kaasaegses kirjanduses tĂ€histatakse partiitsioone struktuuriga, mida nimetatakse position list index (PLI). Ăksikpikkuste klastrid jĂ€etakse PLI tihendamise eesmĂ€rgil vĂ€lja, kuna need on klastrid, mis sisaldavad ainult ĂŒhte kirje numbrit unikaalse vÀÀrtusega, mille mÀÀramine on alati lihtne.
Vaatame nÀidet. Naaseme tagasi sama tabeli juurde, kus on patsiendid, ning koostame partiitsioone Patsient ja Sugu (vasakul on ilmnenud uus veerg, kus on tÀhistatud tabeli ridade numbrid):


Sellel juhul on veergu puudutav partitsioon vastavalt mÀÀratlemisele Patsient tegelikult tĂŒhi, kuna ĂŒksikud klastrid on partitsioonist vĂ€lja jĂ€etud.
Partitsioone saab saada mitme atribuutide alusel. Selleks on kaks teed: lĂ€bides tabeli, moodustada partitsioon kohe kĂ”ikide vajalike atribuutide alusel, vĂ”i luua see partitsioonide ĂŒhisosa operatsiooni kaudu alamhulga atribuutidest. FZ otsingu algoritmid kasutavad teist varianti.
Lihtsate sĂ”nadega, et nĂ€iteks saada partitsioon veergude alusel ABC, saab vĂ”tta partitsioonid AC ja B (vĂ”i mis tahes muu mitteĂŒhtivad alamhulk) ja ĂŒhisosa nendest luua. Kahe partitsiooni ĂŒhisosa operatsioon eraldab pikimaid klastreid, mis on ĂŒhised mĂ”lemale partitsioonile.
Vaatame nÀidet:


Esimesel juhul saime tĂŒhja partitsiooni. Kui vaadata tabelisse, siis tĂ”epoolest, sama vÀÀrtuste koondumine kahe atribuudiga puudub. Kui me aga muudame tabelit veidi (parem pool), siis saame jĂ€lle mittetĂŒhja ĂŒhisosa. Selle kĂ€igus sisaldavad read 1 ja 2 tĂ”epoolest sama vÀÀrtust attribuutide alusel. Sugu ja Doktor.
Edasi liikudes peame tutvuma sellise mÔiste nagu partitsiooni suurus. Formaalsetes tingimustes:

Lihtsamalt öeldes on partitsiooni suurus klastrite arv, mis kuulub partitsiooni (me peame meeles, et ĂŒksikute klastrite partitsioonides ei ole!):


NĂŒĂŒd saame mÀÀratleda ĂŒhe vĂ”tmelĂŒli, mis antud partitsioonide puhul vĂ”imaldab kindlaks teha, kas sĂ”ltuvus kehtib vĂ”i mitte:
LĂŒli 1. SĂ”ltuvus A, B â C kehtib, kui ja ainult kui

Vastavalt lĂŒlile on sĂ”ltuvuse kehtivuse mÀÀratlemiseks vajalik jĂ€rgida nelja sammu:
- Arvutada sÔltuvuse vasakpoolsuse partitsioon
- Arvutada sÔltuvuse parempoolsuse partitsioon
- Arvutada esimese ja teise sammu tulemus
- VÔrrelda esimese ja kolmanda sammu meetoditega saadud partitsioonide suurusi
Allpool on toodud nĂ€ide, kuidas kontrollida, kas sĂ”ltuvus kehtib antud lĂŒli pĂ”hjal:




Selles artiklis kĂ€sitlesime funktsionaalse sĂ”ltuvuse ja ligikaudse funktsionaalse sĂ”ltuvuse mĂ”isted, uurisime, kus neid rakendatakse ning millised otsingualgoritmid funktsionaalsuse leidmiseks olemas on. Samuti kĂ€sitlesime ĂŒksikasjalikult pĂ”himĂ”isted, mis on aktiivselt kasutusel tĂ€napĂ€evastes funktsionaalsuse leidmise algoritmides.
Viidatud kirjandusele:
- Huhtala Y. jt. TANE: Efektiivne algoritm funktsionaalsete ja ligikaudsete sĂ”ltuvuste avastamiseks // The computer journal. â 1999. â Vol. 42. â No. 2. â P. 100-111.
- Kruse S., Naumann F. Efektiivne ligikaudsete sĂ”ltuvuste avastamine // Proceedings of the VLDB Endowment. â 2018. â Vol. 11. â No. 7. â P. 759-772.
- Papenbrock T., Naumann F. HĂŒbriidne lĂ€henemine funktsionaalse sĂ”ltuvuse avastamisele // Proceedings of the 2016 International Conference on Management of Data. â ACM, 2016. â P. 821-833.
- Papenbrock T. jt. Funktsionaalse sĂ”ltuvuse avastamine: seitse algoritmi katsehindamine // Proceedings of the VLDB Endowment. â 2015. â Vol. 8. â No. 10. â P. 1082-1093.
- Kumar A. jt. Liituda vĂ”i mitte liituda?: Liitudes kaks korda mĂ”tlema enne tunnusvalikut // Proceedings of the 2016 International Conference on Management of Data. â ACM, 2016. â P. 19-34.
- Abo Khamis M. jt. Andmebaasis Ă”ppimine haruldaste tensoritega // Proceedings of the 37th ACM SIGMOD-SIGACT-SIGAI Symposium on Principles of Database Systems. â ACM, 2018. â P. 325-340.
- Hellerstein J. M. jt. MADlibi analĂŒĂŒtikateek: vĂ”i MAD oskused, SQL // Proceedings of the VLDB Endowment. â 2012. â Vol. 5. â No. 12. â P. 1700-1711.
- Qin C., Rusu F. Spekulatiivsed lĂ€henemised teraskaalaliste jaotatud gradientide allahindamise optimeerimisele // Neljandate andmeanalĂŒĂŒsi töötoad pilves. â ACM, 2015. â Lk 1.
- Meng X. jt. Mllib: MasinĂ”pe Apache Sparkis // MasinĂ”ppe uurimisajakiri. â 2016. â Vol 17. â Nr 1. â Lk 1235-1241.
Artikli autorid: , uurija , ja , uurija
Allikas: habr.com
