Pengenalan kepada Ketergantungan Fungsian

Dalam artikel ini kita akan bercakap tentang kebergantungan berfungsi dalam pangkalan data - apakah ia, tempat ia digunakan dan apakah algoritma yang wujud untuk mencarinya.

Kami akan mempertimbangkan kebergantungan berfungsi dalam konteks pangkalan data hubungan. Secara kasarnya, dalam pangkalan data sedemikian maklumat disimpan dalam bentuk jadual. Seterusnya, kami menggunakan konsep anggaran yang tidak boleh ditukar ganti dalam teori hubungan yang ketat: kami akan memanggil jadual itu sendiri sebagai hubungan, lajur - atribut (set mereka - skema hubungan), dan set nilai baris pada subset atribut - tuple.

Pengenalan kepada Ketergantungan Fungsian

Sebagai contoh, dalam jadual di atas, (Benson, M, M organ) ialah sekumpulan atribut (Pesakit, Paul, Doktor).
Secara lebih formal, ini ditulis seperti berikut: Pengenalan kepada Ketergantungan Fungsian[Pesakit, Jantina, Doktor] = (organ Benson, M, M).
Sekarang kita boleh memperkenalkan konsep pergantungan fungsi (FD):

Definisi 1. Hubungan R memenuhi undang-undang persekutuan X → Y (di mana X, Y ⊆ R) jika dan hanya jika untuk mana-mana tupel Pengenalan kepada Ketergantungan Fungsian, Pengenalan kepada Ketergantungan Fungsian ∈ R memegang: jika Pengenalan kepada Ketergantungan Fungsian[X] = Pengenalan kepada Ketergantungan Fungsian[X], kemudian Pengenalan kepada Ketergantungan Fungsian[Y] = Pengenalan kepada Ketergantungan Fungsian[Y]. Dalam kes ini, kita katakan bahawa X (penentu, atau set atribut yang menentukan) secara fungsional menentukan Y (set bergantung).

Dengan kata lain, kehadiran undang-undang persekutuan X → Y bermakna jika kita mempunyai dua tupel R dan mereka sepadan dalam atribut X, maka mereka akan bertepatan dalam sifat Y.
Dan sekarang, mengikut urutan. Mari kita lihat sifat-sifatnya Seorang pesakit и Jantina yang mana kami ingin mengetahui sama ada terdapat pergantungan antara mereka atau tidak. Untuk set atribut sedemikian, kebergantungan berikut mungkin wujud:

  1. Pesakit → Jantina
  2. Jantina → Pesakit

Seperti yang ditakrifkan di atas, agar kebergantungan pertama dapat dipegang, setiap nilai lajur unik Seorang pesakit hanya satu nilai lajur mesti sepadan Jantina. Dan untuk jadual contoh ini memang berlaku. Walau bagaimanapun, ini tidak berfungsi dalam arah yang bertentangan, iaitu, pergantungan kedua tidak berpuas hati, dan atribut Jantina bukan penentu untuk sabar. Begitu juga jika kita mengambil pergantungan Doktor → Pesakit, anda boleh melihat bahawa ia dilanggar, kerana nilai Robin atribut ini mempunyai beberapa makna yang berbeza - Ellis dan Graham.

Pengenalan kepada Ketergantungan Fungsian

Pengenalan kepada Ketergantungan Fungsian

Oleh itu, kebergantungan fungsi memungkinkan untuk menentukan hubungan sedia ada antara set atribut jadual. Dari sini dan seterusnya kita akan mempertimbangkan sambungan yang paling menarik, atau sebaliknya X → Yapakah mereka:

  • bukan remeh, iaitu bahagian kanan pergantungan bukan subset kiri (Y ̸⊆ X);
  • minimum, iaitu, tiada pergantungan sedemikian Z → YItu Z ⊂ X.

Ketergantungan yang dipertimbangkan sehingga tahap ini adalah ketat, iaitu, mereka tidak memperuntukkan sebarang pelanggaran di atas meja, tetapi sebagai tambahan kepada mereka, terdapat juga yang membenarkan beberapa ketidakkonsistenan antara nilai tupel. Kebergantungan sedemikian diletakkan dalam kelas berasingan, dipanggil anggaran, dan dibenarkan untuk dilanggar untuk bilangan tupel tertentu. Jumlah ini dikawal oleh emax penunjuk ralat maksimum. Sebagai contoh, kadar ralat Pengenalan kepada Ketergantungan Fungsian = 0.01 mungkin bermakna pergantungan boleh dilanggar oleh 1% daripada tupel yang tersedia pada set atribut yang dipertimbangkan. Iaitu, untuk 1000 rekod, maksimum 10 tupel boleh melanggar Undang-undang Persekutuan. Kami akan mempertimbangkan metrik yang sedikit berbeza, berdasarkan nilai pasangan yang berbeza daripada tupel yang dibandingkan. Untuk ketagihan X → Y pada sikap r ia dianggap seperti ini:

Pengenalan kepada Ketergantungan Fungsian

Mari kita mengira ralat untuk Doktor → Pesakit daripada contoh di atas. Kami mempunyai dua tupel yang nilainya berbeza pada atribut Seorang pesakit, tetapi bertepatan Doktor: Pengenalan kepada Ketergantungan Fungsian[Doktor, Pesakit] = (Robin, Ellis) Dan Pengenalan kepada Ketergantungan Fungsian[Doktor, Pesakit] = (Robin, Graham). Mengikuti takrifan ralat, kita mesti mengambil kira semua pasangan yang bercanggah, yang bermaksud akan ada dua daripadanya: (Pengenalan kepada Ketergantungan Fungsian, Pengenalan kepada Ketergantungan Fungsian) dan penyongsangannya (Pengenalan kepada Ketergantungan Fungsian, Pengenalan kepada Ketergantungan Fungsian). Mari kita gantikannya ke dalam formula dan dapatkan:

Pengenalan kepada Ketergantungan Fungsian

Sekarang mari kita cuba menjawab soalan: "Mengapa semuanya untuk?" Malah, undang-undang persekutuan adalah berbeza. Jenis pertama ialah kebergantungan yang ditentukan oleh pentadbir pada peringkat reka bentuk pangkalan data. Mereka biasanya sedikit dalam bilangan, ketat, dan aplikasi utama ialah normalisasi data dan reka bentuk skema hubungan.

Jenis kedua ialah kebergantungan, yang mewakili data "tersembunyi" dan hubungan yang tidak diketahui sebelum ini antara atribut. Iaitu, kebergantungan sedemikian tidak difikirkan pada masa reka bentuk dan ia sudah dijumpai untuk set data sedia ada, supaya kemudian, berdasarkan banyak undang-undang persekutuan yang dikenal pasti, sebarang kesimpulan boleh dibuat tentang maklumat yang disimpan. Pergantungan inilah yang kami bekerjasama. Mereka ditangani oleh seluruh bidang perlombongan data dengan pelbagai teknik carian dan algoritma yang dibina berdasarkan mereka. Mari kita fikirkan bagaimana kebergantungan fungsi yang ditemui (tepat atau anggaran) dalam mana-mana data boleh berguna.

Pengenalan kepada Ketergantungan Fungsian

Hari ini, salah satu aplikasi utama kebergantungan ialah pembersihan data. Ia melibatkan pembangunan proses untuk mengenal pasti "data kotor" dan kemudian membetulkannya. Contoh utama "data kotor" ialah pendua, ralat atau kesilapan data, nilai yang hilang, data lapuk, ruang tambahan dan seumpamanya.

Contoh ralat data:

Pengenalan kepada Ketergantungan Fungsian

Contoh pendua dalam data:

Pengenalan kepada Ketergantungan Fungsian

Sebagai contoh, kami mempunyai jadual dan satu set undang-undang persekutuan yang mesti dilaksanakan. Pembersihan data dalam kes ini melibatkan perubahan data supaya Undang-undang Persekutuan menjadi betul. Dalam kes ini, bilangan pengubahsuaian haruslah minimum (prosedur ini mempunyai algoritma sendiri, yang tidak akan kami fokuskan dalam artikel ini). Di bawah ialah contoh transformasi data sedemikian. Di sebelah kiri ialah hubungan asal, di mana, jelas sekali, FL yang diperlukan tidak dipenuhi (contoh pelanggaran salah satu FL diserlahkan dengan warna merah). Di sebelah kanan ialah hubungan yang dikemas kini, dengan sel hijau menunjukkan nilai yang diubah. Selepas prosedur ini, kebergantungan yang diperlukan mula dikekalkan.

Pengenalan kepada Ketergantungan Fungsian

Satu lagi aplikasi popular ialah reka bentuk pangkalan data. Di sini adalah bernilai mengingat bentuk biasa dan normalisasi. Normalisasi ialah proses membawa hubungan ke dalam pematuhan dengan satu set keperluan tertentu, setiap satu ditakrifkan oleh bentuk normal dengan caranya sendiri. Kami tidak akan menerangkan keperluan pelbagai bentuk biasa (ini dilakukan dalam mana-mana buku mengenai kursus pangkalan data untuk pemula), tetapi kami hanya akan ambil perhatian bahawa setiap daripada mereka menggunakan konsep kebergantungan berfungsi dengan cara tersendiri. Lagipun, FL secara semula jadi adalah kekangan integriti yang diambil kira semasa mereka bentuk pangkalan data (dalam konteks tugas ini, FL kadangkala dipanggil superkey).

Mari kita pertimbangkan permohonan mereka untuk empat bentuk biasa dalam gambar di bawah. Ingat bahawa bentuk normal Boyce-Codd adalah lebih ketat daripada bentuk ketiga, tetapi kurang ketat daripada bentuk keempat. Kami tidak mempertimbangkan yang terakhir buat masa ini, kerana perumusannya memerlukan pemahaman tentang kebergantungan berbilang nilai, yang tidak menarik bagi kami dalam artikel ini.

Pengenalan kepada Ketergantungan Fungsian
Pengenalan kepada Ketergantungan Fungsian
Pengenalan kepada Ketergantungan Fungsian
Pengenalan kepada Ketergantungan Fungsian

Satu lagi bidang di mana kebergantungan telah menemui aplikasinya ialah mengurangkan dimensi ruang ciri dalam tugas seperti membina pengelas Bayes yang naif, mengenal pasti ciri penting dan menyusun semula model regresi. Dalam artikel asal, tugas ini dipanggil penentuan perkaitan lebihan dan ciri [5, 6], dan ia diselesaikan dengan penggunaan aktif konsep pangkalan data. Dengan kemunculan kerja-kerja sedemikian, kita boleh mengatakan bahawa hari ini terdapat permintaan untuk penyelesaian yang membolehkan kita menggabungkan pangkalan data, analitik dan pelaksanaan masalah pengoptimuman di atas ke dalam satu alat [7, 8, 9].

Terdapat banyak algoritma (moden dan tidak begitu moden) untuk mencari undang-undang persekutuan dalam set data. Algoritma sedemikian boleh dibahagikan kepada tiga kumpulan:

  • Algoritma menggunakan traversal kekisi algebra (Lattice traversal algorithms)
  • Algoritma berdasarkan pencarian nilai yang dipersetujui (Algoritma set perbezaan dan persetujuan)
  • Algoritma berdasarkan perbandingan berpasangan (Algoritma aruhan kebergantungan)

Penerangan ringkas bagi setiap jenis algoritma dibentangkan dalam jadual di bawah:
Pengenalan kepada Ketergantungan Fungsian

Anda boleh membaca lebih lanjut mengenai pengelasan ini [4]. Di bawah ialah contoh algoritma untuk setiap jenis:

Pengenalan kepada Ketergantungan Fungsian

Pengenalan kepada Ketergantungan Fungsian

Pada masa ini, algoritma baharu muncul yang menggabungkan beberapa pendekatan untuk mencari kebergantungan berfungsi. Contoh algoritma tersebut ialah Pyro [2] dan HyFD [3]. Analisis kerja mereka dijangka dalam artikel berikut dalam siri ini. Dalam artikel ini kita hanya akan mengkaji konsep asas dan lemma yang diperlukan untuk memahami teknik pengesanan pergantungan.

Mari kita mulakan dengan yang mudah - set perbezaan dan persetujuan, digunakan dalam jenis algoritma kedua. Set-perbezaan ialah set tuple yang tidak mempunyai nilai yang sama, manakala set-setuju, sebaliknya, ialah tuple yang mempunyai nilai yang sama. Perlu diingat bahawa dalam kes ini kita hanya mempertimbangkan bahagian kiri pergantungan.

Satu lagi konsep penting yang ditemui di atas ialah kekisi algebra. Oleh kerana banyak algoritma moden beroperasi pada konsep ini, kita perlu mempunyai idea tentang apa itu.

Untuk memperkenalkan konsep kekisi, adalah perlu untuk menentukan set tertib separa (atau set tertib separa, disingkatkan sebagai poset).

Definisi 2. Satu set S dikatakan sebahagiannya tertib oleh hubungan binari ⩽ jika untuk semua a, b, c ∈ S sifat berikut dipenuhi:

  1. Reflekstiviti, iaitu, a ⩽ a
  2. Antisimetri, iaitu, jika a ⩽ b dan b ⩽ a, maka a = b
  3. Transitiviti, iaitu, untuk a ⩽ b dan b ⩽ c ia mengikuti bahawa a ⩽ c


Hubungan sedemikian dipanggil hubungan tertib separa (longgar), dan set itu sendiri dipanggil set tertib separa. Notasi rasmi: ⟨S, ⩽⟩.

Sebagai contoh termudah bagi set tertib separa, kita boleh mengambil set semua nombor asli N dengan hubungan tertib biasa ⩽. Adalah mudah untuk mengesahkan bahawa semua aksiom yang diperlukan dipenuhi.

Contoh yang lebih bermakna. Pertimbangkan set semua subset {1, 2, 3}, disusun mengikut hubungan kemasukan ⊆. Sesungguhnya, hubungan ini memenuhi semua syarat tertib separa, jadi ⟨P ({1, 2, 3}), ⊆⟩ ialah set tertib separa. Rajah di bawah menunjukkan struktur set ini: jika satu elemen boleh dicapai dengan anak panah ke elemen lain, maka ia berada dalam hubungan tertib.

Pengenalan kepada Ketergantungan Fungsian

Kami memerlukan dua lagi definisi mudah dari bidang matematik - supremum dan infimum.

Definisi 3. Biarkan ⟨S, ⩽⟩ ialah set tertib separa, A ⊆ S. Sempadan atas A ialah unsur u ∈ S supaya ∀x ∈ S: x ⩽ u. Biarkan U ialah set semua sempadan atas S. Jika terdapat unsur terkecil dalam U, maka ia dipanggil supremum dan dilambangkan sup A.

Konsep sempadan bawah yang tepat diperkenalkan dengan cara yang sama.

Definisi 4. Biarkan ⟨S, ⩽⟩ ialah set tertib separa, A ⊆ S. Infimum A ialah unsur l ∈ S supaya ∀x ∈ S: l ⩽ x. Biarkan L ialah set semua sempadan bawah S. Jika terdapat unsur terbesar dalam L, maka ia dipanggil infimum dan dilambangkan sebagai inf A.

Pertimbangkan sebagai contoh set tertib separa di atas ⟨P ({1, 2, 3}), ⊆⟩ dan cari supremum dan infimum di dalamnya:

Pengenalan kepada Ketergantungan Fungsian

Sekarang kita boleh merumuskan definisi kekisi algebra.

Definisi 5. Biarkan ⟨P,⩽⟩ menjadi set tertib separa supaya setiap subset dua elemen mempunyai sempadan atas dan bawah. Kemudian P dipanggil kekisi algebra. Dalam kes ini, sup{x, y} ditulis sebagai x ∨ y, dan inf {x, y} sebagai x ∧ y.

Mari kita semak bahawa contoh kerja kita ⟨P ({1, 2, 3}), ⊆⟩ ialah kekisi. Sesungguhnya, untuk mana-mana a, b ∈ P ({1, 2, 3}), a∨b = a∪b, dan a∧b = a∩b. Sebagai contoh, pertimbangkan set {1, 2} dan {1, 3} dan cari infimum dan supremumnya. Jika kita bersilang, kita akan mendapat set {1}, yang akan menjadi infimum. Kami mendapat supremum dengan menggabungkannya - {1, 2, 3}.

Dalam algoritma untuk mengenal pasti masalah fizikal, ruang carian sering diwakili dalam bentuk kekisi, di mana set satu elemen (baca tahap pertama kekisi carian, di mana bahagian kiri kebergantungan terdiri daripada satu atribut) mewakili setiap atribut daripada hubungan asal.
Pertama, kita mempertimbangkan kebergantungan bentuk ∅ → Atribut tunggal. Langkah ini membolehkan anda menentukan atribut yang merupakan kunci utama (untuk atribut tersebut tiada penentu, dan oleh itu bahagian kiri kosong). Selanjutnya, algoritma sedemikian bergerak ke atas sepanjang kekisi. Perlu diingat bahawa tidak keseluruhan kekisi boleh dilalui, iaitu, jika saiz maksimum yang dikehendaki dari sebelah kiri dihantar ke input, maka algoritma tidak akan pergi lebih jauh daripada tahap dengan saiz itu.

Rajah di bawah menunjukkan bagaimana kekisi algebra boleh digunakan dalam masalah mencari FZ. Di sini setiap tepi (X, XY) mewakili kebergantungan X → Y. Sebagai contoh, kita telah melepasi tahap pertama dan tahu bahawa ketagihan itu dikekalkan A → B (kami akan memaparkan ini sebagai sambungan hijau antara bucu A и B). Ini bermakna selanjutnya, apabila kita bergerak ke atas di sepanjang kekisi, kita mungkin tidak menyemak pergantungan A, C → B, kerana ia tidak lagi minimum. Begitu juga, kami tidak akan menyemaknya jika pergantungan itu dipegang C → B.

Pengenalan kepada Ketergantungan Fungsian
Pengenalan kepada Ketergantungan Fungsian

Di samping itu, sebagai peraturan, semua algoritma moden untuk mencari undang-undang persekutuan menggunakan struktur data seperti partition (dalam sumber asal - stripped partition [1]). Takrif formal partition adalah seperti berikut:

Definisi 6. Biarkan X ⊆ R menjadi set atribut untuk hubungan r. Kelompok ialah satu set indeks tupel dalam r yang mempunyai nilai yang sama untuk X, iaitu, c(t) = {i|ti[X] = t[X]}. Partition ialah satu set kluster, tidak termasuk kluster panjang unit:

Pengenalan kepada Ketergantungan Fungsian

Dengan kata mudah, partition untuk atribut X ialah satu set senarai, di mana setiap senarai mengandungi nombor baris dengan nilai yang sama untuk X. Dalam kesusasteraan moden, struktur yang mewakili partition dipanggil indeks senarai kedudukan (PLI). Kluster panjang unit dikecualikan untuk tujuan pemampatan PLI kerana ia adalah kluster yang mengandungi hanya nombor rekod dengan nilai unik yang akan sentiasa mudah dikenal pasti.

Mari kita lihat satu contoh. Mari kembali ke jadual yang sama dengan pesakit dan bina sekatan untuk lajur Seorang pesakit и Jantina (lajur baharu telah muncul di sebelah kiri, di mana nombor baris jadual ditandakan):

Pengenalan kepada Ketergantungan Fungsian

Pengenalan kepada Ketergantungan Fungsian

Selain itu, mengikut definisi, partition untuk lajur Seorang pesakit sebenarnya akan kosong, kerana kluster tunggal dikecualikan daripada partition.

Partition boleh diperolehi dengan beberapa atribut. Dan terdapat dua cara untuk melakukan ini: dengan melalui jadual, bina partition menggunakan semua atribut yang diperlukan sekaligus, atau bina menggunakan operasi persilangan partition menggunakan subset atribut. Algoritma carian undang-undang persekutuan menggunakan pilihan kedua.

Dalam kata mudah, untuk, sebagai contoh, mendapatkan partition mengikut lajur ABC, anda boleh mengambil partition untuk AC и B (atau mana-mana set subset terputus yang lain) dan bersilang antara satu sama lain. Operasi persilangan dua partition memilih gugusan dengan panjang paling besar yang biasa bagi kedua-dua partition.

Mari lihat contoh:

Pengenalan kepada Ketergantungan Fungsian

Pengenalan kepada Ketergantungan Fungsian

Dalam kes pertama, kami menerima partition kosong. Jika anda melihat dengan teliti pada jadual, maka sesungguhnya, tidak ada nilai yang sama untuk kedua-dua atribut. Jika kita mengubah suai sedikit jadual (kes di sebelah kanan), kita sudah akan mendapat persimpangan yang tidak kosong. Selain itu, baris 1 dan 2 sebenarnya mengandungi nilai yang sama untuk atribut Jantina и Doktor.

Seterusnya, kita memerlukan konsep seperti saiz partition. Secara rasmi:

Pengenalan kepada Ketergantungan Fungsian

Ringkasnya, saiz partition ialah bilangan kluster yang disertakan dalam partition (ingat bahawa kluster tunggal tidak termasuk dalam partition!):

Pengenalan kepada Ketergantungan Fungsian

Pengenalan kepada Ketergantungan Fungsian

Sekarang kita boleh mentakrifkan salah satu lemma utama, yang untuk partition tertentu membolehkan kita menentukan sama ada pergantungan dipegang atau tidak:

Lema 1. Kebergantungan A, B → C memegang jika dan hanya jika

Pengenalan kepada Ketergantungan Fungsian

Menurut lemma, untuk menentukan sama ada kebergantungan berlaku, empat langkah mesti dilakukan:

  1. Kira partition untuk sebelah kiri kebergantungan
  2. Kira partition untuk sebelah kanan kebergantungan
  3. Kira hasil darab langkah pertama dan kedua
  4. Bandingkan saiz partition yang diperolehi dalam langkah pertama dan ketiga

Di bawah ialah contoh menyemak sama ada pergantungan itu berlaku mengikut lema ini:

Pengenalan kepada Ketergantungan Fungsian
Pengenalan kepada Ketergantungan Fungsian
Pengenalan kepada Ketergantungan Fungsian
Pengenalan kepada Ketergantungan Fungsian

Dalam artikel ini, kami mengkaji konsep seperti pergantungan fungsi, pergantungan fungsi anggaran, melihat di mana ia digunakan, serta algoritma untuk mencari fungsi fizikal wujud. Kami juga meneliti secara terperinci konsep asas tetapi penting yang digunakan secara aktif dalam algoritma moden untuk mencari undang-undang persekutuan.

Rujukan:

  1. Huhtala Y. et al. TANE: Algoritma yang cekap untuk menemui kebergantungan berfungsi dan anggaran //Jurnal komputer. – 1999. – T. 42. – No. 2. – ms 100-111.
  2. Kruse S., Naumann F. Penemuan anggaran kebergantungan yang cekap // Prosiding Endowmen VLDB. – 2018. – T. 11. – No. 7. – ms 759-772.
  3. Papenbrock T., Naumann F. Pendekatan hibrid kepada penemuan kebergantungan berfungsi //Prosiding Persidangan Antarabangsa 2016 mengenai Pengurusan Data. – ACM, 2016. – ms 821-833.
  4. Papenbrock T. et al. Penemuan kebergantungan fungsional: Penilaian percubaan tujuh algoritma //Prosiding Wakaf VLDB. – 2015. – T. 8. – No. 10. – ms 1082-1093.
  5. Kumar A. et al. Untuk menyertai atau tidak untuk menyertai?: Berfikir dua kali tentang menyertai sebelum pemilihan ciri //Prosiding Persidangan Antarabangsa 2016 mengenai Pengurusan Data. – ACM, 2016. – ms 19-34.
  6. Abo Khamis M. et al. Pembelajaran dalam pangkalan data dengan tensor jarang //Prosiding Simposium ACM SIGMOD-SIGACT-SIGAI ke-37 tentang Prinsip Sistem Pangkalan Data. – ACM, 2018. – ms 325-340.
  7. Hellerstein JM et al. Pustaka analitik MADlib: atau kemahiran MAD, SQL //Proceedings of the VLDB Endowment. – 2012. – T. 5. – No. 12. – ms 1700-1711.
  8. Qin C., Rusu F. Anggaran spekulatif untuk pengoptimuman kecerunan teragih teragih //Prosiding Bengkel Keempat tentang Analitis Data dalam Awan. – ACM, 2015. – P. 1.
  9. Meng X. et al. Mllib: Pembelajaran mesin dalam percikan apache //The Journal of Machine Learning Research. – 2016. – T. 17. – No. 1. – ms 1235-1241.

Penulis artikel: Anastasia Birillo, penyelidik di Penyelidikan JetBrains, pelajar pusat CS и Nikita Bobrov, penyelidik di Penyelidikan JetBrains

Sumber: www.habr.com

Tambah komen