Basic machine learning in R

การเรียนรู้ของเครื่องจักรหรือ 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

In [229]:
#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()

In [230]:
# Create PHMM
arf.PHMM = derivePHMM(arfL, residues = "AMINO", pseudocounts = "background",
                     seqweights = "Henikoff")

plot(arf.PHMM)
Deriving profile HMM
Refining model
Iteration 1: alignment with 4 rows & 9 columns, PHMM with 9 modules
Sequential alignments were identical after 1 iterations
Done
In [ ]:
ฝึกโมเดลที่ได้กับข้อมูลลำดับกรดอะมิโนที่จำลองขึ้นมาจำนวนสิบโปรตีน ด้วยฟังก์ชั่น train()
In [231]:
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)
Iteration 1 log likelihood = -250.8972 
Iteration 2 log likelihood = -226.383 
Iteration 3 log likelihood = -223.9515 
Iteration 4 log likelihood = -221.8283 
Iteration 5 log likelihood = -219.9139 
Iteration 6 log likelihood = -218.1969 
Iteration 7 log likelihood = -216.482 
Iteration 8 log likelihood = -215.5026 
Iteration 9 log likelihood = -215.1531 
Iteration 10 log likelihood = -214.9869 
Iteration 11 log likelihood = -214.8412 
Iteration 12 log likelihood = -214.6845 
Iteration 13 log likelihood = -214.5454 
Iteration 14 log likelihood = -214.452 
Iteration 15 log likelihood = -214.3998 
Iteration 16 log likelihood = -214.372 
Iteration 17 log likelihood = -214.3568 
Iteration 18 log likelihood = -214.3482 
Convergence threshold reached after 18 EM iterations

ทดสอบโมเดลที่ได้กับลำดับกรดอะมิโนที่สนใจด้วยฟังก์ชั่น Viterbi() เพื่อหา path ที่เหมาะสม โดย M = match D = deletion และ I = insertion

In [232]:
# 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]
Optimal path with length 9 and score -18.84201
Optimal path with length 9 and score -17.39241
Optimal path with length 9 and score -17.89408
  1. 'M'
  2. 'M'
  3. 'M'
  4. 'M'
  5. 'M'
  6. 'M'
  7. 'M'
  8. 'M'
  9. 'M'
Optimal path with length 9 and score -23.26544
Optimal path with length 9 and score -35.5663
  1. 'M'
  2. 'M'
  3. 'M'
  4. 'M'
  5. 'M'
  6. 'M'
  7. 'M'
  8. 'M'
  9. 'M'