Resep aktual untuk menyelesaikan masalah yang disajikan (satu kemungkinan solusi)
Sangat mudah untuk mengatasi masalah ini menggunakan alat pembelajaran mesin favorit saya, vowpal wabbit yang mendukung fitur kuadrat (lintas) melalui opsi -q -nya .
latar belakang vowpal wabbit
Sebelum kita beralih ke detail penggunaan. vowpal wabbit adalah perangkat lunak pembelajaran mesin online yang cepat dan dapat diskalakan untuk klasifikasi dan regresi. Saya mendapatkan tingkat pembelajaran (pelatihan) sekitar 5 juta fitur per detik di desktop saya tanpa batas pada ukuran data (jumlah contoh) karena sebagai alat pembelajaran online tidak memerlukan memuat data lengkap ke dalam memori. Ini memiliki banyak fitur menarik lainnya: dukungan untuk algoritma pembelajaran yang berbeda, fungsi banyak kehilangan, fitur jarang, tipe fitur campuran, dan banyak lagi, yang berada di luar cakupan pertanyaan ini.
Berikut adalah 3 langkah untuk menyelesaikan masalah dengan komentar:
Langkah 0: Unduh dan bangun vowpal wabbit dari github (lihat catatan di bagian bawah pada lingkungan yang didukung)
Langkah 1: Siapkan set pelatihan di mana setiap baris terlihat seperti ini:
1.0 protein1/protein2|A p1_feature1 p1_feature2 ... |B p2_feature1 ...
...
penjelasan tentang format set pelatihan:
Angka paling kiri, 1.0 , adalah label (kekuatan interaksi, yang bisa berupa nilai numerik apa pun), string kedua ' protein1 / protein2 ' adalah tag untuk memberi garis identitas, TKI: "baris ini mewakili interaksi antara protein1 dan protein2 "; Ini opsional, dan Anda mungkin menganggapnya sebagai komentar. Tag-string ini juga digemakan dalam prediksi dari model untuk mengidentifikasi prediksi mana yang menjadi contoh, tetapi kami tidak memprediksi di sini, kami hanya memodelkan dan mempelajari model kami. Selanjutnya adalah ruang nama fitur input untuk protein1 |A
(kita perlu mendefinisikan ruang-nama sehingga kita dapat melintasi antara ruang-nama yang berbeda, itu tidak harusA
, bisa berupa kata apa saja, tetapi huruf pertama harus berbeda antara spasi nama sehingga kita dapat melintasinya dalam panggilan perintah) diikuti oleh daftar fitur input untuk protein1 p1_...
. Terakhir adalah nama-ruang untuk protein2: |B
diikuti oleh fitur-nama protein2 p2_...
.
Salah satu keindahan dari vowpal wabbit adalah Anda dapat menggunakan string arbitrer untuk nama fitur (itu akan hash secara internal, tetapi Anda tidak peduli). Satu-satunya karakter khusus dalam set pelatihan adalah:
- spasi (jelas)
|
, untuk mengawali fitur input dan spasi nama, dan
:
untuk memisahkan nama-nama fitur dari nilainya
Ini :
tidak digunakan di sini, karena kami menganggap setiap nama fitur protein mewakili boolean (keberadaan) sehingga nilainya default 1
dan mereka tidak memerlukan nilai eksplisit.
Sekarang Anda dapat menjalankan vowpal_wabbit (nama yang dapat dieksekusi vw
) dengan -q AB
untuk membuat fitur silang secara otomatis (alias istilah interaksi) antara semua pasangan fitur yang memungkinkan di mana satu fitur dipilih dari protein1 (ruang nama dimulai dengan A
) dan yang lainnya dari protein2 ( nama-ruang dimulai dengan B
). vowpal_wabbit akan membaca data, mempelajari dan membuat model dengan bobot untuk setiap kombinasi fitur yang menghasilkan beberapa interaksi antara pasangan protein. Di sini, alih-alih menjalankan vw
secara langsung, kita akan menjalankannya melalui vw-varinfo
utilitas pembungkus, yang dilengkapi dengan vowpal wabbit, sebagai langkah terakhir kami. vw-varinfo
berjalan vw
untuk membuat model, dan membuang model dalam bentuk yang dapat dibaca manusia.
Langkah 3: panggil vw-varinfo seperti ini:
vw-varinfo -q AB -c --passes 20 your_data_set_file
vw-varinfo akan meneruskan semua opsi ( -q ... -c --passes ...
) apa adanya ke vw
. Hanya -q AB
untuk melintasi dua ruang nama-fitur yang penting. Saya menambahkan satu opsi lagi di atas (jalankan beberapa lintasan), yang saya yakin akan memberikan hasil yang lebih baik.
Perintah ini akan memanggil vowpal wabbit ( vw
) untuk berlatih pada kumpulan data, dan mencetak output yang saya yakin Anda cari: semua interaksi fitur dalam urutan kekuatan dan bobot relatifnya.
Contoh input dan output
Misalkan input Anda prot.dat
,, termasuk interaksi 3 arah antara 3 protein:
1.0 protein1/protein2|A a b |B k m
0.6 protein2/protein3|A k m |B b c d
2.2 protein1/protein3|A a b |B b c d
Ini adalah contoh yang sangat minimalis. vw
seharusnya tidak memiliki masalah dengan set data yang jauh lebih besar (misalnya jutaan baris, ratusan fitur), juga, saya memvariasikan label kekuatan interaksi dalam contoh. Jika dalam kasus Anda interaksi adalah boolean "ya" atau "tidak", cukup gunakan 0
(tidak ada interaksi) atau 1
(interaksi ada) sebagai bidang 1 di setiap baris.
Berlari:
vw-varinfo -q AB -c --passes 20 prot.dat
Akan menghasilkan semua interaksi yang mungkin (abaikan ruang-nama A
dan B
dalam output) dan bobotnya:
FeatureName HashVal MinVal MaxVal Weight RelScore
A^k 220268 0.00 1.00 +0.3804 100.00%
A^k^B^k 254241 0.00 0.00 +0.3804 100.00%
A^k^B^m 93047 0.00 0.00 +0.3804 100.00%
B^k 178789 0.00 1.00 +0.1011 26.58%
B^m 17595 0.00 1.00 +0.1011 26.58%
[... trimmed for brevity ...]
A^m^B^m 141879 0.00 0.00 +0.0000 0.00%
Constant 116060 0.00 0.00 +0.1515 0.00%
A^b 139167 0.00 1.00 -0.0641 -16.86%
A^b^B^k 204424 0.00 0.00 -0.1233 -32.43%
A^b^B^m 43230 0.00 0.00 -0.1233 -32.43%
Menunjukkan bahwa dalam data ini kontributor terkuat untuk setiap interaksi secara umum adalah 1) kehadiran k
fitur, 2) k
fitur yang berinteraksi dengan dirinya sendiri (dengan asumsi kedua protein memilikinya), dan 3) k
berinteraksi dengan m
. sedangkan yang terlemah (kontribusi negatif terhadap interaksi protein) adalah b
fitur yang dipasangkan dengan m
fitur.
Inilah halaman HOWTO di vw-varinfo
vowpal wabbit dibangun dari sumber (lihat tautan di atas) dan berjalan di Linux (dan mungkin juga unix lainnya), Mac OS-X, dan Windows.
HTH