Selles artiklis arutame funktsionaalseid sĂ”ltuvusi andmebaasides â mis need on, kus neid kasutatakse ja millised algoritmid on nende leidmiseks olemas.
Me kĂ€sitleme funktsionaalseid sĂ”ltuvusi relatsiooniliste andmebaaside kontekstis. Ăldiselt öeldes salvestatakse sellistes andmebaasides teave tabelite kujul. Edasi kasutame ligikaudseid mĂ”isteid, mis ei ole range relatsiooniteooria kontekstis omavahel asendatavad: ise tabelit nimetame relatsiooniks, veerge â atribuutideks (nende kogumit â relatsiooni skeemiks) ja ridade vÀÀrtuste kogumit atribuutide alamhulgas â tupleks.

NĂ€iteks ĂŒlaltoodud tabelis, (Benson, M, M organ) on tupleks atribuutide (Patsient, Sugu, Doktor).
Rohkem formaalselt on see jÀrgmises vormis:
[Patsient, Sugu, Doktor] = (Benson, M, M organ).
NĂŒĂŒd vĂ”ime sisse viia funktsionaalse sĂ”ltuvuse (FS) mĂ”iste:
MÀÀratlus 1. Relatsioon R rahuldab FS X â Y (kus X, Y â R) siis ja ainult siis, kui iga tuple R-is tĂ€idab: kui
,
[X] =
[X], siis
[Y ] =
[Y ]. Sellisel juhul öeldakse, et X (determinant vÔi mÀÀrav atribuutide kogum) mÀÀrab funktsionaalselt Y (sÔltuvate atribuutide kogum).
TeisisÔnu, FS olemasolu
X â Y tĂ€hendab, et kui meil on kaks tupleksit ja need on samad attribuutide mĂ”ttes R , siis need peavad olema samad ka atribuutide jĂ€rgi. XNĂŒĂŒd kĂ€sitleme jĂ€rjestikku atribuute Y.
Patsient Sugu ja Sugu mille vahel soovime teada, kas nende vahel on sĂ”ltuvusi vĂ”i mitte. Selle atribuuttĂŒĂŒbi jaoks vĂ”ivad eksisteerida jĂ€rgmised sĂ”ltuvused:
- Patsient â Sugu
- Sugu â Patsient
Eelneva mÀÀratluse kohaselt peab esimese sĂ”ltuvuse sĂ€ilimiseks igale unikaalsele veeru vÀÀrtusele vastama ainult ĂŒks veeru vÀÀrtus. Sugu Ja see on tĂ”esti nii nĂ€idistabelis. Kuid vastupidises suunas see ei toimi, seega teine sĂ”ltuvus ei kehti ja atribuut Suguei ole determinant Sugu Patsient . Samamoodi, kui vĂ”tame sĂ”ltuvuseDoktor â Patsient , vĂ”ib mĂ€rkida, et see rikub, kuna vÀÀrtusRobin selle atribuudi jĂ€rgi omab mitut erinevat vÀÀrtust â Ellis ja Graham Ellis ja Graham.


Seega funktsionaalne sÔltuvus vÔimaldab mÀÀratleda olemasolevad seosed tabeli atribuutide kogumite vahel. Edaspidi kÀsitleme kÔige huvitavamaid seoseid, tÀpsemalt selliseid tÀhendab, et kui meil on kaks tupleksit, mis on:
- mitte triviaalne, st sĂ”ltuvuse parem pool ei ole vasaku allhuvi (Y Ìžâ X);
- minimaalne, st ei ole sellist sĂ”ltuvust Z â Y, et Z â X.
Kuni seni kÀsitletud sÔltuvused on olnud ranged, st nad ei vÔimalda tabelis mingit rikkumist, kuid lisaks neile on ka selliseid, mis lubavad teatud tasemel ebakÔla tupikute vÀÀrtuste vahel. Need sÔltuvused jagatakse eraldi klassi, nimetatakse neid ligikaudseteks ning lubatakse rikkuda teatud arvu tupikutes. See number reguleeritakse maksimumvea nÀitaja emax abil. NÀiteks veaprotsent
= 0.01 vÔib tÀhendada, et sÔltuvus vÔib rikutud olla 1% olemasolevatest tupikutest kÀsitletavas atribuutide kogumis. See tÀhendab, et 1000 kirje puhul vÔivad maksimaalselt 10 tupikut reeglit rikkuda. Me vaatame aga veidi teist mÔÔdikut, mis pÔhineb vÔrdlevate tupikute paarilise erisuse vÀÀrtustel. SÔltuvus tÀhendab, et kui meil on kaks tupleksit suhtes r loetakse nii:

Arvutame vea , vĂ”ib mĂ€rkida, et see rikub, kuna vÀÀrtus ĂŒletoodud nĂ€ites. Meil on kaks tupikut, mille vÀÀrtused erinevad atribuudil Sugu, kuid langevad kokku Doktoris:
[Doktor, Patsient] = (Robin, Ellis) ja
[Doktor, Patsient] = (Robin, Graham). JÀrgides vea mÀÀratlemist, peame arvestama kÔiki konflikte paaride, seega on neid kaks: (
,
) ja selle pöörde (
,
). Asetame valemisse ja saame.

NĂŒĂŒd pĂŒĂŒame vastata kĂŒsimusele: "Aga miks see kĂ”ik on?" Tegelikult on funktsionaalsed sĂ”ltuvused erinevad. Esimene tĂŒĂŒp â need on sĂ”ltuvused, mida mÀÀratleb administraator andmebaasi projekteerimise etapis. Need on tavaliselt vĂ€he, nad on ranged, ja nende peamine rakendus on andmete normaliseerimine ja suhteskeemi disain.
Teine tĂŒĂŒp on sĂ”ltuvused, mis esindavad "peidetud" andmeid ja varem tundmatuid seoseid atribuutide vahel. TeisisĂ”nu, selliste sĂ”ltuvuste ĂŒle ei mĂ”eldud projekteerimise hetkel ning neid avastatakse juba olemasoleva andmekogumi pĂ”hjal, et seejĂ€rel teha tuvastatud funktsionaalsete sĂ”ltuvuste alusel jĂ€reldusi salvestatud teabe kohta. Just nende sĂ”ltuvustega me tegeleme. Neid uurib terve andmekaevanduse valdkond koos erinevate otsingutehnikatega ja nende alusel loodud algoritmidega. Uurime, kuidas vĂ”ivad tuvastatud funktsionaalsed sĂ”ltuvused (olgu need tĂ€psed vĂ”i ligikaudsed) mingites andmetes kasulikud olla.

TĂ€na on sĂ”ltuvuste peamised rakendusalad andmete puhastamine. See hĂ”lmab protsesside vĂ€ljatöötamist, mis tuvastavad "mustad andmed" nende hilisemaks parandamiseks. Iseloomulikud nĂ€ited "mustadest andmetest" on duplikaadid, andmevead vĂ”i trĂŒkivead, puuduvad vÀÀrtused, vananenud andmed, liigsed tĂŒhikud ja muud sarnased probleemid.
Andmevea nÀide:

Andmete duplikaatide nÀide:

NĂ€iteks meil on tabel ja rida funktsionaalseid sĂ”ltuvusi, mida tuleks jĂ€rgida. Andmete puhastamine eeldab, et muudetakse andmeid selliselt, et funktsionaalsed sĂ”ltuvused saavad Ă”igeks. Samuti peab muudatuste arv olema minimaalne (selle protseduuri jaoks on olemas omad algoritmid, millele me kĂ€esolevas artiklis ei keskendu). Allpool on toodud nĂ€ide sellisest andmete teisendamisest. Vasakul on algne suhe, kus on selgelt nĂ€ha, et vajalikud funktsionaalsed sĂ”ltuvused ei kehti (punasega on vĂ€lja toodud ĂŒks rikkumise nĂ€ide). Paremal on esitatud uuendatud suhe, kus rohelised lahtrid nĂ€itavad muudetud vÀÀrtusi. PĂ€rast sellist protseduuri on vajalikud sĂ”ltuvused saanud kehtima.

Teine populaarne rakendusala on andmebaasi disain. Siin on oluline meeles pidada normaalvorme ja normaliseerimist. Normaliseerimine on protsess, mille kĂ€igus muudetakse suhe vastavaks teatud nĂ”uetele, millest igaĂŒht mÀÀratletakse omamoodi normaalvormiga. Me ei hakka selgitama erinevate normaalvormide nĂ”udeid (see on kajastatud igas algaja andmebaasi Ă”pikusse), kuid mĂ€rkime, et igaĂŒhel neist on omapĂ€rane kasutus funktsionaalsete sĂ”ltuvuste kontseptsioonis. LĂ”ppude lĂ”puks on funktsionaalsed sĂ”ltuvused oma olemuselt terviklikkuse piirangud, mida arvestatakse andmebaasi projekteerimisel (kĂ€esoleva ĂŒlesande kontekstis nimetatakse funktsionaalseid sĂ”ltuvusi mĂ”nikord supervĂ”tmeteks).
Vaatame nende rakendust neljas normaalvormis alloleval pildil. Tuletame meelde, et Boyce-Coddi normaalvorm on rangem kui kolmas vorm, kuid samas vÀhem range kui neljas. Viimast me veel ei kÀsitle, kuna selle mÀÀratlemiseks on vajalik arusaamine mitme vÀÀrtuse sÔltuvustest, mis ei ole selle artikli kontekstis huvitavad.




Teine valdkond, kus sĂ”ltuvused on oma rakenduse leidnud, on ruumi omaduste mÔÔtmete vĂ€hendamine sellistes ĂŒlesannetes nagu naiivse Bayesi klassifikaatori loomine, oluliste omaduste esiletoomine ja regressioonimudeli reparemeteering. Originaalartiklites nimetatakse seda ĂŒlesannet liigsete omaduste mÀÀratlemiseks (feature redundancy) ja asjakohaste omaduste mÀÀratlemiseks (feature relevancy) [5, 6], ning see lahendatakse aktiivse andmebaasi kontseptsioonide kasutamisega. Selliste uuringute ilmumisega vĂ”ime öelda, et tĂ€na on nĂ”udlus lahenduste jĂ€rele, mis suudavad siduda andmebaasi, analĂŒĂŒtika ja ĂŒlaltoodud optimeerimisprobleemide rakendamise ĂŒheks tööriistaks [7, 8, 9].
Funktsionaalsete sĂ”ltuvuste leidmiseks andmestikus on palju algoritme (nii kaasaegseid kui ka vanemaid). Need algoritmid vĂ”ib jagada kolme rĂŒhma:
- Alglib, mis kasutavad algebra parameetrite lÀbimist (Lattice traversal algorithms)
- Alglib, mis pÔhinevad kooskÔlastatud vÀÀrtuste leidmisel (Difference- and agree-set algorithms)
- Alglib, mis pÔhinevad paarilisetel vÔrdlustel (Dependency induction algorithms)
Iga algoritmi tĂŒĂŒbi lĂŒhike kirjeldus on toodud allolevas tabelis:

Lisage rohkem teavet selle klassifikatsiooni kohta [4]. Allpool on toodud nĂ€ited algoritmidest igat tĂŒĂŒpi jaoks:


Praegu ilmuvad uusi algoritme, mis ĂŒhendavad endas mitu lĂ€henemist funktsionaalsete sĂ”ltuvuste leidmiseks. Selliste algoritmide nĂ€ideteks on Pyro [2] ja HyFD [3]. Nende töö analĂŒĂŒsi plaanitakse kĂ€esoleva artikli jĂ€rgmistes osades. KĂ€esolevas artiklis kĂ€sitleme vaid peamisi mĂ”isted ja lemmasid, mis on vajalikud sĂ”ltuvuste tuvastamise tehnikate mĂ”istmiseks.
Alustame lihtsast - diïŹerence- ja agree-set, mida kasutatakse teise tĂŒĂŒbi algoritmides. DiïŹerence-set on tulude kogum, mille vÀÀrtused ei kattu, samas kui agree-set on vastupidi - tulude kogum, mille vÀÀrtused kattuvad. Tuleb mĂ€rkida, et antud juhul kĂ€sitleme ainult sĂ”ltuvuse vasakut osa.
Samuti on oluline mĂ”iste, mis esineb ĂŒlal, algebraline mastaap. Kuna paljud kaasaegsed algoritmid töötavad selle mĂ”istega, peame saama ettekujutuse, mis see on.
Kuna defineerime mastaapi, on vajalik osaliselt jĂ€rjestatud hulga (vĂ”i partially ordered set, lĂŒhendatult - poset) mÀÀratlemine.
MÀÀratlemine 2. Ăeldakse, et hulk S on osaliselt jĂ€rjestatud binaarse suhtega ⩜, kui iga a, b, c â S korral kehtivad omadused:
- Refleksiivsus, 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
Sellist suhet nimetatakse (mittearvulise) osalise jĂ€rjekorra suhtes ja ise hulk on osaliselt jĂ€rjestatud hulk. Formaalsed tĂ€hised: âšS, ⩜â©.
Lihtsaima nĂ€itena osaliselt jĂ€rjestatud hulka vĂ”ib vĂ”tta kĂ”ik naturaalarvud N koos tavapĂ€rase jĂ€rjekorra suhtega ⩜. Pole raske kontrollida, et kĂ”ik vajalikud aksioomid kehtivad.
Rikkalikum nĂ€ide. Kaaluge hulka kĂ”igist alamhulga {1, 2, 3}, mis on jĂ€rjestatud sisaldava suhtega â. TĂ”epoolest, see suhe rahuldab kĂ”iki osalise jĂ€rjekorra tingimusi, seega âšP ({1, 2, 3}), ââ© - osaliselt jĂ€rjestatud hulk. Allolevas joonises on kujutatud selle hulga struktuuri: kui ĂŒhel elemendil on nooled teise elemendini, siis on nad jĂ€rjekorras.

Me vajame veel kahte lihtsat definitsiooni matemaatika valdkonnast â suprema (supremum) ja infima (inïŹmum).
MÀÀratlemine 3. Olgu âšS, ⩜⩠â osaliselt jĂ€rjekorda seatud hulk, A â S. A ĂŒlemine piir on selline element u â S, et âx â S: x ⩜ u. Olgu U â kĂ”ikide ĂŒlemiste piiride hulk S-is. Kui U-s on minimaalne element, siis nimetatakse seda supremaks ja tĂ€histatakse kui sup A.
Sarnasel viisil mÀÀratletakse tÀpsuse madalam piir.
MÀÀratlemine 4. Olgu âšS, ⩜⩠â osaliselt jĂ€rjekorda seatud hulk, A â S. A madalam piir on selline element l â S, et âx â S: l ⩜ x. Olgu L â kĂ”ikide madalamate piiride hulk S-is. Kui L-s on maksimaalne element, siis nimetatakse seda infimuks ja tĂ€histatakse kui inf A.
Vaatleme nĂ€iteks eespool toodud osaliselt jĂ€rjekorda seatud hulka âšP ({1, 2, 3}), ââ© ja leiame selles suprema ja infima:

NĂŒĂŒd on vĂ”imalik sĂ”nastada algebralise sĂŒdamiku definitsioon.
MÀÀratlemine 5. Olgu âšP, ⩜⩠â osaliselt jĂ€rjekorda seatud hulk, kus igal kahel elemendil on tĂ€psed ĂŒlemised ja alumised piirid. Siis nimetatakse P algebralise sĂŒdamikuks. Samuti kirjutatakse sup{x, y} kui x âš y ja inf {x, y} â kui x â§ y.
Kontrollime, et meie töönĂ€ide âšP ({1, 2, 3}), ââ© on sĂŒdamik. TĂ”epoolest, igale a, b â P ({1, 2, 3}) kehtib, et aâšb = aâȘb ja aâ§b = aâ©b. NĂ€iteks vaatleme hulkasid {1, 2} ja {1, 3} ning leiame nende infima ja suprema. Kui me need ristame, saame hulga {1}, mis on infimum. Supremumi saame nende ĂŒhinemisel â {1, 2, 3}.
Algoritmides, mis avastavad FZ-d, esitatakse otsinguruum sageli sĂŒdamiku kujul, kus ĂŒhe elemendi kogud (loe: sĂŒdamiku otsingu esimene tase, kus sĂ”ltuvuste vasak pool koosneb ĂŒhest atribuudist) on igaĂŒks algse suhte atribuut.
Alguses kĂ€sitletakse sĂ”ltuvusi, mis on vormis â
â Ăksik atribuut. See samm aitab mÀÀrata, millised atribuudid on pĂ”hivĂ”tmed (selliste atribuutide puhul ei ole determinantide olemasolu ja seetĂ”ttu on vasak pool tĂŒhi). JĂ€rgnevalt liiguvad sellised algoritmid sĂŒdamikus ĂŒlespoole. Siiski tuleb mĂ€rkida, et sĂŒdamikku ei pea kogu aeg lĂ€bima, see tĂ€hendab, et kui sisestada soovitud maksimaalne vasaku poole suurus, ei liigu algoritm edasi tasemest, millel on selline suurus.
Allpool on nĂ€idatud, kuidas saab algebralist ruumi kasutada FZ otsingu ĂŒlesande lahendamiseks. Siin esindab iga serv (X, XY) sĂ”ltuvust tĂ€hendab, et kui meil on kaks tupleksit. NĂ€iteks oleme lĂ€binud esimese taseme ja teame, et sĂ”ltuvus on olemas A â B (kujundame selle rohelise seosega tippude vahel A ja B). Seega, kui liigume ruumis ĂŒlespoole, ei pea me kontrollima sĂ”ltuvust A, C â B, kuna see ei ole enam minimaalne. Samamoodi ei kontrolliks me seda, kui sĂ”ltuvus oleks C â B.


. Lisaks kasutavad enamik kaasaegseid FZ otsingu algoritme tavaliselt andmestruktuuri, nagu partitsioon (originaalis - stripped partition [1]). Partitsiooni formaalne mÀÀratlemine on jÀrgmine:
MÀÀratlemine 6. Olgu X â R - atribuute kogum suhtes r. Klaster on r-tuple'ide indeksite kogum, millel on X jaoks sama vÀÀrtus, st c(t) = {i|ti[X] = t[X]}. Partitsioon on klastrite kogum, mis vĂ€listab ĂŒhe pikkusega klastrid:

Lihtsustatult öeldes esindab partitsioon atribuuti X nimetuste kogumit, kus iga nimekiri sisaldab ridade numbreid, millel on sama vÀÀrtus X. Kaasaegses kirjanduses struktuuri, mis esindab partitsioone, nimetatakse position list index (PLI). Ăhe pikkusega klastrid jĂ€etakse PLI kokkusurumise eesmĂ€rgil vĂ€lja, kuna need on klastrid, mis sisaldavad ainult ĂŒhte kirje numbrit, millel on ainulaadne vÀÀrtus, mida on alati lihtne mÀÀrata.
Vaatame nÀidet. Naaseme taas patsiendi tabeli juurde ja loome partitsioonid veergudele Sugu ja Sugu (vasakul on ilmunud uus veerg, kus on mÀrgitud tabeli ridade numbrid):


Sellega seoses, mÀÀratlemise kohaselt on partitsioon veerule Sugu tĂ”epoolest tĂŒhi, kuna ĂŒhekordsed klastrid jĂ€etakse partitsioonist vĂ€lja.
Partitsioone saab luua mitme atribuudi jÀrgi. Selleks on kaks teed: kÔndida tabeli kaudu ja luua partitsioon kohe kÔikide vajalike atribuutide jÀrgi, vÔi luua see osade partitsioonide ristumise operatsiooni abil. FZ otsingu algoritmid kasutavad teist varianti.
Lihtsustatult öeldes, et saada partitsioon veergude jĂ€rgi ABC, saab vĂ”tta partitsioonid jaoks AC ja B (vĂ”i mĂ”ni muu mitteĂŒhtivate alamkogumite kogum) ja nende omavaheline ristamine. Kaks partitsiooni ristumise operatsioon eraldab pikimad klastrid, mis on mĂ”lema partitsiooni jaoks ĂŒhised.
Vaatame nÀidet:


Esimesel juhul saime tĂŒhja partitsiooni. Kui vaadata tabelit, siis tĂ”esti, kahe atribuudiga ei ole sama vÀÀrtust. Kui me aga muudame tabelit veidi (parem juhul), saame mitte-tĂŒhja ristumise. Sellisel juhul sisaldavad read 1 ja 2 tĂ”epoolest sama vÀÀrtust atribuutide jĂ€rgi. Sugu ja Doktor.
SeejÀrel vajame mÔistet, nagu partitsiooni suurus. Vormiliselt:

Lihtsamalt öeldes, partitsiooni suurus on klastrite arv, mis kuuluvad partitsiooni (meeles pidada, et ĂŒksikklastrid partitsiooni ei ära kuulu!):


NĂŒĂŒd saame mÀÀratleda ĂŒhe vĂ”tme lemma, mis antud partitsioonide jaoks vĂ”imaldab tuvastada, kas sĂ”ltuvus kehtib vĂ”i mitte:
Lemma 1. SĂ”ltuvus A, B â C kehtib, kui ja ainult siis, kui

Lema kohaselt on sÔltuvuse kehtivuse mÀÀramiseks vajalik jÀrgmiste nelja sammu tÀitmine:
- Arvutage sÔltuvuse vasaku osa partitsioon
- Arvutage sÔltuvuse parema osa partitsioon
- Arvutage esimese ja teise sammu korrutis
- VÔrrelge partitsioonide suurusi, mis saadi esimeses ja kolmandas etapis
Allpool on nÀide sellest, kuidas kontrollida, kas sÔltuvus on selle lemma kohaselt kehtiv:




Selles artiklis oleme kÀsitlenud selliseid mÔisteid nagu funktsionaalne sÔltuvus, ligikaudne funktsionaalne sÔltuvus, arutanud, kus neid kasutatakse, ja millised funktsionaalse sÔltuvuse otsimise algoritmid eksisteerivad. Samuti oleme pÔhjalikult kÀsitlenud baasmÔisteid, maar tabelites, intensiivselt kaasaegsetes funktsionaalse sÔltuvuse otsimise algoritmides.
Viidatud kirjandus:
- Huhtala Y. jt. TANE: Efektiivne algoritm funktsionaalsete ja ligikaudsete sĂ”ltuvuste avastamiseks // The computer journal. â 1999. â Vol. 42. â No. 2. â Lk. 100-111.
- Kruse S., Naumann F. Efektiivne ligikaudsete sĂ”ltuvuste avastamine // Proceedings of the VLDB Endowment. â 2018. â Vol. 11. â No. 7. â Lk. 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. â Lk. 821-833.
- Papenbrock T. jt. Funktsionaalse sĂ”ltuvuse avastamine: seitse algoritmi katsetavad hindamist // Proceedings of the VLDB Endowment. â 2015. â Vol. 8. â No. 10. â Lk. 1082-1093.
- Kumar A. jt. Kas ĂŒhendada vĂ”i mitte ĂŒhendada?: Liitmise ĂŒle kaks korda mĂ”tlemine enne omaduste valimist // Proceedings of the 2016 International Conference on Management of Data. â ACM, 2016. â Lk. 19-34.
- Abo Khamis M. et al. Andmebaasis Ă”ppimine haruldaste tensorite abil // 37. ACM SIGMOD-SIGACT-SIGAI sĂŒmpoosion andmebaasisĂŒsteemide pĂ”himĂ”tetest. â ACM, 2018. â lk. 325-340.
- Hellerstein J. M. et al. MADlib analĂŒĂŒtika teek: vĂ”i MAD oskused, SQL // VLDB Endowmenti protseduurid. â 2012. â V. 5. â Nr. 12. â lk. 1700-1711.
- Qin C., Rusu F. Spekulatiivsed lĂ€hendused teraskalejaotatud gradientide langetamise optimeerimisele // Neljanda töötuba andmeanalĂŒĂŒtikas pilves. â ACM, 2015. â lk. 1.
- Meng X. et al. Mllib: MasinĂ”pe Apache Sparkis // MasinĂ”ppe uuringute ajakiri. â 2016. â V. 17. â Nr. 1. â lk. 1235-1241.
Artikli autorid: , teadlane , ja , teadlane
Allikas: habr.com
