深度学习中氨基酸序列的编码方法

目录

  • 1. 常规特征编码方法
    • 1.1 类别特征
    • 1.2 文本特征
  • 2. 基于领域先验知识的编码方法
    • 2.1 演化关系
    • 2.2 理化性质
  • 3. 基于学习的编码方法
    • 3.1 预训练模型
    • 3.2 端到端方法
  • 参考

随着AI算法创新和算力提升,叠加生物(组学)数据(指数级)增长,深度学习在生信领域中的应用也愈加广泛。
具体到蛋白领域,深度学习已经在三级结构预测、新抗原预测等场景中取得了当前最优的预测性能。在实际应用时,为了将氨基酸序列输入深度学习模型,需要通过编码方法将其转化为数字表示。
本文介绍了几种常见的编码方法。
在这里插入图片描述

1. 常规特征编码方法

1.1 类别特征

从广泛的意义上说,氨基酸序列是一种类别特征。因而可以通过机器学习中类别特征的编码方法进行转换。常见的方法包括独热编码目标编码等,具体可参考文章《深度盘点:类别型特征编码方法总结》。
但氨基酸序列的可能值非常多(高基类),甚至样本之间可能完全不同。因而实践中此类编码方法的效果可能有限。如笔者最近在一个免疫原性预测项目中应用hyperopt+catBoost(算法内置ordered TS编码),实验结果显示编码后的氨基酸序列特征对模型性能几乎没有影响。

1.2 文本特征

氨基酸序列也可以视为文本,因而适用文本特征方法。

词袋模型
该编码方式可以很好地应用于肽等较短序列。但是,该方法会丢失序列的顺序信息。这对于较长序列非常重要,因为许多类别是由序列中的特定结构域定义的。

# CountVectorizer: Convert a collection of text documents to a matrix of token counts
vectorizer = CountVectorizer(analyzer="char")
X_vec = vectorizer.fit_transform(X)
X_AAC = X_vec.toarray()

N-gram模型:为保留序列中的(一些)顺序信息,可以统计所有序列中最常见氨基酸组合的出现次数。

vectorizer = CountVectorizer(analyzer="char", ngram_range=(3,3), max_features = 20)##获取20个最常见的3个字母氨基酸组合,然后统计每个组合在所有序列中的出现次数
X_train_vec = vectorizer.fit_transform(X)
X_train_AAN = X_train_vec.toarray()

embedding:首先将序列分割成氨基酸,然后为每个氨基酸分配一个编号(标记化)。

tk = Tokenizer(char_level=True)
tk.fit_on_texts(X)
seq_tok_all = tk.texts_to_sequences(X)
##for deep learning models, equal size sequences are required
max_length = 256
#max_length = len(max(X, key=len))
X_vec = pad_sequences(seq_tok_all, maxlen=max_length, padding='post')

2. 基于领域先验知识的编码方法

相较一般的类别特征编码方法,基于领域先验知识的编码方法不仅能将每个氨基酸唯一映射到表征空间,还能捕获氨基酸的特定属性。
如BLOSUM可以捕获演化关系,VHSE8可以捕获理化性质。

2.1 演化关系

BLOSUM62:BLOSUM62 是一个替换矩阵,通过分数来说明氨基酸之间的相似性。该分数反映了在大型蛋白质数据库中研究序列保守性时发现的替换频率。数字62指在分析中序列聚类的一致性。

import epitopepredict as epblosum = ep.blosum62def blosum_encode(seq):#encode a peptide into blosum featuress=list(seq)x = pd.DataFrame([blosum[i] for i in seq]).reset_index(drop=True)e = x.values.flatten()    return ee=blosum_encode(pep)

2.2 理化性质

NLF:使用许多理化特性,通过Fisher Transform(类似PCA)进行转换,从而产生一组较小的特征,这些特征同样可以很好地描述氨基酸。共有 19 个变换特征。

#read the matrix a csv file on github
nlf = pd.read_csv('https://raw.githubusercontent.com/dmnfarrell/epitopepredict/master/epitopepredict/mhcdata/NLF.csv',index_col=0)def nlf_encode(seq):    x = pd.DataFrame([nlf[i] for i in seq]).reset_index(drop=True)  e = x.values.flatten()return ee=nlf_encode(pep)

VHSE8

#https://github.com/ikmb/amino_acid_encoding_deep_learning_applications/blob/master/CustomTrainingScripts/trainAnHLARNNmodelVHSE8.py## load the tokenizer: 
with open("OneMerAminoAcidTokenizer.pickle","rb") as input_:tokenizer=pickle.load(input_)## load the VHSE8
raw_VHSE=pd.read_csv('VHSE8.csv')
# prepare VHSE for embedding: 
VHSE=np.zeros((21,8),dtype=np.float32)
count=0
for index, char in enumerate(tokenizer.word_index):count+=1embedding_vector= np.array(raw_VHSE.loc[raw_VHSE.AA==char.upper()])[:,1:9].reshape(8,)VHSE[index+1,:]=[embedding_vector[i].replace("−",'-') for i in range(embedding_vector.shape[0])]if count ==20: # breake after getting the index of the 20th amino acid as VHSE8 only encode the standerd 20 amino acidsbreak## load and Encode the train  dataset: 
trainData=pd.read_csv(trainDataPath)
trainlabels=np.array(trainData.iloc[:,1].tolist())
trainTensor=tf.keras.preprocessing.sequence.pad_sequences(sequences=tokenizer.texts_to_sequences(trainData.iloc[:,0]),dtype=np.int32,maxlen=37,padding="pre")##...

3. 基于学习的编码方法

尽管基于领域先验知识的编码方法提供了属性信息,但特定属性可能对某些任务可能并没有太大用处。因而提出了任务特异的编码方法,集直接从数据中学习编码方法。

3.1 预训练模型

3.2 端到端方法

根据的Hesham在亲和力和蛋白互作任务上的实验结果,端到端的方法可以获得不逊于先验知识的性能。


参考

ElAbd, Hesham, et al. “Amino acid encoding for deep learning applications.” BMC bioinformatics 21 (2020): 1-14.
Create an MHC-Class I binding predictor in Python
Protein encoding for deep learning models

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/314642.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言注意点(1)

1、switch,case,break,default相关注意点 当变量表达式的内容与某个case后的常量相等后,就执行该case下的语句,break表示该case以后的内容不会执行(立即跳出switch语句), 如果没有跟break,会继续…

C++正则表达式全攻略:从基础到高级应用

C正则表达式全攻略:从基础到高级应用 一、基础知识二、正则表达式的基本匹配三、C中使用正则表达式四、高级正则表达式五、实践示例六、性能优化6.1、编译正则表达式6.2、避免过度使用回溯6.3、优化匹配算法 七、总结 一、基础知识 正则表达式是一种用于匹配、搜索…

国标GB28181对接的时候如何配置服务端口和本地端口

目 录 一、国标GB28181对接需要配置的端口等参数 二、GB28181服务器端口的配置:SIP服务器端口 三、GB28181设备测端口的配置:本地SIP端口 (一)本地SIP端口配置的意义 (二&#xf…

<软考高项备考>《论文专题 - 42 范围管理(1) 》

1 范围管理基础 1.1 写作要点 过程定义、作用写作要点、思路规划范围管理规划范围管理是为了记录如何定义、确认和控制项目范围及产品范围,而创建范围管理计划的过程。作用:在整个项目期间对如何管理范围提供指南和方向。写范围管理计划、需求管理计划的内容;编写…

翼辉 SylixOS 正式支持“申威“处理器架构

近日,翼辉信息发布了最新的 SylixOS V3.4.0 操作系统。在 SylixOS V3.4.0 中,已正式加入了对申威 SW64 自主指令集架构的支持。 SW64 自主指令集架构是我国在处理器领域的一项重要突破,其知识产权完全可控、自主性高、安全性强,核…

深度学习|10.2 边缘检测示例 10.3 更多边缘检测

文章目录 如何在编程中实现卷积运算使用卷积实现边缘检测结果矩阵的元素正负性质的意义水平分类器如何构造卷积运算使用的矩阵 原矩阵通过一个过滤器(filter)/核心(kernel)来生成一个新的矩阵。 如何在编程中实现卷积运算 使用卷积…

blender mix节点和它的混合模式

Mix 节点是一种用于混合两个颜色或者两个图像的节点,它有以下几个输入和输出: Color1:用于接收第一个颜色或者图像,也就是基色。Color2:用于接收第二个颜色或者图像,也就是混合色。Fac:用于控制…

Django 实现Web便签

效果图 会用到的知识 目录结构与URL路由注册request与response对象模板基础与模板继承ORM查询后台管理 实现步骤 1. terminal 输入 django-admin startapp the_10回车 2. 注册, 在 tutorial子文件夹settings.py INSTALLED_APPS 中括号添加 "the_10" IN…

病情聊天机器人,利用Neo4j图数据库和Elasticsearch全文搜索引擎相结合

项目设计目的: 本项目旨在开发一个病情聊天机器人,利用Neo4j图数据库和Elasticsearch全文搜索引擎相结合,实现对病情相关数据的存储、查询和自动回答。通过与用户的交互,机器人可以根据用户提供的症状描述,给出初步的可…

Web前端第9章思维导图

本章内容是关于CSS样式属性,包含CSS单位、CSS字体样式、CSS文本样式、CSS颜色与背景、CSS列表样式、CSS盒模型。重点在于CSS盒模型、CSS文本样式、CSS字体样式。 1. CSS单位 绝对单位 磅(pt),pica(pc)、c…

java SSM拖拉机售后管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM拖拉机售后管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源 代码和数据库,系统主要…

PiflowX组件-JDBCRead

JDBCRead组件 组件说明 使用JDBC驱动向任意类型的关系型数据库读取数据。 计算引擎 flink 有界性 Scan Source: Bounded Lookup Source: Sync Mode 组件分组 Jdbc 端口 Inport:默认端口 outport:默认端口 组件属性 名称展示名称默认值允许…