pengantar
Artikel ini menjelaskan versi baru dari program pembelajaran mesin berdasarkan teori kisi. Keuntungan utama dari versi ini adalah antarmuka untuk programmer Python untuk algoritma efisien yang diprogram dalam C ++.
Saat ini, prosedur pembelajaran mesin (seperti jaringan saraf convolutional, hutan acak, dan mesin vektor dukungan) telah mencapai tingkat yang sangat tinggi, melampaui manusia dalam hal bicara, video, dan pengenalan gambar. Namun, mereka tidak dapat memberikan argumen untuk membuktikan kebenaran kesimpulan mereka.
Di sisi lain, pendekatan simbolis untuk pembelajaran mesin (pemrograman logika induktif, cakupan pembelajaran menggunakan pemrograman integer) memiliki kompleksitas komputasi yang terbukti sangat tinggi dan secara praktis tidak dapat diterapkan pada sampel bahkan dengan ukuran yang relatif kecil.
Pendekatan yang dijelaskan di sini menggunakan algoritma probabilistik untuk menghindari masalah ini. Metode pembelajaran mesin ICF menggunakan teknik teori kisi aljabar modern (Analisis konsep formal) dan teori probabilitas (khususnya rantai Markov). Tapi sekarang Anda tidak perlu pengetahuan matematika canggih untuk menggunakan dan membuat program menggunakan sistem ICF. Penulis telah membuat perpustakaan (vkf.cp38-win32.pyd di Windows atau vkf.cpython-38-x86_64-linux-gnu.so di Linux) untuk menyediakan akses ke program melalui antarmuka yang dapat dipahami oleh programmer Python.
Ada pendekatan orang tua dalam kaitannya dengan pendekatan yang dijelaskan - diciptakan pada awal 80-an abad XX, Doctor of Technical Sciences. prof. VK. Metode Finn JSM untuk pembuatan hipotesis otomatis. Sekarang telah berkembang, seperti yang dikatakan penciptanya, menjadi metode untuk dukungan otomatis penelitian ilmiah. Ini memungkinkan Anda untuk menggunakan metode logika argumentasi, untuk memeriksa stabilitas hipotesis yang ditemukan saat memperluas rangkaian pelatihan, untuk menggabungkan hasil prediksi menggunakan berbagai strategi penalaran JSM.
Sayangnya, penulis catatan ini dan rekan-rekannya menemukan dan menyelidiki beberapa kekurangan teoretis dari metode JSM:
- Dalam kasus terburuk, jumlah kemiripan yang dihasilkan dapat secara eksponensial besar dibandingkan dengan ukuran data input (sampel pelatihan).
- (NP-).
- .
- ยซยป , .
- .
Penelitian penulis dirangkum dalam Bab 2 dari karya disertasinya . Poin terakhir ditemukan oleh penulis baru-baru ini, tetapi, menurut pendapatnya, mengakhiri pendekatan sampel yang berkembang.
Akhirnya, komunitas JSM tidak menawarkan akses ke kode sumber sistemnya. Selain itu, bahasa pemrograman yang digunakan (Fort dan C #) tidak akan mengizinkan penggunaannya oleh masyarakat umum. Satu-satunya versi C ++ gratis dari pemecah JSM yang diketahui penulis (oleh T. Volkovarobofreak) berisi kesalahan yang mengganggu yang terkadang menyebabkan penghentian perhitungan yang tidak normal.
Awalnya, penulis berencana untuk membagikan encoder yang dikembangkan untuk sistem metode VKF dengan komunitas JSM. Oleh karena itu, ia meletakkan semua algoritma secara bersamaan yang berlaku untuk sistem JSM dan VKF ke dalam pustaka terpisah (vkfencoder.cp38-win32.pyd di Windows atau vkfencoder.cpython-38-x86_64-linux-gnu.so di Linux) ... Sayangnya, algoritma ini ternyata tidak diklaim oleh komunitas JSM. Pustaka VKF mengimplementasikan algoritma ini (misalnya, kelas vkf.FCA), tetapi mengandalkan mengisi tabel bukan dari file, tetapi langsung melalui antarmuka web. Di sini kita akan menggunakan pustaka vkfencoder.
1 Prosedur untuk bekerja dengan perpustakaan untuk fitur diskrit
Mari kita asumsikan bahwa pembaca tahu bagaimana menginstal server MariaDB + MariaDB Connector / C (secara default kami menggunakan alamat IP 127.0.0.1:3306 dan pengguna 'root' dengan kata sandi 'toor'). Mari kita mulai dengan menginstal perpustakaan vkfencoder dan vkf ke dalam lingkungan virtual demo dan membuat database MariaDB kosong bernama 'mushroom'.
krrguest@amd2700vii:~/src$ python3 -m venv demo
krrguest@amd2700vii:~/src$ source demo/bin/activate
(demo) krrguest@amd2700vii:~/src$ cd vkfencoder
(demo) krrguest@amd2700vii:~/src/vkfencoder$ python3 ./setup.py build
(demo) krrguest@amd2700vii:~/src/vkfencoder$ python3 ./setup.py install
(demo) krrguest@amd2700vii:~/src/vkfencoder$ cd ../vkf
(demo) krrguest@amd2700vii:~/src/vkf$ python3 ./setup.py build
(demo) krrguest@amd2700vii:~/src/vkf$ python3 ./setup.py install
(demo) krrguest@amd2700vii:~/src/vkf$ cd ../demo
(demo) krrguest@amd2700vii:~/src/demo$ mysql -u root -p
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS mushroom;
MariaDB [(none)]> exit;
Sebagai hasil dari pekerjaan, database 'jamur'
akan muncul, file vkfencoder.cpython-38 akan muncul di ~ / src / demo / lib / python3.8 / situs-paket / vkfencoder-1.0.3-py3.8-linux-x86_64.egg / folder -x86_64-linux-gnu.so, dan
file vkf.cpython akan muncul di ~ / src / demo / lib / python3.8 / paket-situs / vkf-2.0.1-py3.8-linux-x86_64.egg / folder 38-x86_64-linux-gnu.so
Luncurkan Python3 dan jalankan percobaan CCF pada array Jamur. Diasumsikan ada 3 file di folder ~ / src / demo / files / (mushrooms.xml, MUSHROOMS.train, MUSHROOMS.rest). Struktur file-file ini akan dijelaskan di bagian selanjutnya. File pertama 'mushrooms.xml' mendefinisikan struktur setengah-kisi yang lebih rendah pada nilai-nilai setiap atribut yang menggambarkan jamur. File kedua dan ketiga adalah file 'Agaricus-lepiota.data' yang terbelah dua, yang merupakan buku digital "Identifier of North American Mushrooms" yang diterbitkan di New York pada tahun 1981. Nama-nama berikut adalah 'encoder', 'lattices', ' kereta 'dan' tes 'adalah nama-nama tabel dalam database' jamur 'untuk, masing-masing, pengkodean nilai fitur oleh bit substring, hubungan cakupan untuk diagram semilattice pada nilai-nilai ini,pelatihan dan contoh uji.
(demo) krrguest@amd2700vii:~/src/demo$ Python3
>>> import vkfencoder
>>> xml = vkfencoder.XMLImport('./files/mushrooms.xml', 'encoder', 'lattices', 'mushroom', '127.0.0.1', 'root', 'toor')
>>> trn = vkfencoder.DataImport('./files/MUSHROOMS.train', 'e', 'encoder', 'trains', 'mushroom', '127.0.0.1', 'root', 'toor')
>>> tst = vkfencoder.DataImport('./files/MUSHROOMS.rest', 'e', 'encoder', 'tests', 'mushroom', '127.0.0.1', 'root', 'toor')
Huruf 'e' pada dua baris terakhir berhubungan dengan kemampuan jamur (ini adalah bagaimana sifat target dikodekan dalam array ini).
Penting untuk dicatat bahwa ada kelas vkfencoder.XMLExport yang memungkinkan Anda menyimpan informasi dari dua tabel 'encoder' dan 'lattices' dalam file xml, yang, setelah melakukan perubahan, dapat diproses lagi oleh kelas vkfencoder.XMLImport.
Sekarang kita beralih ke eksperimen VKF yang sebenarnya: hubungkan pembuat enkode, muat hipotesis yang sebelumnya dihitung (jika ada), hitung jumlah tambahan (100) hipotesis ke dalam angka yang ditentukan (4) aliran dan simpan dalam tabel 'vkfhyps'.
>>> enc = vkf.Encoder('encoder', 'mushroom', '127.0.0.1', 'root', 'toor')
>>> ind = vkf.Induction()
>>> ind.load_discrete_hypotheses(enc, 'trains', 'vkfhyps', 'mushroom', '127.0.0.1', 'root', 'toor')
>>> ind.add_hypotheses(100, 4)
>>> ind.save_discrete_hypotheses(enc, 'vkfhyps', 'mushroom', '127.0.0.1', 'root', 'toor')
Anda bisa mendapatkan daftar Python dari semua pasangan nontrivial (feature_name, feature_value) untuk hipotesis CCF bernomor ndx
>>> ind.show_discrete_hypothesis(enc, ndx)
Salah satu hipotesis untuk membuat keputusan tentang kelayakan jamur adalah dalam bentuk
[('gill_attachment', 'free'), ('gill_spacing', 'close'), ('gill_size', 'broad'), ('stalk_shape', 'enlarging'), ('stalk_surface_below_ring', 'scaly'), ('veil_type', 'partial'), ('veil_color', 'white'), ('ring_number', 'one'), ('ring_type', 'pendant')]
Karena sifat probabilistik dari algoritma metode CCF, itu mungkin tidak dihasilkan, tetapi penulis telah membuktikan bahwa dengan sejumlah besar hipotesis CCF yang dihasilkan, sebuah hipotesis yang sangat mirip dengan itu akan muncul, yang hampir akan memprediksi properti target untuk kasus uji penting. Rinciannya ada di Bab 4 disertasi penulis.
Akhirnya, kita beralih ke prediksi. Kami membuat sampel uji untuk menilai kualitas hipotesis yang dihasilkan dan pada saat yang sama memprediksi properti target elemen-elemennya
>>> tes = vkf.TestSample(enc, ind, 'tests', 'mushroom', '127.0.0.1', 'root', 'toor')
>>> tes.correct_positive_cases()
>>> tes.correct_negative_cases()
>>> exit()
2 Deskripsi struktur data
2.1 Struktur kisi pada fitur diskrit
Kelas vkfencoder.XMLImport mem-parsing file XML yang menggambarkan urutan antara nilai-nilai fitur, membuat dan mengisi dua tabel 'encoder' (mengubah setiap nilai menjadi string bit) dan 'lattices' (menyimpan hubungan antara nilai-nilai satu fitur).
Struktur file input harus seperti
<?xml version="1.0"?>
<document name="mushrooms_db">
<attribute name="cap_color">
<vertices>
<node string="null" char='_'></node>
<node string="brown" char='n'></node>
<node string="buff" char='b'></node>
<node string="cinnamon" char='c'></node>
<node string="gray" char='g'></node>
<node string="green" char='r'></node>
<node string="pink" char='p'></node>
<node string="purple" char='u'></node>
<node string="red" char='e'></node>
<node string="white" char='w'></node>
<node string="yellow" char='y'></node>
</vertices>
<edges>
<arc source="brown" target="null"></arc>
<arc source="buff" target="brown"></arc>
<arc source="buff" target="yellow"></arc>
<arc source="cinnamon" target="brown"></arc>
<arc source="cinnamon" target="red"></arc>
<arc source="gray" target="null"></arc>
<arc source="green" target="null"></arc>
<arc source="pink" target="red"></arc>
<arc source="pink" target="white"></arc>
<arc source="purple" target="red"></arc>
<arc source="red" target="null"></arc>
<arc source="white" target="null"></arc>
<arc source="yellow" target="null"></arc>
</edges>
</attribute>
</document>
Contoh di atas menunjukkan urutan antara nilai-nilai dari sifat ketiga 'cap_color' untuk array Jamur dari Machine Learning Data Repository (Universitas California di Irvine). Setiap bidang 'atribut' mewakili struktur kisi pada nilai-nilai atribut yang sesuai. Dalam contoh kami, grup terkait dengan atribut diskrit 'cap_color'. Daftar semua nilai karakteristik membentuk subkelompok. Kami telah menambahkan nilai untuk menunjukkan kesamaan yang sepele (hilang). Sisa nilai sesuai dengan deskripsi dalam file yang menyertai 'agaricus-lepiota.names'.
Urutan di antara mereka diwakili oleh konten subkelompok. Setiap item menggambarkan hubungan yang lebih spesifik / lebih umum antara pasangan nilai karakteristik. Misalnya ,, berarti topi jamur merah muda lebih spesifik daripada topi merah.
Penulis telah membuktikan teorema tentang kebenaran representasi yang dihasilkan oleh konstruktor dari kelas vkfencoder.XMLImport dan disimpan dalam tabel 'encoder'. Algoritma dan pembuktian teorema kebenarannya menggunakan cabang modern dari teori kisi yang dikenal sebagai Analisis Konsep Formal. Untuk perincian, pembaca sekali lagi dirujuk ke karya disertasi penulis (Bab 1).
2.2 Struktur sampel untuk fitur diskrit
Pertama-tama, harus dicatat bahwa pembaca dapat mengimplementasikan pelatihannya sendiri dan test case loader dalam database atau menggunakan kelas vkfencoder.DataImport yang tersedia di perpustakaan. Dalam kasus kedua, pembaca harus memperhitungkan bahwa fitur target harus berada di posisi pertama dan terdiri dari satu karakter (misalnya, '+' / '-', '1' / '0' atau 'e' / 'p').
Sampel pelatihan harus berupa file CSV (dengan nilai yang dipisahkan koma) yang menjelaskan contoh pelatihan dan contoh balasan (contoh yang tidak memiliki properti target).
Struktur file input harus seperti
e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d
p,x,s,p,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d
p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,g
p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,p
e,x,y,b,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w
p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,g
p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,g
p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,g
p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,g
p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,d
p,x,f,g,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d
p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,g
e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d
e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d
p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,p
Setiap baris di sini menjelaskan satu contoh pelatihan. Posisi pertama berisi 'e' atau 'p' tergantung pada kelayakan / toksisitas jamur yang dijelaskan. Sisa posisi (dipisahkan dengan koma) berisi huruf (nama pendek) atau string (nama lengkap dari nilai atribut yang sesuai). Misalnya, posisi keempat cocok dengan atribut 'cup_color', di mana 'g', 'p', 'y', 'b' dan 'e' adalah singkatan dari "grey", "pink", "pink", "yellow", "sand" dan "red" masing-masing. Tanda tanya di tengah tabel di atas menunjukkan nilai yang hilang. Namun, nilai karakteristik yang tersisa (non-target) dapat berupa string. Penting untuk dicatat bahwa saat menyimpan ke database, spasi di namanya akan diganti dengan karakter '_'.
File dengan kasus uji memiliki bentuk yang sama, hanya sistem tidak diberi tahu tentang tanda nyata dari contoh, dan prediksinya dibandingkan dengan itu untuk menghitung kualitas hipotesis yang dihasilkan dan kekuatan prediksi mereka.
2.3 Struktur sampel untuk fitur berkelanjutan
Dalam hal ini, opsi kembali dimungkinkan: pembaca dapat mengimplementasikan pelatihnya sendiri dan test case loader dalam database atau menggunakan kelas vkfencoder.DataLoad yang tersedia di perpustakaan. Dalam kasus kedua, pembaca harus mempertimbangkan bahwa fitur target harus di posisi pertama dan terdiri dari bilangan alami (misalnya, 0, 7, 15).
Sampel pelatihan harus berupa file CSV (dengan nilai yang dipisahkan oleh semacam pembatas) yang menggambarkan contoh pelatihan dan contoh tandingan (contoh yang tidak memiliki properti target).
Struktur file input harus seperti
"quality";"fixed acidity";"volatile acidity";"citric acid";"residual sugar";"chlorides";"free sulfur dioxide";"total sulfur dioxide";"density";"pH";"sulphates";"alcohol"
5;7.4;0.7;0;1.9;0.076;11;34;0.9978;3.51;0.56;9.4
5;7.8;0.88;0;2.6;0.098;25;67;0.9968;3.2;0.68;9.8
5;7.8;0.76;0.04;2.3;0.092;15;54;0.997;3.26;0.65;9.8
6;11.2;0.28;0.56;1.9;0.075;17;60;0.998;3.16;0.58;9.8
5;7.4;0.7;0;1.9;0.076;11;34;0.9978;3.51;0.56;9.4
5;7.4;0.66;0;1.8;0.075;13;40;0.9978;3.51;0.56;9.4
5;7.9;0.6;0.06;1.6;0.069;15;59;0.9964;3.3;0.46;9.4
7;7.3;0.65;0;1.2;0.065;15;21;0.9946;3.39;0.47;10
7;7.8;0.58;0.02;2;0.073;9;18;0.9968;3.36;0.57;9.5
Dalam kasus kami, ini adalah beberapa baris pertama dari file 'vv_red.csv' yang dihasilkan dari file 'winequality-red.csv' dari anggur merah Portugis dari susunan Kualitas Anggur dari repositori data UCI untuk prosedur pengujian pembelajaran mesin dengan mengatur ulang kolom terakhir ke awal. Penting untuk dicatat bahwa saat menyimpan ke database, spasi di namanya akan diganti dengan karakter '_'.
3 Eksperimen CCF pada contoh dengan fitur berkelanjutan
Seperti yang ditulis sebelumnya, kami akan mendemonstrasikan pekerjaan pada array Wine Quality dari repositori UCI. Mari kita mulai dengan membuat database kosong di bawah MariaDB bernama 'red_wine'.
(demo) krrguest@amd2700vii:~/src/demo$ mysql -u root -p
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS red_wine;
MariaDB [(none)]> exit;
Sebagai hasil dari pekerjaan, database 'red_wine' akan muncul.
Kami meluncurkan Python3 dan melakukan percobaan VKF pada larik Kualitas Anggur. Diasumsikan ada file vv_red.csv di folder ~ / src / demo / files /. Struktur file-file ini dijelaskan pada paragraf sebelumnya. Nama berikut 'verges', 'complex', 'kereta' dan 'tes' adalah nama-nama tabel dalam database 'red_wine' untuk, masing-masing, ambang batas (baik untuk fitur awal dan untuk fitur yang dihitung dengan regresi), koefisien regresi logistik yang signifikan antara pasang fitur, pelatihan dan uji kasus.
(demo) krrguest@amd2700vii:~/src/demo$ Python3
>>> import vkfencoder
>>> nam = vkfencoder.DataLoad('./files/vv_red.csv', 7, 'verges', 'trains', 'red_wine', ';', '127.0.0.1', 'root', 'toor')
Argumen kedua menetapkan ambang (7 dalam kasus kami), di mana contoh tersebut dinyatakan positif. Argumen ';' cocok dengan pembatas (defaultnya adalah ',').
Seperti ditunjukkan dalam catatan sebelumnya oleh penulis , prosedurnya berbeda dari kasus fitur diskrit. Pertama, kami menghitung regresi logistik menggunakan kelas vkf.Join, yang koefisiennya disimpan dalam tabel 'kompleks'.
>>> join = vkf.Join('trains', 'red_wine', '127.0.0.1', 'root', 'toor')
>>> join.compute_save('complex', 'red_wine', '127.0.0.1', 'root', 'toor')
Sekarang, menggunakan teori informasi, kami menghitung ambang menggunakan kelas vkf.Generator, yang, bersama dengan maksimum dan minimum, disimpan dalam tabel 'ambang'.
>>> gen = vkf.Generator('complex', 'trains', 'verges', 'red_wine', 7, '127.0.0.1', 'root', 'toor')
Argumen kelima menetapkan jumlah ambang batas pada fitur asli. Secara default (dan dengan nilai 0) dihitung sebagai logaritma jumlah fitur. Regresi mencari ambang tunggal.
Sekarang kita beralih ke eksperimen VKF yang sebenarnya: kita menghubungkan pembuat enkode, memuat hipotesis yang dihitung sebelumnya (jika ada), menghitung jumlah tambahan (300) hipotesis dalam jumlah yang ditentukan (8) stream dan menyimpannya dalam tabel 'vkfhyps'.
>>> qual = vkf.Qualifier('verges', 'red_wine', '127.0.0.1', 'root', 'toor')
>>> beg = vkf.Beget('complex', 'red_wine', '127.0.0.1', 'root', 'toor')
>>> ind = vkf.Induction()
>>> ind.load_continuous_hypotheses(qual, beg, 'trains', 'vkfhyps', 'red_wine', '127.0.0.1', 'root', 'toor')
>>> ind.add_hypotheses(300, 8)
>>> ind.save_continuous_hypotheses(qual, 'vkfhyps', 'red_wine', '127.0.0.1', 'root', 'toor')
Anda bisa mendapatkan daftar Python tiga kali lipat (fitur_name, (lower_bound, upper_bound)) untuk hipotesis CCF bernomor ndx
>>> ind.show_continuous_hypothesis(enc, ndx)
Akhirnya, kita beralih ke prediksi. Kami membuat sampel uji untuk menilai kualitas hipotesis yang dihasilkan dan pada saat yang sama memprediksi properti target elemen-elemennya
>>> tes = vkf.TestSample(qual, ind, beg, 'trains', 'red_wine', '127.0.0.1', 'root', 'toor')
>>> tes.correct_positive_cases()
>>> tes.correct_negative_cases()
>>> exit()
Karena kami hanya memiliki satu file, di sini kami menggunakan set pelatihan sebagai kasus uji.
4. Perhatikan tentang mengunggah file
Saya menggunakan perpustakaan aiofiles untuk mengunggah file (seperti 'mushrooms.xml') ke server web. Berikut sepotong kode yang mungkin berguna bagi Anda
import aiofiles
import os
import vkfencoder
async def write_file(path, body):
async with aiofiles.open(path, 'wb') as file_write:
await file_write.write(body)
file_write.close()
async def xml_upload(request):
#determine names of tables
encoder_table_name = request.form.get('encoder_table_name')
lattices_table_name = request.form.get('lattices_table_name')
#Create upload folder if doesn't exist
if not os.path.exists(Settings.UPLOAD_DIR):
os.makedirs(Settings.UPLOAD_DIR)
#Ensure a file was sent
upload_file = request.files.get('file_name')
if not upload_file:
return response.redirect("/?error=no_file")
#write the file to disk and redirect back to main
short_name = upload_file.name.split('/')[-1]
full_path = f"{Settings.UPLOAD_DIR}/{short_name}"
try:
await write_file(full_path, upload_file.body)
except Exception as exc:
return response.redirect('/?error='+ str(exc))
return response.redirect('/ask_data')
Kesimpulan
Pustaka vkf.cpython-38-x86_64-linux-gnu.so berisi banyak kelas dan algoritma tersembunyi. Mereka menggunakan konsep matematika canggih seperti operasi tertutup, evaluasi malas, rantai Markov berpasangan, keadaan transien rantai Markov, metrik variasi total, dll.
Dalam praktiknya, eksperimen dengan larik Tempat Penyimpanan Data untuk Pembelajaran Mesin (University of California di Irvine ) menunjukkan penerapan nyata program C ++ 'Metode VKF' untuk data berukuran sedang (array Dewasa berisi 32560 pelatihan dan 16280 kasus uji).
Sistem 'Metode VKF' mengungguli (dalam hal akurasi prediksi) sistem CLIP3 (Integer Programming Coverage Learning v.3) pada array SPECT, di mana CLIP3 adalah program yang dibuat oleh penulis array SPECT. Pada array Jamur (dibagi secara acak menjadi sampel pelatihan dan tes), sistem Metode VKF menunjukkan akurasi 100% (keduanya berkenaan dengan kriteria toksisitas jamur dan kriteria mudah dimakan). Program ini juga diterapkan pada array Dewasa untuk menghasilkan lebih dari satu juta hipotesis (tanpa gangguan).
Kode sumber pustaka vkf CPython sudah dimoderasi di savannah.nongnu.org. Kode untuk perpustakaan bantu vkfencoder dapat diperoleh dari Bitbucket .
Penulis ingin mengucapkan terima kasih kepada rekan-rekan dan mahasiswa (D. A. Anokhin, E. D. Baranova, I. V. Nikulin, E. Yu. Sidorova, L. A. Yakimova) atas dukungan mereka, diskusi yang bermanfaat dan penelitian bersama. Namun, seperti biasa, penulis bertanggung jawab penuh atas semua kekurangan yang ada.