การเรียนรู้ของเครื่องจักรหรือ machine learning เป็นการใช้อัลกอริทึมและวิธีการทางคอมพิวเตอร์เพื่อแก้ปัญหาที่สนใจ ช่วยในการหารูปแบบของความรู้ในข้อมูลที่มีปริมาณมาก ในหัวข้อนี้จะเริ่มต้นจากการนำหลักของ hiddle Markov model (HMM) มาใช้ในการหาแบบแผน (pattern recognition) ที่สนใจในข้อมูลเชิงลำดับ (sequence) HMM นำมาใช้อย่างแพร่หลายทางชีววิทยาเชิงคอมพิวเตอร์เพื่อการเปรียบเทียบข้อมูลเชิงลำดับ (sequence alignment) การอธิบายจีโนม (genome annotation) การสืบค้นฐานข้อมูล (sequence database search) HMM เป็นโมเดลความน่าจะเป็นสำหรับอธิบายข้อมูลเชิงลำดับประกอบด้วย state ต่อเนื่องกัน แต่ละ state มีค่าความน่าจะเป็นระหว่างการเกิดขึ้นของ state หรือ emission probabilities กำกับ และมีค่าความน่าจะเป็นระหว่างเปลี่ยน state หรือ transition probabilities เมื่อจะเปลี่ยน state
การสร้าง HMM ของกรดนิวคลีอิกหรือโปรตีนสามารถสร้างจากข้อมูลลำดับเดียวหรือหลายลำดับ เช่น ข้อมูลจาก multiple sequence alignment การสร้าง model จากข้อมูลหลายลำดับ เรียกว่าการสร้าง profile HMM โดยแต่ละตำแหน่งใน alignment จะมี 3 states คือ deletion insertion และ match ในตัวอย่างนี้จะใช้แพคเกจ aphid ในการสร้าง profile HMM เพื่อเก็บข้อมูลรูปแบบของ transcription factor ที่สนใจ ข้อมูลลำดับนิวคลีโอไทด์และกรดอะมิโนของ transcription factor สามารถสืบค้นได้จากฐานข้อมูล เช่น PlantTFBD สำหรับพืช เลือกโปรตีน transcription factor ARF ของ Arabidopsis thaliana จำนวน 10 โปรตีนเป็นตัวอย่างจากฐานข้อมูลนี้ ทำ multiple sequence alignment ด้วย MEGA หรือ BioEdit เลือกบริเวณอนุรักษ์ที่มีร่วมกันระหว่างโปรตีน บันทึกเป็นไฟล์ fasta
#install.packages("aphid")
#install.packages("seqinr")
library("aphid")
library("seqinr")
library("ape")
#arf = read.fasta("C:\\Users\\TeerasakArt\\Downloads\\ARF_mas3.fas")
# Three conservered regions obtained from the aligned sequences
arf1 = as.AAbin("LWHACAGPL")
arf2 = as.AAbin("LWNICAGPL")
arf3 = as.AAbin("LWKLCAGPL")
arf4 = as.AAbin("LWKLCAGPL")
#combine into one list
arfL = list(arf1, arf2, arf3, arf4)
ใช้ฟังก์ชั่น derivePHMM() เพื่อสร้างโมเดลจากบริเวณอนุรักษ์ของลำดับกรดอะมิโนจากโปรตีนสามชนิด แล้วแสดงโมเดลที่ได้เป็นแผนภาพด้วยฟังก์ชั่น plot()
# Create PHMM
arf.PHMM = derivePHMM(arfL, residues = "AMINO", pseudocounts = "background",
seqweights = "Henikoff")
plot(arf.PHMM)
ฝึกโมเดลที่ได้กับข้อมูลลำดับกรดอะมิโนที่จำลองขึ้นมาจำนวนสิบโปรตีน ด้วยฟังก์ชั่น train()
sim <- list(length = 10)
suppressWarnings(RNGversion("3.5.0"))
set.seed(9999)
for(i in 1:10) sim[[i]] <- generate(arf.PHMM, size = 20)
arf2.PHMM <- train(arf.PHMM, sim, method = "BaumWelch",
deltaLL = 0.01, seqweights = NULL)
ทดสอบโมเดลที่ได้กับลำดับกรดอะมิโนที่สนใจด้วยฟังก์ชั่น Viterbi() เพื่อหา path ที่เหมาะสม โดย M = match D = deletion และ I = insertion
# test the model
testTRUE = as.AAbin("LWNICAGPL")
x <- Viterbi(arf2.PHMM, testTRUE, odds = FALSE)
x
Viterbi(arf2.PHMM, as.AAbin("LWHACAGPL"), odds = FALSE)
Viterbi(arf2.PHMM, as.AAbin("LWKLCAGPL"), odds = FALSE)
c("D", "M", "I")[x$path + 1]
testFALSE = as.AAbin("PPPPPPPPP")
y <- Viterbi(arf2.PHMM, testFALSE, odds = FALSE)
y
Viterbi(arf2.PHMM, as.AAbin("BBBBBBBB"), odds = FALSE)
c("D", "M", "I")[y$path + 1]