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

目录

  • 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 ep

blosum = ep.blosum62

def blosum_encode(seq):
    #encode a peptide into blosum features
    s=list(seq)
    x = pd.DataFrame([blosum[i] for i in seq]).reset_index(drop=True)
    e = x.values.flatten()    
    return e

e=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 e

e=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+=1
    embedding_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 acids
        break

## 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.mfbz.cn/a/285319.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习|3.6 激活函数 3.7 为什么需要非线性激活函数

激活函数 主要有sigmoid函数、tanh函数、relu函数和leaky relu函数 tanh函数相比sigmoid函数是具有优势的,因为tanh函数使得输出值的平均值为0,而sigmoid函数使得输出值的平均值为1/2,对下一层来说tanh输出的0更好进行处理。 激活函数tanh…

【机器学习】卷积神经网络(三)

四、理论分析 4.1 反卷积运算 我们可以将过滤器转换为 Toeplitz matrix ,将图像转换为向量,然后仅通过一个矩阵乘法进行卷积,而不是使用 for-loops 对图像(或任何其他 2D 矩阵)执行 2D 卷积。 (当然还要对乘…

基于YOLOv8的目标跟踪技术

💡💡💡本文摘要:介绍了YOLOv8自带的目标跟踪技术以及评价指标,并教会你如何在YOLOv8使用 1.YOLOv8自带两种跟踪方法 ultralytics/cfg/trackers/文件夹下 1.1 ByteTrack介绍 https://arxiv.org/pdf/2110.06864.pdf 摘…

Ubuntu基础之vim编辑器

前言 Vim是一个文本编辑器,通常在Unix和Linux系统上使用。它是Vi编辑器的改进版本,具有更多的功能和定制选项。Vim是一个强大的编辑器,可以通过命令模式和插入模式来编辑文本文件。它也有许多插件和扩展 1. 启动 Vim 在终端中输入以下命令来…

System.out::println是什么 ? Lambda表达式和方法引用

System.out::printlin 可以很好的串联Java8新特性中的Lambda表达式和方法引用 List<Integer> list Arrays.asList(1, 2, 3, 4, 5);//完成对集合元素的遍历输出list.forEach(System.out::println);首先用Lambda体简化匿名内部类了解函数式接口的概念方法引用的用法Consum…

【快速全面掌握 WAMPServer】11.安装 PHP 扩展踩过的坑

网管小贾 / sysadm.cc 我们在调试程序代码时&#xff0c;总会遇到一些 PHP 项目需要某些扩展组件。 而在 WAMPServer 下通常的 PHP 扩展的安装也不算有多麻烦。 具体关于 PHP 扩展的区分&#xff08;比如安全线程或非安全线程&#xff09;&#xff0c;以及怎么安装小伙伴们可…

【Emgu.CV教程】第18篇 、色彩处理之AdaptiveThreshold()自适应阈值化处理

之前学了Threshold()二值化函数&#xff0c;这个是在每一张照片里面&#xff0c;用同一个阈值进行二值化操作&#xff0c;但是对于一些对比度比较大的图片&#xff0c;可能会出现问题。比如这张照片想要提取出黑色文字文字&#xff1a; 如果执行以下代码&#xff1a; CvInvoke…

基于Flutter构建小型新闻App

目录 1. 概述 1.1 功能概述 1.2 技术准备 1.3 源码地址 2. App首页 2.1 pubspec依赖 2.2 热门首页组件 2.2.1 DefaultTabController 2.2.2 Swiper 2.3 新闻API数据访问 2.4 热门首页效果图 3. 新闻分类 3.1 GestureDetector 3.2 新闻分类效果图 4. 收藏功能 4…

详解 MySql InnoDB 的 MVCC 实现机制

目录 一. 前言 二. 认识 MVCC 2.1. 什么是 MVCC&#xff1f; 2.2. 什么是当前读和快照读&#xff1f; 2.3. 当前读、快照读和 MVCC 的关系 2.4. MVCC 能解决什么问题&#xff0c;好处是什么&#xff1f; 2.5. 小结 三. MVCC 的实现原理 3.1. 隐式字段 3.2. undo 日志…

SQL常见面试题

今天刷了一遍牛客里的必知必会题&#xff0c;一共50道题&#xff0c;大部分都比较基础&#xff0c;下面汇总一下易错题。 SQL81 顾客登录名 本题几个关键点&#xff1a; 登录名是其名称和所在城市的组合&#xff0c;因此需要使用substring()和concat()截取和拼接字段。得到登…

SpringBoot解决前后端分离跨域问题:状态码403拒绝访问

最近在写和同学一起做一个前后端分离的项目&#xff0c;今日开始对接口准备进行 登录注册 的时候发现前端在发起请求后&#xff0c;抓包发现后端返回了一个403的错误&#xff0c;解决了很久发现是【跨域问题】&#xff0c;第一次遇到&#xff0c;便作此记录✍ 异常描述 在后端…

前端:html+css+js实现CSDN首页

提前说一下&#xff0c;只实现了部分片段哈&#xff01;如下&#xff1a; 前端&#xff1a;htmlcssjs实现CSDN首页 1. 实现效果2. 需要了解的前端知识3. 固定定位的使用4. js 监听的使用4. 参考代码和运行结果 1. 实现效果 我的实现效果为&#xff1a; 原界面如下,网址为&…

计算机网络(1)

计算机网络&#xff08;1&#xff09; 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 计算机网络和因特网&#xff08;1&#xff09;因特网概念解读服务常见的服务 协议网络边缘特点强调 网络核心特点强调 小程一言 我的计算机网络专栏&#xff0c;是自己在计算机网络…

1. Spring概述

概述 Spring 是一个开源框架Spring 为简化企业级开发而生&#xff0c;使用 Spring&#xff0c;JavaBean 就可以实现很多以前要靠 EJB 才能实现的功能。同样的功能&#xff0c;在 EJB 中要通过繁琐的配置和复杂的代码才能够实现&#xff0c;而在 Spring 中却非常的优雅和简洁。…

软件运维实施维保方案

1.项目情况 2.服务简述 2.1服务内容 2.2服务方式 2.3服务要求 2.4服务流程 2.5工作流程 2.6业务关系 2.7培训 3.资源提供 3.1项目组成员 3.2服务保障 项目开发、管理、实施、运维、结项、验收等全文档获取&#xff1a;软件开发全套资料-CSDN博客

【LeetCode每日一题】1599. 经营摩天轮的最大利润(模拟)—2024新年快乐!

2024-1-1 文章目录 [1599. 经营摩天轮的最大利润](https://leetcode.cn/problems/maximum-profit-of-operating-a-centennial-wheel/)思路&#xff1a; 1599. 经营摩天轮的最大利润 思路&#xff1a; 1.对摩天轮的运转情况进行模拟&#xff0c; 2.遍历数组&#xff0c;分别计…

简单FTP客户端软件开发——JavaFX开发FTP客户端

文章目录 导入外部包commons-net-3.10.0.jarJavaFX开发客户端 FTP客户端要求如下&#xff1a; 简单FTP客户端软件开发 网络环境中的一项基本应用就是将文件从一台计算机中复制到另一台可能相距很远的计算机中。而文件传送协议FTP是因特网上使用得最广泛的文件传送协议。FTP使用…

Golang leetcode707 设计链表 (链表大成)

文章目录 设计链表 Leetcode707不使用头节点使用头节点 推荐** 设计链表 Leetcode707 题目要求我们通过实现几个方法来完成对链表的各个操作 由于在go语言中都为值传递&#xff0c;&#xff08;注意这里与值类型、引用类型的而区别&#xff09;&#xff0c;所以即使我们直接在…

RocketMQ 生产者源码分析:DefaultMQProducer、DefaultMQProducerImpl

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

【面试】面向对象编程的三大概念(实例辅助记忆)

【面试】面向对象编程的三大概念&#xff08;实例辅助记忆&#xff09; 虑面向对象编程的三大特性&#xff0c;它们是&#xff1a; 封装&#xff08;Encapsulation&#xff09;&#xff1a; 将对象的状态和行为封装在一起&#xff0c;对外部隐藏对象的内部实现细节。这样可以防…
最新文章