Menemukan fitur terbaik dalam model interaksi

13

Saya punya daftar protein dengan nilai fitur mereka. Tabel sampel terlihat seperti ini:

...............Feature1...Feature2...Feature3...Feature4  
Protein1  
Protein2  
Protein3  
Protein4  

Baris adalah protein dan kolom adalah fitur.

Saya juga punya daftar protein yang berinteraksi juga; sebagai contoh

Protein3, Protein4  
Protein1, Protein2  
Protein4, Protein1  

Masalah : Untuk analisis awal saya ingin tahu fitur mana yang paling berkontribusi untuk interaksi protein.

Pemahaman saya adalah bahwa biasanya pohon keputusan dapat digunakan untuk memperoleh fitur paling penting berdasarkan entropi, tetapi saya tidak yakin bagaimana memperluasnya ke pasangan protein (yaitu interaksi). Apakah ada metode untuk tujuan seperti itu?

Anish
sumber
Katakan jika saya mengerti Anda dengan benar: Anda memiliki kekuatan interaksi untuk setiap pasangan protein (yang misalnya, adalah nol jika protein tidak berinteraksi), dan kemudian Anda ingin memiliki vektor fitur yang nilainya akan sangat berkorelasi dengan kekuatan interaksi? Atau, dengan kata lain, yang akan memungkinkan Anda untuk memprediksi kekuatan interaksi antara protein?
dsign

Jawaban:

25

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: |Bdiikuti 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 1dan mereka tidak memerlukan nilai eksplisit.

Sekarang Anda dapat menjalankan vowpal_wabbit (nama yang dapat dieksekusi vw) dengan -q ABuntuk 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 vwsecara langsung, kita akan menjalankannya melalui vw-varinfoutilitas pembungkus, yang dilengkapi dengan vowpal wabbit, sebagai langkah terakhir kami. vw-varinfoberjalan vwuntuk 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 ABuntuk 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. vwseharusnya 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 Adan Bdalam 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 kfitur, 2) kfitur yang berinteraksi dengan dirinya sendiri (dengan asumsi kedua protein memilikinya), dan 3) kberinteraksi dengan m. sedangkan yang terlemah (kontribusi negatif terhadap interaksi protein) adalah bfitur yang dipasangkan dengan mfitur.

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

diri sendiri
sumber
Apakah itu secara langsung menyiratkan bahwa memangkas interaksi yang lemah akan meningkatkan akurasi model?
matt
Belum tentu. Akurasi sering naik ketika ada lebih banyak fitur untuk dipelajari. Namun, jika fitur dalam kebisingan praktik, atau terlalu jarang untuk digeneralisasikan, mereka mungkin. Sebagian besar model kehidupan nyata memiliki beberapa komponen kesalahan. Lebih banyak data dapat menyebabkan kepercayaan yang lebih tinggi pada keakuratan model.
arielf
1

Jaringan interaksi protein dapat diwakili oleh grafik yang tidak terarah, dengan protein membentuk simpul dan interaksinya di tepinya. Jika interaksi protein adalah fenomena biner, ujung-ujungnya juga biner (nol atau satu), jika tidak, Anda dapat menggunakan bilangan real. Anda dapat menggambarkan grafik ini secara numerik sebagai matriks kuadrat, dan khususnya yang simetris. Untuk menemukan fitur yang paling penting, Anda dapat mempertahankan yang memiliki proyeksi terbesar sepanjang vektor eigen dari matriks interaksi.

Emre
sumber
Grafiknya mungkin bukan biner .. karena protein dapat berinteraksi dengan lebih dari satu protein. Apakah ada ekstensi untuk banyak sisi?
Anish
Bukan itu yang saya maksud dengan biner. Pertanyaannya adalah apakah Anda ingin menangkap intensitas interaksi, atau apakah cukup untuk memodelkan kehadirannya. Tentu, model grafik dapat menjelaskan interaksi antara setiap pasangan protein.
Emre
Hmm .. Saya berasumsi bahwa ketika Anda meminta saya untuk membuat matriks kuadrat untuk interaksi protein, nilai-nilai dalam matriks mewakili jumlah interaksi antara protein. Tapi, saya tidak melihat di mana kami menggunakan fitur di sini. Dapatkah Anda menguraikan itu?
Anish
Vektor eigen adalah kombinasi linear dari protein dalam ruang fitur.
Emre