DNA序列KNN分类器:使用Biopython和Scikit-learn对大型FASTA文件进行分类
import numpy as np from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score from Bio import SeqIO
读取FASTA文件
def read_fasta_file(file_path): sequences = [] labels = [] for record in SeqIO.parse(file_path, 'fasta'): sequences.append(str(record.seq)) labels.append(record.id) return sequences, labels
将DNA序列转换为数值特征
def dna_to_feature(sequences): features = [] for seq in sequences: seq_feature = [] for base in seq: if base == 'A': seq_feature.extend([1, 0, 0, 0]) elif base == 'C': seq_feature.extend([0, 1, 0, 0]) elif base == 'G': seq_feature.extend([0, 0, 1, 0]) elif base == 'T': seq_feature.extend([0, 0, 0, 1]) features.append(seq_feature) return np.array(features)
读取数据集
def read_dataset(file_path): sequences, labels = read_fasta_file(file_path) X = dna_to_feature(sequences) y = np.array(labels) return X, y
划分训练集和测试集
def split_dataset(X, y, test_size=0.3, random_state=42): X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=random_state) return X_train, X_test, y_train, y_test
训练和测试模型
def train_and_test(X_train, X_test, y_train, y_test, k_values): for k in k_values: knn = KNeighborsClassifier(n_neighbors=k) knn.fit(X_train, y_train) y_pred = knn.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print('For k =', k, ', accuracy is', accuracy)
if name == 'main': file_path = 'large_dataset.fasta' X, y = read_dataset(file_path) X_train, X_test, y_train, y_test = split_dataset(X, y) print('X_train:', X_train.shape) k_values = [1, 3, 5, 7, 9] train_and_test(X_train, X_test, y_train, y_test, k_values)
原文地址: https://www.cveoy.top/t/topic/lIZu 著作权归作者所有。请勿转载和采集!