I denne artikkelen vil vi snakke om funksjonelle avhengigheter i databaser - hva de er, hvor de brukes og hvilke algoritmer som finnes for Ă„ finne dem.
Vi vil vurdere funksjonelle avhengigheter i sammenheng med relasjonsdatabaser. For Ä si det veldig grovt, i slike databaser lagres informasjon i form av tabeller. Deretter bruker vi omtrentlige konsepter som ikke er utskiftbare i streng relasjonsteori: vi vil kalle selve tabellen en relasjon, kolonnene - attributter (deres sett - et relasjonsskjema), og settet med radverdier pÄ et undersett av attributter - en tuppel.

For eksempel, i tabellen ovenfor, (Benson, M, M orgel) er en tuppel av attributter (pasient, Paul, lege).
Mer formelt skrives dette slik:
[Pasient, kjĂžnn, lege] = (Benson, M, M orgel).
NĂ„ kan vi introdusere konseptet funksjonell avhengighet (FD):
Definisjon 1. Relasjonen R tilfredsstiller den fĂžderale loven X â Y (hvor X, Y â R) hvis og bare hvis for noen tupler
,
â R holder: if
[X] =
[X], da
[Y] =
[Y]. I dette tilfellet sier vi at X (determinanten, eller definerende sett med attributter) funksjonelt bestemmer Y (det avhengige settet).
Med andre ord, tilstedevĂŠrelsen av en fĂžderal lov X â Y betyr at hvis vi har to tuples inn R og de samsvarer i attributter X, da vil de falle sammen i attributter Y.
Og nÄ, i rekkefÞlge. La oss se pÄ attributtene En pasient О KjÞnn som vi Þnsker Ä finne ut om det er avhengigheter mellom dem eller ikke. For et slikt sett med attributter kan fÞlgende avhengigheter eksistere:
- Pasient â KjĂžnn
- KjĂžnn â Pasient
Som definert ovenfor, for at den fĂžrste avhengigheten skal holde, hver unike kolonneverdi En pasient bare Ă©n kolonneverdi mĂ„ samsvare KjĂžnn. Og for eksempeltabellen er dette faktisk tilfelle. Dette fungerer imidlertid ikke i motsatt retning, det vil si at den andre avhengigheten ikke er oppfylt, og attributtet KjĂžnn er ikke en determinant for Pasient. Tilsvarende, hvis vi tar avhengigheten Lege â Pasient, kan du se at den brytes, siden verdien Robin denne egenskapen har flere forskjellige betydninger - Ellis og Graham.


Dermed gjĂžr funksjonelle avhengigheter det mulig Ă„ bestemme de eksisterende relasjonene mellom sett med tabellattributter. Herfra og utover vil vi vurdere de mest interessante forbindelsene, eller snarere slike X â Yhva de er:
- ikke-trivielt, det vil si at hĂžyre side av avhengigheten ikke er en undergruppe av venstre (Y Ìžâ X);
- minimal, det vil si at det ikke er noen slik avhengighet Z â YAt Z â X.
Avhengighetene som ble vurdert frem til dette punktet var strenge, det vil si at de ikke sÞrget for noen brudd pÄ bordet, men i tillegg til dem er det ogsÄ de som tillater en viss inkonsekvens mellom verdiene til tuplene. Slike avhengigheter er plassert i en egen klasse, kalt omtrentlig, og tillates krenket for et visst antall tupler. Dette belÞpet reguleres av maksimal feilindikator emax. For eksempel feilprosenten
= 0.01 kan bety at avhengigheten kan brytes med 1 % av de tilgjengelige tuplene pĂ„ det vurderte settet med attributter. Det vil si at for 1000 poster kan maksimalt 10 tuples bryte den fĂžderale loven. Vi vil vurdere en litt annen beregning, basert pĂ„ parvis forskjellige verdier av tuplene som sammenlignes. For avhengighet X â Y pĂ„ holdning r det anses slik:

La oss beregne feilen for Lege â Pasient fra eksempelet ovenfor. Vi har to tupler hvis verdier er forskjellige pĂ„ attributtet En pasient, men sammenfaller Doktor:
[Lege, pasient] = (Robin, Ellis) Og
[Lege, pasient] = (Robin, Graham). Etter definisjonen av en feil mÄ vi ta hensyn til alle motstridende par, noe som betyr at det vil vÊre to av dem: (
,
) og dens inverse (
,
). La oss erstatte det med formelen og fÄ:

La oss nÄ prÞve Ä svare pÄ spÞrsmÄlet: "Hvorfor er alt for?" Faktisk er fÞderale lover forskjellige. Den fÞrste typen er de avhengighetene som bestemmes av administratoren pÄ databasedesignstadiet. De er vanligvis fÄ i antall, strenge, og hovedapplikasjonen er datanormalisering og relasjonsskjemadesign.
Den andre typen er avhengigheter som representerer "skjulte" data og tidligere ukjente forhold mellom attributter. Det vil si at slike avhengigheter ikke ble tenkt pÄ pÄ utformingstidspunktet, og de finnes for det eksisterende datasettet, slik at det senere, basert pÄ de mange identifiserte fÞderale lovene, kan trekkes noen konklusjoner om den lagrede informasjonen. Det er nettopp disse avhengighetene vi jobber med. De hÄndteres av et helt felt av data mining med ulike sÞketeknikker og algoritmer bygget pÄ deres grunnlag. La oss finne ut hvordan funnfunksjonelle avhengigheter (eksakte eller omtrentlige) i data kan vÊre nyttige.

I dag er en av hovedapplikasjonene for avhengigheter datarensing. Det innebÊrer Ä utvikle prosesser for Ä identifisere "skitne data" og deretter korrigere dem. Fremtredende eksempler pÄ "skitne data" er duplikater, datafeil eller skrivefeil, manglende verdier, utdaterte data, ekstra mellomrom og lignende.
Eksempel pÄ datafeil:

Eksempel pÄ duplikater i data:

For eksempel har vi en tabell og et sett med fÞderale lover som mÄ utfÞres. Datarensing innebÊrer i dette tilfellet Ä endre dataene slik at de fÞderale lovene blir korrekte. I dette tilfellet bÞr antallet modifikasjoner vÊre minimalt (denne prosedyren har sine egne algoritmer, som vi ikke vil fokusere pÄ i denne artikkelen). Nedenfor er et eksempel pÄ en slik datatransformasjon. Til venstre er det opprinnelige forholdet, der de nÞdvendige FL-ene Äpenbart ikke er oppfylt (et eksempel pÄ brudd pÄ en av FL-ene er uthevet i rÞdt). Til hÞyre er det oppdaterte forholdet, med de grÞnne cellene som viser de endrede verdiene. Etter denne prosedyren begynte de nÞdvendige avhengighetene Ä opprettholdes.

Et annet populÊrt program er databasedesign. Her er det verdt Ä minne om normale former og normalisering. Normalisering er prosessen med Ä bringe et forhold i samsvar med et visst sett med krav, som hver er definert av normalformen pÄ sin egen mÄte. Vi vil ikke beskrive kravene til ulike normale former (dette gjÞres i en hvilken som helst bok om et databasekurs for nybegynnere), men vi vil bare merke oss at hver av dem bruker konseptet funksjonelle avhengigheter pÄ sin egen mÄte. Tross alt er FL-er iboende integritetsbegrensninger som tas i betraktning nÄr man designer en database (i sammenheng med denne oppgaven kalles FL-er noen ganger supernÞkler).
La oss vurdere sÞknaden deres for de fire normale skjemaene pÄ bildet nedenfor. Husk at Boyce-Codds normalform er strengere enn den tredje formen, men mindre streng enn den fjerde. Vi vurderer ikke sistnevnte forelÞpig, siden formuleringen krever en forstÄelse av avhengigheter med flere verdier, som ikke er interessante for oss i denne artikkelen.




Et annet omrÄde der avhengigheter har funnet sin anvendelse er Ä redusere dimensjonaliteten til funksjonsrommet i oppgaver som Ä bygge en naiv Bayes-klassifiserer, identifisere betydelige funksjoner og reparametrisere en regresjonsmodell. I de originale artiklene kalles denne oppgaven bestemmelse av redundant og funksjonsrelevans [5, 6], og den lÞses med aktiv bruk av databasekonsepter. Med bruken av slike verk kan vi si at det i dag er etterspÞrsel etter lÞsninger som lar oss kombinere databasen, analyser og implementering av de ovennevnte optimaliseringsproblemene til ett verktÞy [7, 8, 9].
Det finnes mange algoritmer (bÄde moderne og ikke sÄ moderne) for Ä sÞke etter fÞderale lover i et datasett. Slike algoritmer kan deles inn i tre grupper:
- Algoritmer som bruker traversering av algebraiske gitter (Gitter-traversal-algoritmer)
- Algoritmer basert pÄ sÞk etter avtalte verdier (Differanse- og enig-sett algoritmer)
- Algoritmer basert pÄ parvise sammenligninger (avhengighetsinduksjonsalgoritmer)
En kort beskrivelse av hver type algoritme er presentert i tabellen nedenfor:

Du kan lese mer om denne klassifiseringen [4]. Nedenfor er eksempler pÄ algoritmer for hver type:


For tiden dukker det opp nye algoritmer som kombinerer flere tilnÊrminger for Ä finne funksjonelle avhengigheter. Eksempler pÄ slike algoritmer er Pyro [2] og HyFD [3]. En analyse av arbeidet deres forventes i de fÞlgende artiklene i denne serien. I denne artikkelen vil vi bare undersÞke de grunnleggende konseptene og lemmaet som er nÞdvendige for Ä forstÄ teknikker for avhengighetsdeteksjon.
La oss starte med en enkel - forskjell- og enig-sett, brukt i den andre typen algoritmer. Differansesett er et sett med tupler som ikke har de samme verdiene, mens enig-sett tvert imot er tupler som har samme verdier. Det er verdt Ă„ merke seg at i dette tilfellet vurderer vi bare venstre side av avhengigheten.
Et annet viktig konsept som ble mÞtt ovenfor er det algebraiske gitteret. Siden mange moderne algoritmer opererer pÄ dette konseptet, mÄ vi ha en ide om hva det er.
For Ă„ introdusere konseptet med et gitter, er det nĂždvendig Ă„ definere et delvis ordnet sett (eller delvis ordnet sett, forkortet som poset).
Definisjon 2. Et sett S sies Ă„ vĂŠre delvis ordnet etter den binĂŠre relasjonen ⩜ hvis for alle a, b, c â S fĂžlgende egenskaper er oppfylt:
- Refleksivitet, det vil si a ⩜ a
- Antisymmetri, det vil si hvis a ⩜ b og b ⩜ a, sĂ„ er a = b
- Transitivitet, det vil si for a ⩜ b og b ⩜ c fĂžlger det at a ⩜ c
En slik relasjon kalles en (lĂžs) partiell ordensrelasjon, og selve settet kalles et delvis ordnet sett. Formell notasjon: âšS, ⩜â©.
Som det enkleste eksemplet pĂ„ et delvis ordnet sett, kan vi ta settet med alle naturlige tall N med den vanlige rekkefĂžlgerelasjonen ⩜. Det er lett Ă„ verifisere at alle nĂždvendige aksiomer er oppfylt.
Et mer meningsfylt eksempel. Tenk pĂ„ settet med alle delmengder {1, 2, 3}, sortert etter inklusjonsrelasjonen â. Faktisk tilfredsstiller denne relasjonen alle delordrebetingelser, sĂ„ âšP ({1, 2, 3}), ââ© er et delvis ordnet sett. Figuren nedenfor viser strukturen til dette settet: hvis ett element kan nĂ„s med piler til et annet element, er de i en rekkefĂžlge.

Vi vil trenge ytterligere to enkle definisjoner fra matematikkfeltet - supremum og infimum.
Definisjon 3. La âšS, ⩜⩠vĂŠre et delvis ordnet sett, A â S. Den Ăžvre grensen til A er et element u â S slik at âx â S: x ⩜ u. La U vĂŠre mengden av alle Ăžvre grenser for S. Hvis det er et minste element i U, kalles det supremum og betegnes sup A.
Konseptet med en eksakt nedre grense introduseres pÄ samme mÄte.
Definisjon 4. La âšS, ⩜⩠vĂŠre et delvis ordnet sett, A â S. Infimumet til A er et element l â S slik at âx â S: l ⩜ x. La L vĂŠre mengden av alle nedre grenser for S. Hvis det er et stĂžrste element i L, kalles det et infimum og betegnes som inf A.
Betrakt som et eksempel det ovenfor delvis ordnede settet âšP ({1, 2, 3}), ââ© og finn supremum og infimum i det:

NĂ„ kan vi formulere definisjonen av et algebraisk gitter.
Definisjon 5. La âšP,⩜⩠vĂŠre et delvis ordnet sett slik at hver delmengde med to elementer har en Ăžvre og nedre grense. Da kalles P et algebraisk gitter. I dette tilfellet skrives sup{x, y} som x âš y, og inf {x, y} som x â§ y.
La oss sjekke at arbeidseksemplet vĂ„rt âšP ({1, 2, 3}), ââ© er et gitter. Faktisk, for enhver a, b â P ({1, 2, 3}), aâšb = aâȘb og aâ§b = aâ©b. Tenk for eksempel pĂ„ settene {1, 2} og {1, 3} og finn deres infimum og supremum. Hvis vi krysser dem, fĂ„r vi settet {1}, som vil vĂŠre infimum. Vi fĂ„r det hĂžyeste ved Ă„ kombinere dem - {1, 2, 3}.
I algoritmer for Ä identifisere fysiske problemer er sÞkerommet ofte representert i form av et gitter, der sett med ett element (les det fÞrste nivÄet i sÞkegitteret, hvor venstre side av avhengighetene bestÄr av ett attributt) representerer hvert attributt av det opprinnelige forholdet.
FĂžrst tar vi for oss avhengigheter av formen â
â Enkelt attributt. Dette trinnet lar deg bestemme hvilke attributter som er primĂŠrnĂžkler (for slike attributter er det ingen determinanter, og derfor er venstre side tom). Videre beveger slike algoritmer seg oppover langs gitteret. Det er verdt Ă„ merke seg at ikke hele gitteret kan krysses, det vil si at hvis den Ăžnskede maksimale stĂžrrelsen pĂ„ venstre side sendes til inngangen, vil ikke algoritmen gĂ„ lenger enn et nivĂ„ med den stĂžrrelsen.
Figuren under viser hvordan et algebraisk gitter kan brukes i problemet med Ă„ finne en FZ. Her hver kant (X, XY) representerer en avhengighet X â Y. For eksempel har vi passert fĂžrste nivĂ„ og vet at avhengigheten opprettholdes A â B (vi vil vise dette som en grĂžnn forbindelse mellom toppunktene A Đž B). Dette betyr at videre, nĂ„r vi beveger oss opp langs gitteret, kan det hende vi ikke sjekker avhengigheten A, C â B, fordi det ikke lenger vil vĂŠre minimalt. PĂ„ samme mĂ„te ville vi ikke sjekke det hvis avhengigheten ble holdt C â B.


I tillegg, som regel, bruker alle moderne algoritmer for Ă„ sĂžke etter fĂžderale lover en datastruktur som en partisjon (i den opprinnelige kilden - strippet partisjon [1]). Den formelle definisjonen av en partisjon er som fĂžlger:
Definisjon 6. La X â R vĂŠre et sett med attributter for relasjonen r. En klynge er et sett med indekser av tupler i r som har samme verdi for X, det vil si c(t) = {i|ti[X] = t[X]}. En partisjon er et sett med klynger, unntatt klynger med enhetslengde:

Med enkle ord, en partisjon for et attributt X er et sett med lister, der hver liste inneholder linjenummer med samme verdier for X. I moderne litteratur kalles strukturen som representerer partisjoner posisjonslisteindeks (PLI). Enhetslengdeklynger er ekskludert for PLI-komprimeringsformÄl fordi de er klynger som bare inneholder et postnummer med en unik verdi som alltid vil vÊre lett Ä identifisere.
La oss se pÄ et eksempel. La oss gÄ tilbake til samme tabell med pasienter og bygge partisjoner for kolonnene En pasient О KjÞnn (en ny kolonne har dukket opp til venstre, der tabellradnumrene er markert):


Dessuten, i henhold til definisjonen, partisjonen for kolonnen En pasient vil faktisk vĂŠre tom, siden enkeltklynger er ekskludert fra partisjonen.
Partisjoner kan oppnÄs av flere attributter. Og det er to mÄter Ä gjÞre dette pÄ: ved Ä gÄ gjennom tabellen, bygg en partisjon ved Ä bruke alle de nÞdvendige attributtene samtidig, eller bygg den ved Ä bruke operasjonen til skjÊringspunktet mellom partisjoner ved Ä bruke et undersett av attributter. SÞkealgoritmer for fÞderal lov bruker det andre alternativet.
Med enkle ord, for Ä for eksempel fÄ en partisjon etter kolonner ABC, kan du ta partisjoner for AC О B (eller et hvilket som helst annet sett med usammenhengende delmengder) og krysser dem med hverandre. Operasjonen av skjÊringspunktet mellom to partisjoner velger klynger med stÞrst lengde som er felles for begge partisjonene.
La oss se pÄ et eksempel:


I det fÞrste tilfellet mottok vi en tom partisjon. Hvis du ser nÞye pÄ tabellen, er det faktisk ingen identiske verdier for de to attributtene. Hvis vi endrer tabellen litt (saken til hÞyre), vil vi allerede fÄ et ikke-tomt kryss. Dessuten inneholder linjene 1 og 2 faktisk de samme verdiene for attributtene KjÞnn О Doctor.
Deretter trenger vi et slikt konsept som partisjonsstĂžrrelse. Formelt:

Enkelt sagt er partisjonsstĂžrrelsen antall klynger som er inkludert i partisjonen (husk at enkeltklynger ikke er inkludert i partisjonen!):


NĂ„ kan vi definere et av nĂžkkellemmaene, som for gitte partisjoner lar oss bestemme om en avhengighet holdes eller ikke:
Lemma 1. Avhengigheten A, B â C gjelder hvis og bare hvis

I fÞlge lemmaet, for Ä avgjÞre om en avhengighet holder, mÄ fire trinn utfÞres:
- Beregn partisjonen for venstre side av avhengigheten
- Beregn partisjonen for hĂžyre side av avhengigheten
- Beregn produktet av fĂžrste og andre trinn
- Sammenlign stÞrrelsene pÄ partisjonene oppnÄdd i det fÞrste og tredje trinnet
Nedenfor er et eksempel pÄ Ä sjekke om avhengigheten holder i henhold til dette lemmaet:




I denne artikkelen har vi undersÞkt begreper som funksjonell avhengighet, omtrentlig funksjonell avhengighet, sett pÄ hvor de brukes, samt hvilke algoritmer for Ä sÞke etter fysiske funksjoner som finnes. Vi undersÞkte ogsÄ i detalj de grunnleggende, men viktige konseptene som brukes aktivt i moderne algoritmer for Ä sÞke etter fÞderale lover.
Referanser:
- Huhtala Y. et al. TANE: En effektiv algoritme for Ă„ oppdage funksjonelle og omtrentlige avhengigheter //Datajournalen. â 1999. â T. 42. â Nei. 2. â s. 100-111.
- Kruse S., Naumann F. Effektiv oppdagelse av omtrentlige avhengigheter // Proceedings of the VLDB Endowment. â 2018. â T. 11. â Nei. 7. â s. 759-772.
- Papenbrock T., Naumann F. En hybrid tilnĂŠrming til funksjonell avhengighetsoppdagelse //Proceedings of the 2016 International Conference on Management of Data. â ACM, 2016. â s. 821-833.
- Papenbrock T. et al. Functional dependency discovery: En eksperimentell evaluering av syv algoritmer //Proceedings of the VLDB Endowment. â 2015. â T. 8. â Nei. 10. â s. 1082-1093.
- Kumar A. et al. Ă bli med eller ikke Ă„ bli med?: Tenker to ganger pĂ„ bli med fĂžr funksjonsvalg //Proceedings of the 2016 International Conference on Management of Data. â ACM, 2016. â s. 19-34.
- Abo Khamis M. et al. In-database lĂŠring med sparsomme tensorer //Proceedings of the 37th ACM SIGMOD-SIGACT-SIGAI Symposium on Principles of Database Systems. â ACM, 2018. â s. 325-340.
- Hellerstein J.M. et al. MADlib-analysebiblioteket: eller MAD-ferdigheter, SQL //Proceedings of the VLDB Endowment. â 2012. â T. 5. â Nei. 12. â s. 1700-1711.
- Qin C., Rusu F. Spekulative tilnĂŠrminger for terascale distribuert gradient descent-optimalisering //Proceedings of the Fourth Workshop on Data analytics in the Cloud. â ACM, 2015. â S. 1.
- Meng X. et al. Mllib: Machine learning in apache spark //The Journal of Machine Learning Research. â 2016. â T. 17. â Nei. 1. â s. 1235-1241.
Forfattere av artikkelen: , forsker ved , Đž , forsker ved
Kilde: www.habr.com
