基于KNN的DNA序列FASTA文件特征提取及不同K值下的分类准确率Python代码
以下是使用Python实现基于KNN算法的DNA序列FASTA文件特征提取,并计算不同K值下的分类准确率的代码示例:
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
# 读取FASTA文件
def read_fasta(file_path):
seq = ''
with open(file_path) as f:
for line in f:
if line.startswith('>'):
continue
seq += line.strip()
return seq
# 计算k-mer频率特征
def kmer_frequency(seq, k):
kmer_dict = {}
for i in range(len(seq)-k+1):
kmer = seq[i:i+k]
if kmer not in kmer_dict:
kmer_dict[kmer] = 0
kmer_dict[kmer] += 1
feature = [kmer_dict.get(kmer, 0) for kmer in sorted(kmer_dict.keys())]
return feature
# 读取正样本及其特征
pos_seq = read_fasta('positive.fasta')
pos_feature = kmer_frequency(pos_seq, 5)
# 读取负样本及其特征
neg_seq = read_fasta('negative.fasta')
neg_feature = kmer_frequency(neg_seq, 5)
# 将正负样本合并为一个数据集,并打上标签
X = [pos_feature, neg_feature]
y = [1, 0]
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练KNN分类器并预测
for k in range(1, 11):
knn = KNeighborsClassifier(n_neighbors=k)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
accuracy = np.mean(y_pred == y_test)
print('K = {}, accuracy = {:.2f}%!'.format(k, accuracy * 100))
代码说明:
read_fasta(file_path)函数用于读取FASTA文件,并返回DNA序列字符串。kmer_frequency(seq, k)函数用于计算k-mer频率特征,返回一个包含所有k-mer频率的列表。- 读取正样本和负样本的FASTA文件,并提取它们的k-mer频率特征。
- 将正负样本合并为一个数据集,并打上标签。
- 划分训练集和测试集。
- 使用循环遍历不同的K值,训练KNN分类器,并预测测试集的标签。
- 计算并输出每个K值下的分类准确率。
代码中使用了sklearn库中的train_test_split函数进行训练测试集划分,KNeighborsClassifier类实现KNN分类器。代码示例展示了如何提取DNA序列特征,并使用KNN算法进行分类,并计算了不同K值下的分类准确率。
原文地址: https://www.cveoy.top/t/topic/lEhl 著作权归作者所有。请勿转载和采集!