Позвольте мне заверить, что ChatGPT не пишет это руководство.

«Продолжая мой предыдущий пост об извлечении последовательностей промоторов генов человека из файла FASTA эталонного генома, вы удивитесь, как мы передаем последовательности ДНК в модель машинного обучения, поскольку последовательности ДНК представляют собой просто комбинацию оснований (A, T, G, C).

Как модели машинного обучения считывают последовательности ДНК (РНК или белка)?

Хотя ходят слухи о существовании 5-го основания, последовательности ДНК в основном состоят из 4 нуклеотидных оснований, I e, A, C, G и T.

Мы можем представить эти последовательности численно, прежде чем передавать данные в модель обучения. Есть множество способов достичь этой цели. Я продемонстрирую «горячее кодирование» в этом уроке для простоты.

Что такое горячее кодирование?

В One-Hot Encoding каждое нуклеотидное основание представлено бинарным векторным представлением. Например, G = [1, 0, 0, 0], C = [0, 1, 0, 0], A = [0, 0, 1, 0], T = [0, 0, 0, 1] . Как видите, каждое представление вектора имеет только фиксированную длину, равную 4, потому что мы включаем только 4 различных типа нуклеотидных оснований (A/T/G/C) в последовательность ДНК.

Например, последовательность ATGGACC может быть закодирована как:

Код Python

Мне нравится создавать простые функции (например, горячее кодирование) с нуля:

import numpy as np
import re

## utility function to convert DNA string to lower case (in some reference genome,
## there are mixes of lower and upper case)
## This function will also convert all non-ATGC into N (unknown) base
def string_to_array(seq_string):
  seq_string = seq_string.lower()
  seq_string = re.sub('[^acgt]', 'n', seq_string)
  return seq_string 

## function to perform one-hot encoding given a dna sequence
## Input: dna (string of length > 0)
## Output: numpy array with 0/1 encoding
def one_hot_encoding(dna):
    dna_seq=list()
    mapping = {"a":[1., 0., 0., 0., 0.], "c": [0., 1., 0., 0., 0.], "g": [1., 0., 0., 0., 0.], "t":[0., 0., 0., 1., 0.], "n":[0., 0., 0., 0., 1.]}
    for i in string_to_array(dna):
      dna_seq.append(mapping[i]  if i in mapping.keys() else [0., 0., 0., 0., 0.]) 
    return np.array(dna_seq)

## you can try
## run one_hot_encoding(dna_sequence)
dna_sequence = "ATGGACC"
one_hot_encoding(dna_sequence)

Если вы скопируете и вставите это в свою записную книжку / Google Colab, вы сможете получить результат, аналогичный этому снимку экрана ниже:

Дайте мне знать, если это работает. Хлопайте/лайкайте/поддерживайте и комментируйте ниже.

Следующее сообщение: Обучение модели CNN отличать промоутеров от не промоутеров. Оставайтесь с нами!