Memprediksi Struktur Sekunder Protein dengan Support Vector Machine
Prediksi Struktur Sekunder protein merupakan salah satu permasalahan dalam disiplin ilmu Bioinformatika. Story ini ditulis berdasarkan tugas akhir yang saya kerjakan di mata kuliah Bioinformatika, dan sebagai persiapan mengerjakan Tugas Akhir saya. Story kali ini akan membahas bagaimana Prediksi Struktur Sekunder Protein pada dataset RS126 dengan menggunakan Support Vector Machine.
Sebelum masuk ke bagian koding-mengkoding, baca pengantarnya dulu yuk biar lebih mengerti permasalahan yang mau diselesaikan :D
Protein
Protein merupakan suatu senyawa yang menyusun makhluk hidup. Protein sendiri berperan penting bagi makhluk hidup karena fungsi sel yang dimiliki oleh makhluk hidup ditentukan oleh proses sintesis protein.
Proses sintesis protein sendiri dilakukan melewati beberapa tahapan. Pertama, rantai Deoxyribonucleic Acid (DNA) akan dibuka dan dilakukan proses transkripsi menjadi Messenger Ribonucleic Acid (mRNA). RNA kemudian diubah ke dalam sekuens asam amino oleh ribosom. Asam amino yang terbentuk kemudian akan melipat dan membentuk struktur dari protein.
Blundell, dkk (1978) dalam Insulin-Like Growth Factor: A Model for Tertiary Structure Accounting for Immunoreactivity and Receptor Binding mengatakan bahwa struktur dari protein akan mempengaruhi fenomena biologis yang disebabkan oleh interaksi antar protein yang membentuknya. Oleh karena itu penentuan struktur protein penting dilakukan untuk mengetahui fungsi dari suatu protein.
Struktur Protein
Struktur protein merupakan salah satu penentu fungsi dari suatu sel. Struktur protein sendiri juga terbagi ke dalam 4 bentuk, yaitu struktur primer, struktur sekunder, struktur tersier, dan struktur kuartener.
Struktur primer protein tersusun dari 20 jenis asam amino yang berikatan dan membentuk suatu rantai. Ikatan ini terjadi saat proses sintesis protein. Struktur primer kemudian akan melipat dan membentuk Struktur sekunder dari protein. Struktur sekunder dari protein ini sendiri tersusun dari 3 kelas besar yaitu Helix, Sheet, dan Coil. Struktur tersier kemudian terbentuk dari kombinasi struktur sekunder protein. Terakhir, struktur-struktur tersier saling berikatan dan membentuk struktur kuartener protein.
Prediksi Struktur Sekunder Protein
Prediksi struktur sekunder protein dapat dilakukan dengan X-Ray Crystallography dan Nuclear Magnetic Resonance Spectroscopy (NMR). Namun kedua metode tersebut memakan waktu yang sangat lama dan biaya yang tidak sedikit. Lantas, apakah ada solusi atau pendekatan yang lebih baik untuk memprediksi struktur sekunder protein? Jawabanya adalah dengan menggunakan pendekatan komputasional.
Prediksi struktur sekunder protein dilakukan dengan memprediksi kelas struktur sekunder protein dari setiap posisi struktur primer protein. Oleh karena itu permasalahan ini dapat diselesaikan dengan pendekatan klasifikasi pada pembelajaran mesin. Secara spesifik, penentuan label Y pada posisi i dari input X pada posisi i juga termasuk ke dalam permasalahan Sequence Labelling.
Pada gambar di atas dapat kita lihat bagaimana hubungan antara struktur primer protein dengan struktur sekundernya.
Index 1 [ A ]→ Kelas Coil
Index 2 [ F ] → Kelas Coil
Index 3 [ G ] → Kelas Helix
Index 4 [ F ] → Kelas Sheet
Index 5 [ F ] → Kelas Helix
Yang perlu menjadi perhatian adalah, suatu asam amino pada struktur primer belum tentu memiliki kelas struktur sekunder yang sama. Perhatikan asam amino Phenylalanine (dilambangkan F) memiliki label struktur sekunder Coil pada posisi index 2, Sheet pada posisi index 4, dan Helix pada posisi index 5.
Ternyata prediksi struktur sekunder protein tidak bisa dilakukan dengan bekal input pada posisi i saja, melainkan harus disertai asam amino-asam amino lain di sisi kiri dan sisi kanan input posisi i.
Perhatikan gambar di atas. Semisal kita tentukan teman kiri dan teman kanan posisi i adalah 1. Maka terbentuk Sliding Window yang menangkap input sebanyak 3 asam amino untuk memprediksi 1 struktur sekunder protein. Dari gambar diatas terbentuk pasangan input output sebagai berikut:
Index 1 [.. , A , F] → Kelas Coil
Index 2 [A , F , G] → Kelas Coil
Index 3 [F , G , F] → Kelas Helix
Index 4 [G, F , F] → Kelas Sheet
Index 5 [F , F , ..] → Kelas Helix
Hasil penangkapan beberapa asam amino pada sekuens struktur primer menggunakan Sliding Window ini akan digunakan sebagai input untuk model klasifikasi dan struktur sekunder dari setiap posisi sekuens akan digunakan sebagai label kelas target sesuai contoh di atas. Ukuran Sliding Window sendiri dapat ditentukan untuk membentuk model prediksi yang paling baik.
Karena pengantarnya sudah selesai, mari kita coba melakukan prediksi struktur sekunder protein dengan dataset RS126!
Membaca Dataset RS126 di Python
Dataset RS126 adalah dataset yang berisi data-data pasangan struktur primer protein beserta struktur sekundernya. Dataset RS126 yang digunakan dapat diunduh pada tautan ini.
Pertama, kita lihat terlebih dahulu cuplikan dataset RS126.
String urutan ganjil merupakan struktur primer protein dan string urutan genap merupakan struktur sekunder dari protein tersebut. Sebagai contoh String pertama dari file:
APAFSVSPASGASDGQSVSVSVAAAGETYYIAQCAPVGGQDACNPATATSFTTDASGAASFSFTVRKSYAGQTPSGTPVGSVDCATDACNLGAGNSGLNLGHVALTFG
merupakan struktur primer protein yang memiliki struktur sekunder:
CCEEEEECCCCCCCCCEEEEEEECCCCEEEEEEECEECCEECCCCCCCCEEECCCCCCCEEEEECCCEEEEECCCCCEEEEEECCCCCCEEEEECCCCCCCCCCCCCC
Perlu diperhatikan bahwa panjang suatu string struktur sekunder protein adalah sama dengan panjang string struktur primer proteinnya.
Dataset RS126 kemudian akan dibuka dan diolah dengan menggunakan bahasa pemrograman python.
Mencari data yang tidak lengkap
Pengecekan terhadap data dilakukan agar diketahui apakah terdapat perbedaan jumlah karakter pasangan struktur primer dan struktur sekunder (karena prediksi struktur sekunder protein termasuk ke dalam permasalahan sequence labelling, maka harus dipastikan jumlah karakter dari struktur primer dan struktur sekunder selalu sama).
Ditemukan bahwa data pada urutan ke 109 memiliki panjang struktur primer dan struktur sekunder yang berbeda. Karena hanya 1 data maka data struktur primer dan struktur sekunder dari urutan ke 109 tersebut bisa dihapus saja.
Orthogonal Encoding — Target Labeling
Setiap karakter pada setiap struktur primer dan struktur sekunder di-”split“ sehingga dapat diencode kedalam bentuk orthogonal untuk struktur primer dan ke dalam bentuk kelas 1,2, dan 3 untuk struktur sekunder agar bisa diolah dalam model Support Vector Machine.
Tahapan split bekerja mengubah suatu string menjadi list dari karakter pembentuk string tersebut. Sebagai contoh string “PROTEIN” ketika di split akan menghasilkan list “[ ‘ P ’ , ‘ R ’ , ‘ O ’ , ‘ T ’ , ‘ E ’ , ‘ I ’ , ‘ N ’ ]”
Berikut cuplikan kode untuk men-”split” karakter pada struktur primer dan struktur sekunder protein:
Hasil split struktur primer dan struktur sekunder protein kemudian diubah kedalam bentuk Orthogonal Encoding dan Target Labeling.
Berikut cuplikan switch case untuk Orthogonal Encoding struktur primer:
dan cuplikan kode untuk switch case Target Labeling struktur sekunder:
Fungsi switch case yang telah kita buat akan kita gunakan pada data RS126 yang telah terbaca.
data yang telah di-encode akan berbentuk sebagai berikut:
Persiapan Dataset
Setiap hasil split karakter dari struktur sekunder protein akan kita jadikan label kelas target.
Dihasilkan total keseluruhan label kelas target berjumlah 22.594. Angka ini akan digunakan untuk memastikan bahwa dataset juga memiliki fitur sebanyak 22.594 data juga.
Kemudian untuk mempersiapkan input untuk setiap label kelas target, kita harus menyiapkan suatu fungsi padding. fungsi padding dilakukan dengan tujuan hasil dari Sliding Window tidak berkurang panjangnya. Hal ini sangat penting mengingat permasalahan Sequence Labelling menuntut panjang input dan label kelas target yang selalu sama.
fungsi window_padding_data menerima input size yaitu size dari Sliding Window dan sequence struktur primer protein. Fungsi ini bekerja dengan menambahkan array zeros sebanyak size/2 di belakang dan di depan sekuens untuk setiap sekuens struktur primer protein ter-encoding.
Kemudian simpan data yang di padding ke dalam suatu variabel X.
Support Vector Machine dengan Scikit-Learn
Permasalahan prediksi struktur sekunder protein merupakan permasalahan klasifikasi, oleh karena itu permasalahan ini dapat diselesaikan dengan menggunakan model klasifikasi pembelajaran mesin.
Kali ini digunakan model Support Vector Machine menggunakan library Scikit-Learn untuk memprediksi struktur sekunder protein.
Tapi sebelum kita masukan data kita ke model, ada hal yang perlu dilakukan. Data input harus kita reshape karena input dari SVM Scikit-Learn mengharuskan data yang dimasukkan dalam bentuk array 2 dimensi.
Pada kode diatas, X di reshape menjadi array berukuran 22.594 x 300. Angka 300 didapatkan dari perataan matriks 2 dimensi 15 x 20 (15 adalah ukuran Sliding Window dan 20 adalah ukuran Orthogonal Encoding).
Data yang sudah di-reshape kemudian kita bagi ke dalam data training dan data validasi dengan perbandingan 80:20.
Model SVM yang digunakan menggunakan kernel Radial Basis Function dengan parameter gamma = 0.1 dan parameter C = 1.5. Kita bentuk dan jalankan model prediksi SVM dengan kode dibawah ini:
Hasil Akhir
Percobaan dilakukan dengan Sliding Window sebesar 5, 7, 9, 11, 13, dan 15. Berikut Classification Report dari setiap percobaan.
Ukuran Sliding Window 5
Ukuran Sliding Window 7
Ukuran Sliding Window 9
Ukuran Sliding Window 11
Ukuran Sliding Window 13
Ukuran Sliding Window 15
Hasil akhir percobaan menunjukan hasil klasifikasi terbaik didapat dari Sliding Window berukuran 11 dan 13 dengan akurasi untuk kelas 0 = 63 , kelas 1 = 63, dan kelas 2 = 56. Sliding Window berukuran 15 juga menghasilkan prediksi kelas 1 dan 2 yang meningkat sebesar 0.01, namun terdapat penurunan presisi sebesar 0.05 untuk prediksi kelas 0.
Penutup
Story kali ini menunjukan bagaimana Support Vector Machine dapat digunakan dalam permasalahan struktur sekunder protein. Hasil yang didapatkan memang tidak sebaik State-of-the-Art dari paper-paper yang beredar, namun hasil tersebut mungkin masih bisa ditingkatkan dengan menerapkan Tuning Hyperparameter dari kernel RBF menggunakan teknik Grid-Search.
Sekian dulu untuk story kali ini, semoga apa yang saya tulis cukup mudah untuk dimengerti. Kalau ada kesalahan saya mohon maaf dan diupayakan untuk direvisi. Terimakasih :D
Notebook python lengkap dari percobaan ini dapat diakses di: https://github.com/vincentmichael089/SVM-PSSP/