Bubuka pikeun Dependensi Fungsional

Dina artikel ieu kami bakal ngobrol ngeunaan kagumantungan fungsional dina basis data - naon aranjeunna, dimana aranjeunna dianggo sareng algoritma naon anu aya pikeun mendakanana.

Urang bakal mertimbangkeun kagumantungan fungsional dina konteks database relational. Pikeun nempatkeun éta kasarna pisan, dina database sapertos inpormasi disimpen dina bentuk tabel. Salajengna, kami nganggo konsep perkiraan anu henteu tiasa ditukeurkeun dina téori relational anu ketat: kami bakal nyebat tabel sorangan hubungan, kolom - atribut (setna - schema hubungan), sareng set nilai baris dina subset atribut. - tupel.

Bubuka pikeun Dependensi Fungsional

Contona, dina tabél di luhur, (Bénson, M, M organ) nyaéta tuple tina atribut (Pasién, Paul, Dokter).
Leuwih formal, ieu dituliskeun saperti kieu: Bubuka pikeun Dependensi Fungsional[Pasien, Gender, Dokter] = (Bénson, M, M organ).
Ayeuna urang tiasa ngenalkeun konsép gumantungna fungsional (FD):

Harti 1. Hubungan R satisfies hukum féderal X → Y (dimana X, Y ⊆ R) lamun jeung ngan lamun keur tuples Bubuka pikeun Dependensi Fungsional, Bubuka pikeun Dependensi Fungsional ∈ Sunda nyepeng: lamun Bubuka pikeun Dependensi Fungsional[X] = Bubuka pikeun Dependensi Fungsional[X], teras Bubuka pikeun Dependensi Fungsional[Y] = Bubuka pikeun Dependensi Fungsional[Y]. Dina hal ieu, urang nyebutkeun yén X (nu nangtukeun, atawa nangtukeun set atribut) functionally nangtukeun Y (set gumantung).

Dina basa sejen, ayana hukum féderal X → Y hartina lamun urang boga dua tuple di R sarta aranjeunna cocog dina atribut X, tuluy maranehna bakal coincide dina atribut Y.
Tur ayeuna, dina urutan. Hayu urang nempo atribut Sabar и Paul pikeun nu urang hayang manggihan naha aya katergantungan antara aranjeunna atanapi henteu. Pikeun sakumpulan atribut sapertos kitu, katergantungan ieu tiasa aya:

  1. Pasién → Gender
  2. Gender → Pasén

Sakumaha didefinisikeun di luhur, dina urutan pikeun kagumantungan munggaran tahan, unggal nilai kolom unik Sabar ngan hiji nilai kolom kudu cocog Paul. Jeung conto tabel ieu memang kasus. Sanajan kitu, ieu teu dianggo dina arah nu lalawanan, nyaeta, kagumantungan kadua teu puas, sarta atribut Paul sanes determinan pikeun Sabar. Nya kitu, lamun urang nyandak kagumantungan Dokter → Pasén, Anjeun bisa nempo yén éta dilanggar, saprak nilai Robin atribut ieu boga sababaraha harti béda - Ellis jeung Graham.

Bubuka pikeun Dependensi Fungsional

Bubuka pikeun Dependensi Fungsional

Ku kituna, kagumantungan fungsional ngamungkinkeun pikeun nangtukeun hubungan anu aya antara set atribut tabel. Ti dieu lajeng urang bakal mertimbangkeun sambungan paling metot, atawa rada misalna X → Ynaon aranjeunna:

  • non-trivial, nyaeta, sisi katuhu gumantungna teu sawaréh ti kénca (Y ̸⊆ X);
  • minimal, nyaeta, euweuh gumantungna misalna Z → Yyen Z ⊂ X.

Katergantungan anu dianggap dugi ka titik ieu ketat, nyaéta, aranjeunna henteu nyayogikeun pelanggaran dina méja, tapi salian ti éta, aya ogé anu ngamungkinkeun sababaraha inconsistency antara nilai-nilai tuple. kagumantungan sapertos ieu disimpen dina kelas misah, disebut perkiraan, sarta diwenangkeun dilanggar pikeun sababaraha tuples. Jumlah ieu diatur ku emax indikator kasalahan maksimum. Contona, laju kasalahan Bubuka pikeun Dependensi Fungsional = 0.01 bisa hartosna yén gumantungna bisa dilanggar ku 1% tina tuples sadia on set dianggap atribut. Nyaéta, pikeun 1000 rékaman, maksimal 10 tuple tiasa ngalanggar Hukum Federal. Kami bakal nganggap métrik anu rada béda, dumasar kana nilai pasangan anu béda tina tuple anu dibandingkeun. Pikeun kecanduan X → Y dina sikep r eta dianggap saperti kieu:

Bubuka pikeun Dependensi Fungsional

Hayu urang ngitung kasalahan pikeun Dokter → Pasén tina conto di luhur. Kami ngagaduhan dua tuple anu nilaina béda dina atribut Sabar, tapi coincide on Dokter: Bubuka pikeun Dependensi Fungsional[Dokter, Pasén] = (Robin, Ellis) jeung Bubuka pikeun Dependensi Fungsional[Dokter, Pasén] = (Robin, Graham). Saatos definisi kasalahan, urang kedah ngémutan sadaya pasangan anu bertentangan, anu hartosna bakal aya dua di antarana: (Bubuka pikeun Dependensi Fungsional, Bubuka pikeun Dependensi Fungsional) jeung inversina (Bubuka pikeun Dependensi Fungsional, Bubuka pikeun Dependensi Fungsional). Hayu urang ngagantikeun kana rumus sareng kéngingkeun:

Bubuka pikeun Dependensi Fungsional

Ayeuna hayu urang coba pikeun ngajawab patarosan: "Naha eta sadayana pikeun?" Kanyataanna, hukum féderal béda. Jinis kahiji nyaéta dependensi anu ditangtukeun ku administrator dina tahap desain database. Biasana jumlahna sakedik, ketat, sareng aplikasi utama nyaéta normalisasi data sareng desain skéma relasional.

Tipe kadua nyaéta dependensi, nu ngagambarkeun data "disumputkeun" jeung hubungan saméméhna kanyahoan antara atribut. Hartina, katergantungan sapertos henteu dipikiran dina waktos desain sareng aranjeunna dipendakan pikeun set data anu tos aya, ku kituna engké, dumasar kana seueur hukum féderal anu diidentifikasi, naon waé kasimpulan tiasa ditarik ngeunaan inpormasi anu disimpen. Justru katergantungan ieu anu kami damel. Éta téh diurus ku sakabeh widang data pertambangan jeung sagala rupa téhnik pilarian sarta algoritma diwangun dina dasar maranéhanana. Hayu urang terang kumaha katergantungan fungsional anu kapanggih (persis atanapi perkiraan) dina data naon waé tiasa mangpaat.

Bubuka pikeun Dependensi Fungsional

Kiwari, salah sahiji aplikasi utama katergantungan nyaéta beberesih data. Ieu ngalibatkeun ngembangkeun prosés pikeun ngaidentipikasi "data kotor" teras ngabenerkeunana. Conto nonjol tina "data kotor" nyaéta duplikat, kasalahan data atanapi typo, nilai leungit, data luntur, spasi tambahan, jeung sajabana.

Conto kasalahan data:

Bubuka pikeun Dependensi Fungsional

Conto duplikat dina data:

Bubuka pikeun Dependensi Fungsional

Contona, urang boga tabel sarta susunan hukum féderal nu kudu dieksekusi. Ngabersihan data dina hal ieu ngalibatkeun ngarobih data supados Hukum Federal janten leres. Dina hal ieu, jumlah modifikasi kedah minimal (prosedur ieu boga algoritma sorangan, nu urang moal difokuskeun dina artikel ieu). Di handap ieu conto transformasi data sapertos kitu. Di kénca nyaéta hubungan aslina, nu, écés, FLs perlu teu patepung (conto palanggaran salah sahiji FLs disorot beureum). Di beulah katuhu aya hubungan anu diropéa, kalayan sél héjo nunjukkeun nilai anu dirobih. Saatos prosedur ieu, kagumantungan anu diperyogikeun mimiti dijaga.

Bubuka pikeun Dependensi Fungsional

Aplikasi populér séjén nyaéta desain database. Di dieu perlu ngelingan bentuk normal sareng normalisasi. Normalisasi nya éta prosés nyangking hiji hubungan kana saluyu jeung sakumpulan sarat nu tangtu, nu masing-masing ditangtukeun ku wangun normal dina cara sorangan. Kami moal ngajelaskeun sarat tina rupa-rupa bentuk normal (ieu dilakukeun dina buku naon waé dina kursus database pikeun pamula), tapi urang ngan ukur bakal dicatet yén masing-masing nganggo konsép katergantungan fungsional dina cara sorangan. Barina ogé, FLs inherently konstrain integritas nu dicokot kana akun nalika ngarancang database (dina konteks tugas ieu, FLs sok disebut superkeys).

Hayu urang nganggap aplikasi maranéhanana pikeun opat bentuk normal dina gambar di handap ieu. Inget yen Boyce-Codd formulir normal leuwih ketat ti formulir katilu, tapi kirang ketat ti kaopat. Kami henteu nganggap anu terakhir pikeun ayeuna, sabab rumusanna butuh pamahaman katergantungan multi-hargana, anu henteu pikaresepeun pikeun urang dina tulisan ieu.

Bubuka pikeun Dependensi Fungsional
Bubuka pikeun Dependensi Fungsional
Bubuka pikeun Dependensi Fungsional
Bubuka pikeun Dependensi Fungsional

Wewengkon anu sanés dimana katergantungan mendakan aplikasina nyaéta ngirangan dimensi ruang fitur dina tugas sapertos ngawangun klasifikasi Bayes naif, ngaidentipikasi fitur anu penting, sareng reparameterisasi modél régrési. Dina artikel aslina, tugas ieu disebut tekad tina kaleuleuwihan sarta fitur relevancy [5, 6], sarta eta direngsekeun ku pamakéan aktif tina konsép database. Kalayan munculna karya sapertos kitu, urang tiasa nyebatkeun yén dinten ayeuna aya paménta pikeun solusi anu ngamungkinkeun urang ngagabungkeun database, analitik sareng palaksanaan masalah optimasi di luhur kana hiji alat [7, 8, 9].

Aya seueur algoritma (boh modern sareng henteu modern) pikeun milarian hukum féderal dina set data. Algoritma sapertos kitu tiasa dibagi kana tilu kelompok:

  • Algoritma ngagunakeun traversal of aljabar lattices (Lattice traversal algorithms)
  • Algoritma dumasar kana milarian nilai anu sapuk (Algoritma béda sareng satuju)
  • Algoritma dumasar kana babandingan pasangan (Algoritma induksi gumantungna)

Katerangan ringkes unggal jinis algoritma dibere dina tabel di handap ieu:
Bubuka pikeun Dependensi Fungsional

Anjeun tiasa maca langkung seueur ngeunaan klasifikasi ieu [4]. Di handap ieu conto algoritma pikeun tiap jenis:

Bubuka pikeun Dependensi Fungsional

Bubuka pikeun Dependensi Fungsional

Ayeuna, algoritma anyar muncul anu ngagabungkeun sababaraha pendekatan pikeun milarian katergantungan fungsional. Conto algoritma sapertos nyaéta Pyro [2] sareng HyFD [3]. Analisis karya maranéhanana diharepkeun dina artikel di handap ti séri ieu. Dina artikel ieu urang ngan bakal nalungtik konsép dasar jeung lemma nu diperlukeun pikeun ngarti téhnik deteksi kagumantungan.

Hayu urang mimitian ku hiji basajan - bédana- jeung satuju-set, dipaké dina tipe kadua algoritma. Difference-set nyaéta sakumpulan tupel nu teu boga nilai sarua, sedengkeun satuju-set, sabalikna, tuples nu boga nilai sarua. Eta sia noting yén dina hal ieu urang tempo ngan sisi kénca gumantungna.

Konsep penting séjénna anu kapanggih di luhur nyaéta kisi aljabar. Kusabab seueur algoritma modéren beroperasi dina konsép ieu, urang kedah gaduh ide naon éta.

Dina raraga ngawanohkeun konsép kisi a, perlu pikeun nangtukeun susunan sawaréh maréntahkeun (atawa susunan sawaréh maréntahkeun, disingget jadi poset).

Harti 2. Hiji set S disebut sawaréh diurutkeun ku relasi binér ⩽ lamun pikeun sakabéh a, b, c ∈ S sipat di handap ieu puas:

  1. Reflexivity, nyaeta, a ⩽ a
  2. Antisimétri, nyaéta, lamun a ⩽ b jeung b ⩽ a, mangka a = b
  3. Transitivity, nyaéta, pikeun a ⩽ b jeung b ⩽ c ieu kieu yén a ⩽ c


Relasi saperti kitu disebut relasi orde parsial (longgar), jeung himpunan sorangan disebut himpunan parsial. Notasi formal: ⟨S, ⩽⟩.

Salaku conto pangbasajanna tina susunan sawaréh, urang tiasa nyandak set sadaya wilangan alami N kalayan relasi orde biasa ⩽. Gampang pikeun pariksa yén sadaya aksioma anu diperyogikeun parantos puas.

Conto anu leuwih bermakna. Pertimbangkeun set sadaya subset {1, 2, 3}, diurutkeun ku hubungan inklusi ⊆. Sabenerna, hubungan ieu nyugemakeun sakabeh kaayaan urutan parsial, jadi ⟨P ({1, 2, 3}), ⊆⟩ mangrupakeun susunan sawaréh susunan. Gambar di handap nembongkeun struktur set ieu: lamun hiji unsur bisa ngahontal ku panah ka unsur sejen, aranjeunna dina hubungan urutan.

Bubuka pikeun Dependensi Fungsional

Urang peryogi dua definisi anu langkung saderhana tina widang matematika - supremum sareng infimum.

Harti 3. Misalkeun ⟨S, ⩽⟩ susunan sawaréh susunan, A ⊆ S. Wates luhur A mangrupa unsur u ∈ S sahingga ∀x ∈ S: x ⩽ u. Anggap U nyaéta set sadaya wates luhur S. Lamun aya unsur pangleutikna dina U, mangka disebut supremum sarta dilambangkeun sup A.

Konsep hiji wates handap persis diwanohkeun sarupa.

Harti 4. Misalkeun ⟨S, ⩽⟩ susunan sawaréh susunan, A ⊆ S. Infimum A mangrupa unsur l ∈ S sahingga ∀x ∈ S: l ⩽ x. Anggap L nyaéta set sadaya wates handap S. Lamun aya unsur panggedéna di L, mangka disebut infimum sarta dilambangkeun salaku inf A.

Pertimbangkeun sabagé conto susunan sawaréh di luhur ⟨P ({1, 2, 3}), ⊆⟩ sarta manggihan supremum jeung infimum di dinya:

Bubuka pikeun Dependensi Fungsional

Ayeuna urang tiasa ngarumuskeun definisi kisi aljabar.

Harti 5. Anggap ⟨P,⩽⟩ sabagéan susunan susunan sahingga unggal subset dua unsur boga wates luhur jeung handap. Saterusna P disebut kisi aljabar. Dina hal ieu, sup{x, y} ditulis salaku x ∨ y, jeung inf {x, y} salaku x ∧ y.

Hayu urang pariksa yén conto gawé urang ⟨P ({1, 2, 3}), ⊆⟩ mangrupakeun kisi. Mémang, pikeun sagala a, b ∈ P ({1, 2, 3}), a∨b = a∪b, jeung a∧b = a∩b. Contona, anggap susunan {1, 2} jeung {1, 3} sarta manggihan infimum jeung supremum maranéhanana. Upami urang motong aranjeunna, urang bakal nampi set {1}, anu bakal janten infimum. Urang meunang supremum ku ngagabungkeun aranjeunna - {1, 2, 3}.

Dina algoritma pikeun ngaidentipikasi masalah fisik, spasi pilarian mindeng digambarkeun dina bentuk kisi, dimana susunan hiji unsur (baca tingkat kahiji tina kisi pilarian, dimana sisi kénca gumantungna diwangun ku hiji atribut) ngagambarkeun unggal atribut. tina hubungan aslina.
Kahiji, urang mertimbangkeun dependensi tina formulir ∅ → Atribut tunggal. Léngkah ieu ngamungkinkeun anjeun pikeun nangtukeun atribut anu janten konci primér (pikeun atribut sapertos henteu aya determinants, sareng ku kituna sisi kénca kosong). Salajengna, algoritma sapertos pindah ka luhur sapanjang kisi. Eta sia noting yén teu sakabéh kisi bisa traversed, nyaeta, lamun ukuran maksimum nu dipikahoyong dina sisi kénca dialirkeun kana input, algoritma nu moal balik leuwih ti tingkat nu ukuranana.

Gambar di handap nembongkeun kumaha hiji kisi aljabar bisa dipaké dina masalah manggihan FZ. Di dieu unggal sisi (X, XY) ngagambarkeun kagumantungan X → Y. Contona, urang geus lulus tingkat kahiji jeung nyaho yén kecanduan dijaga A → B (urang bakal nembongkeun ieu salaku sambungan héjo antara vertex A и B). Ieu ngandung harti yén salajengna, nalika urang naek sapanjang kisi, urang bisa jadi teu pariksa gumantungna A, C → B, sabab moal deui jadi minimal. Nya kitu, urang moal pariksa deui lamun kagumantungan dilaksanakeun C → B.

Bubuka pikeun Dependensi Fungsional
Bubuka pikeun Dependensi Fungsional

Salaku tambahan, sakumaha aturan, sadaya algoritma modéren pikeun milarian hukum féderal nganggo struktur data sapertos partisi (dina sumber aslina - partisi stripped [1]). Definisi formal partisi nyaéta kieu:

Harti 6. Anggap X ⊆ R sakumpulan atribut pikeun hubungan r. Klaster nyaéta sakumpulan indéks tuples dina r anu boga nilai sarua pikeun X, nyaéta, c(t) = {i|ti[X] = t[X]}. Partisi mangrupikeun sakumpulan klaster, teu kalebet klaster panjang unit:

Bubuka pikeun Dependensi Fungsional

Dina kecap basajan, partisi pikeun atribut X nyaéta sakumpulan daptar, dimana unggal daptar ngandung nomer garis kalayan nilai anu sami pikeun X. Dina literatur modern, struktur ngalambangkeun partisi disebut indéks daptar posisi (PLI). klaster Unit-panjangna teu kaasup keur kaperluan komprési PLI sabab klaster nu ngandung ukur angka catetan jeung nilai unik nu bakal salawasna jadi gampang pikeun ngaidentipikasi.

Hayu urang nempo hiji conto. Hayu urang balik deui ka méja anu sami sareng pasien sareng ngawangun partisi pikeun kolom Sabar и Paul (Kolom anyar parantos muncul di kénca, dimana nomer baris tabel ditandaan):

Bubuka pikeun Dependensi Fungsional

Bubuka pikeun Dependensi Fungsional

Leuwih ti éta, nurutkeun harti, partisi pikeun kolom Sabar sabenerna bakal kosong, saprak klaster tunggal teu kaasup ti partisi nu.

Partisi tiasa didapet ku sababaraha atribut. Sareng aya dua cara pikeun ngalakukeun ieu: ku ngalangkungan méja, ngawangun partisi nganggo sadaya atribut anu diperyogikeun sakaligus, atanapi ngawangun éta nganggo operasi simpang partisi nganggo sawaréh atribut. Algoritma pilarian hukum Federal ngagunakeun pilihan kadua.

Dina kecap basajan, pikeun, contona, meunang partisi ku kolom ABC, Anjeun tiasa nyandak partitions pikeun AC и B (atawa set séjén tina subsets disjoint) jeung intersect aranjeunna saling. Operasi simpang dua partitions milih klaster tina panjangna greatest nu umum pikeun duanana partitions.

Hayu urang nempo hiji conto:

Bubuka pikeun Dependensi Fungsional

Bubuka pikeun Dependensi Fungsional

Dina kasus anu pertama, kami nampi partisi kosong. Upami anjeun ningal sacara saksama dina tabél, maka leres-leres henteu aya nilai anu sami pikeun dua atribut. Upami urang rada ngarobih méja (kasus di beulah katuhu), urang bakal nampi simpang anu henteu kosong. Sumawona, garis 1 sareng 2 saleresna ngandung nilai anu sami pikeun atribut Paul и Доктор.

Salajengna, urang peryogi konsép sapertos ukuran partisi. Sacara resmi:

Bubuka pikeun Dependensi Fungsional

Kantun nempatkeun, ukuran partisi nyaéta jumlah klaster anu kalebet dina partisi (inget yén klaster tunggal henteu kalebet dina partisi!):

Bubuka pikeun Dependensi Fungsional

Bubuka pikeun Dependensi Fungsional

Ayeuna urang tiasa netepkeun salah sahiji lema konci, anu pikeun partisi anu dipasihkeun ngamungkinkeun urang pikeun nangtukeun naha gumantungna dilaksanakeun atanapi henteu:

Lemah 1. kagumantungan A, B → C nahan lamun jeung ngan lamun

Bubuka pikeun Dependensi Fungsional

Numutkeun lemma, pikeun nangtukeun naha gumantungna nahan, opat léngkah kedah dilakukeun:

  1. Itung partisi pikeun sisi kénca kagumantungan
  2. Itung partisi pikeun sisi katuhu kagumantungan
  3. Itung hasil tina hambalan kahiji jeung kadua
  4. Bandingkeun ukuran partisi anu dicandak dina léngkah kahiji sareng katilu

Di handap ieu conto mariksa naha gumantungna nahan nurutkeun lemma ieu:

Bubuka pikeun Dependensi Fungsional
Bubuka pikeun Dependensi Fungsional
Bubuka pikeun Dependensi Fungsional
Bubuka pikeun Dependensi Fungsional

Dina artikel ieu, urang nalungtik konsép kayaning kagumantungan fungsional, gumantungna fungsionalitas perkiraan, kasampak di mana maranéhna dipaké, kitu ogé algoritma naon pikeun neangan fungsi fisik aya. Urang ogé nalungtik di jéntré konsép dasar tapi penting anu aktip dipaké dina algoritma modern pikeun néangan hukum féderal.

Rujukan:

  1. Huhtala Y. dkk. TANE: Algoritma efisien pikeun mendakan kagumantungan fungsional sareng perkiraan // Jurnal komputer. – 1999. – T. 42. – No. 2. – kaca 100-111.
  2. Kruse S., Naumann F. Éfisién kapanggihna gumantungna perkiraan // Prosiding tina Endowment VLDB. – 2018. – T. 11. – No. 7. – kaca 759-772.
  3. Papenbrock T., Naumann F. A pendekatan hibrid pikeun kapanggihna kagumantungan fungsional // Prosiding 2016 Konférénsi Internasional on Manajemén Data. - ACM, 2016. - kaca 821-833.
  4. Papenbrock T. et al. Papanggihan kagumantungan fungsional: Evaluasi eksperimen tujuh algoritma //Prosiding Endowment VLDB. – 2015. – T. 8. – No. 10. – kaca 1082-1093.
  5. Kumar A. et al. Pikeun gabung atanapi henteu gabung?: Mikir dua kali ngeunaan gabung saméméh pilihan fitur //Prosiding Konférénsi Internasional 2016 on Manajemén Data. - ACM, 2016. - kaca 19-34.
  6. Abo Khamis M. dkk. Diajar dina basis data kalayan tensor jarang // Prosiding Simposium ACM SIGMOD-SIGACT-SIGAI ka-37 ngeunaan Prinsip Sistem Database. - ACM, 2018. - kaca 325-340.
  7. Hellerstein J. M. dkk. Perpustakaan analytics MADlib: atanapi kaahlian MAD, SQL //Proceedings of the VLDB Endowment. – 2012. – T. 5. – No. 12. - kaca 1700-1711.
  8. Qin C., Rusu F. perkiraan spekulatif pikeun terascale disebarkeun gradién optimasi turunan // Prosiding Bengkel Kaopat on Data analytics dina Awan. – ACM, 2015. – P. 1.
  9. Meng X. et al. Mllib: Mesin diajar di Apache spark // The Journal of Machine Learning Research. – 2016. – T. 17. – No. 1. – kaca 1235-1241.

Panulis artikel: Anastasia Birillo, panalungtik di Panalungtikan JetBrains, murid puseur CS и Nikita Bobrov, panalungtik di Panalungtikan JetBrains

sumber: www.habr.com

Tambahkeun komentar