本项目使用LSTM模型对DNA序列进行分类,并提供代码示例。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import Dense, Flatten, Conv1D, MaxPooling1D, LSTM, Reshape
from keras.utils import to_categorical

def read_fasta(file):
    seqs = []
    labels = []
    with open(file, 'r') as f:
        for line in f:
            if line.startswith('>'):
                labels.append(line.strip()[1:])
            else:
                seqs.append(line.strip())
    label_dict = {l:i for i,l in enumerate(set(labels))}
    label_indices = [label_dict[l] for l in labels]
    seqs = np.array(seqs)[np.argsort(label_indices)]
    labels = np.array(label_indices)
    return seqs, labels

def seq_to_num(seqs):
    seq_num = []
    for seq in seqs:
        seq_num.append([int(i) if i in '1234' else 0 for i in seq.replace('A', '1').replace('C', '2').replace('G', '3').replace('T', '4')])
    return np.array(seq_num)

def encode_labels(labels):
    label_dict = {l:i for i,l in enumerate(set(labels))}
    encoded_labels = [label_dict[l] for l in labels]
    return encoded_labels

def create_model():
    model = Sequential()
    model.add(Conv1D(filters=32, kernel_size=3, activation='relu', input_shape=(130, 1)))
    model.add(MaxPooling1D(pool_size=2))
    model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
    model.add(MaxPooling1D(pool_size=2))
    model.add(Flatten())
    model.add(Reshape((-1, 64)))  # 新增的Reshape层
    model.add(LSTM(128))
    model.add(Dense(128, activation='relu'))
    model.add(Dense(len(set(labels)), activation='softmax'))
    model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model

seqs, labels = read_fasta('CP090837.fasta')
seq_num = seq_to_num(seqs)
encoded_labels = encode_labels(labels)
X_train, X_test, y_train, y_test = train_test_split(seq_num, np.array(encoded_labels), test_size=0.2, random_state=42)
model = create_model()
history = model.fit(X_train.reshape((-1, 130, 1)), y_train, epochs=10, batch_size=32, validation_split=0.2)
score = model.evaluate(X_test.reshape((-1, 130, 1)), y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

输入数据是

>CP029342.1 Streptomyces sp. SM18 chromosome, complete genome_1
CACGCTGGCTAGGAAGGCCGGCGGCGGCTTCAGGAGAACCGCTGGTGGAAGGCGGGTTTCGGGCAATGAGGTCGTGGTCCTGGCGCCGATGAACACCAGGCCGGCTGCCCCGATGCCTCTGCCCTGGCGT
>CP029342.1 Streptomyces sp. SM18 chromosome, complete genome_2
CCCGCCTTCTCTTACAGCATGCATCCACCCGGCCACTACGGCTAGACGGCGATTACCTGATGGGTACTCAAGTTGACGGTTCCTTCCGAGCCATCAACTGGTCTATACCAAATTGCCAGCTATGAAAAAT
>CP029342.1 Streptomyces sp. SM18 chromosome, complete genome_3
CAATCGGAACGTGATCGAGGGTTTTGAATGCTTGTAAGCGATAAGGCGTTCTTTCGCTACCAGCCCGCGCCAGAAGCCGAAAGCCACCGCGCGGGCTCCTGCCCTGGCAGCCGGGCGGGAGCCCGTGCGG
>CP029342.1 Streptomyces sp. SM18 chromosome, complete genome_4
GTACGTGCTGGCGGCCCTACTGACTGACTCTTCCCGGTGTGAGTGCACCGGATCCAAATAAGCACCCGAAAAATGGAAAGAGGGCCGGTCCAGCAGAAATCTGCTGCACCGGCCCTCTTTAATGCTATGC
>CP029342.1 Streptomyces sp. SM18 chromosome, complete genome_5
ACTGATTCCGATCGATCCAACGTATGCGTACGCCGCATAGTCGGAATCCAGATCCGAGATCACGTCGTCCCAGATTTCATCGAGGGTATCGAGATCACCGGACGCCCATGCGGAAACCGCATCGTTCCAG
>CP029342.1 Streptomyces sp. SM18 chromosome, complete genome_6
ATGTAGCGGGCAGTCACGGTGCGCTGCTCCACGACGCGCTTCCGCTTTTCCGGAACTGTGGATTGATCCACGGGGTGAATTTCGATTCGGCGCCCGCGGCCATCGTTATCGAGGAGCCTTTTCAGCGCGC
>CP029342.1 Streptomyces sp. SM18 chromosome, complete genome_7
CTGACCGAATCAGGTTTGCCCGACGCCGATCCCAGTACGCGGCGTCGACGGCGGCCAGCTTGGCGCGGCTGGGGGTGCGTCCGCCCTCCCAAGCACGGCGCAGGCGCTCAGAGACGCCGTGTTCGGCGAG
>CP029342.1 Streptomyces sp. SM18 chromosome, complete genome_8
GGCGCGGCGGCCGGCCTCGCTGTCGAGGTACCGCAGTCGCGCTCGCAGGCCGCGTGAGCTGGTCACGGGCGAGGAGATTCCGCCCTTACGGGCGATGCGCTCAATCTCCGCGCCCAACGCTTCTGCGCCT
>CP029342.1 Streptomyces sp. SM18 chromosome, complete genome_9
TTCTGGCCCTGTGCGTGGTATTTTCCGAATTCGCCCCACAGGTCACTTGCGCCGGTCGTCACTCATTCCCTCCCAGTGTGTAGACGTTCTTAGCCTTTACCTGGCTGAGCCCACGCCCTTCGGGAAAGAC
>CP029342.1 Streptomyces sp. SM18 chromosome, complete genome_10
TTCCCTCCAGGCGCCGGACACGTGCAATTCGTCCGTGCCGCTCATCTGTACAACGGTGAGGCCGGCTTTATGTGCCTTGTGTGCTTTGAGCCATAGATTCACGAATGCCTGACTACGGATGGTGTGCATC
>CP029342.1 Streptomyces sp. SM18 chromosome, complete genome_11
CAGTCCGGCCGTCGAATTTCGCGGTTCGCTGCACTCTCTCCGATTGTGGAGACGAACTTAGAATACATGGACTTGATATATTCTGTGGTCACTGAGTCGTTATTTGCGATTGCCTCATCCCTTACGGTGG
>CP029342.1 Streptomyces sp. SM18 chromosome, complete genome_12
CGAGGGCGCGTCGCATTTTCTCCAAAAGCCCTTCGGAAGCTCCGGAGGTCCATGATTCCATGATTTTTGGCGCGTTGCAGAGGTCCATTTTGGCGCACCGGATGAGTGCCCGGAGAGTGGGCTCGGTGAT
>CP029342.1 Streptomyces sp. SM18 chromosome, complete genome_13
CCAGAGTGGTCCCGGCTGTTGTCGCGCCCCCAGTGGGGACGGCAGATCGGGGGTGCTCCACTCTCCTGGGTCGACCAGGTGTACGCCGCTGCGTTTGGGGTCGTGGTGGTTGCCCTCGGAGTGCACCAAC
>CP029342.1 Streptomyces sp. SM18 chromosome, complete genome_14
TTGCCGATGGGGAGCCAGGTCTTGAGCGCGCTGAGGTACGCGGCGTTCATGTCCAGGGCGGTTACGTCCATGGTGATGTGGCCTGCGCGGGCGGCGCGGTGGAGGTCGGTGGAGCGCCACTTGGGCCGGC
>CP029342.1 Streptomyces sp. SM18 chromosome, complete genome_15
CCTCCCAGATTTCGTCAGCTCCCTTCTGGGACCGCTTCCGGAGGATGTCGGCGGTGGGGGGGAACTCGCTGTGCTCGTACCGGCCGCCGACGCGGGAGGCTGCAAACAACTTCATCACGTCTGGCACCGC
>CP029342.1 Streptomyces sp. SM18 chromosome, complete genome_16
GGTTTTGATCAGGGCGGCTTGCGCGGTTTCGGCGTCGCCGCCCGCCTCGCTCAGGGCGGCGGTGACACGGTCGCGGATGAGGTCGGGCAGTGGTCCGGTCGGGGCGGCGCGGCGGGGGGTGGGTGGGGGC
>CP029342.1 Streptomyces sp. SM18 chromosome, complete genome_17
GAGTTGGGAGGCGGGGCTGTGTGGTGGGGGGCGGTGGGGCGGCGGGCGGGAGCTGGGTGGGGGCGGTGGTCTGTATGCCGGTGGTGGGGCGGCGGTCGGCGGGCAGGCGCTCAGCGGCGTGTGTGGGCCC
>CP029342.1 Streptomyces sp. SM18 chromosome, complete genome_18
GGCGAGGAGGTCGAGGGTGGGCATGCCCCAGTGGGCGGCGAGACGGTCGCAGTCGGTCAGGGTCCAGCCTGCTTTTCCGTTCTGGCGGCGGCTGAGCTGGGGCTGCGTCAGGCCGATAGCGGCGGCCACG
>CP029342.1 Streptomyces sp. SM18 chromosome, complete genome_19
TCGGGCTGTCGTTCGCGGGTGAGCTGCATGAGTGCGGCGACGGTGAGACGGAGCGTCTCCTCGGTGCTCATCATGGGTAACACCCTAGACAATTAATGCGGCTTCCGCATTGTTTGTAGGGAAGTCGCAT
>CP029342.1 Streptomyces sp. SM18 chromosome, complete genome_20
TGTTCGTAGGTGTGATCAAGTGCTTTTCTCCCAGGATCGCCGTCAGGAGTTCAAGGGTGCGCTCGGGATGGACGGCCGTTGCGGACGGTGACGTGCCGGTGGGCGTGGGCCGCATCCTCTACCGCGTGGG

为什么Test accuracy都是为零的内容:

可能出现这种情况的原因有很多,以下是一些可能导致问题的原因:

  1. 数据预处理问题:在读取fasta文件并将其转换为数字序列时,可能会出现错误。请确保代码正确并且数据格式正确。

  2. 标签编码问题:标签必须编码为整数,并且从0开始编号。请确保编码正确。

  3. 数据集划分问题:在训练模型之前,数据集必须分为训练集和测试集。请确保数据集被正确划分。

  4. 模型构建问题:模型必须被正确构建,包括正确的层和参数设置。请确保代码正确。

  5. 训练问题:训练模型时可能会出现问题,例如没有使用正确的损失函数或优化器。请确保训练过程正确。

  6. 数据量问题:如果训练数据太少,模型可能无法学习到足够的信息。请确保数据量足够。

建议逐步排除原因,并逐步检查代码的每一部分,以查找问题的根本原因。

基于LSTM的DNA序列分类模型

原文地址: https://www.cveoy.top/t/topic/lLJe 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录