2021SC@SDUSC
基于人工智能的多肽药物分析问题
主题:肽与HLA分子结合预测研究(4)
材料和方法
HLA-肽结合和免疫原性数据
HLA I类等位基因和肽之间的结合数据来自IEDB
http://www.iedb.org/
对HLA-肽对进行筛选:
- 属于HLA-A、B和C亚型的HLA I类等位基因
- 肽的长度在8到15之间
- 排除实验结果不一致的肽对
总共获得了327178个非冗余HLA-肽对,覆盖169个HLA等位基因,其中257089个为结合物
然后通过以下步骤平衡每个等位基因的阳性数据和阴性数据:
- 基于327178对训练基本模型
- 创建假HLA肽对。
每个HLA等位基因
N
p
s
e
N_{pse}
Npse 的创建伪对数计算如下:
N
p
s
e
=
100
∗
∣
N
p
o
s
−
N
n
e
g
∣
N_{pse} = 100∗|N_{pos} − N_{neg} |
Npse=100∗∣Npos−Nneg∣
其中
N
p
o
s
N_{pos}
Npos和
N
n
e
g
N_{neg}
Nneg分别代表每个HLA等位基因的阳性和阴性对数。通过随机选择Ensembl数据库中的一种蛋白质并在该蛋白质中随机提取8-11个无突变的肽,以及使用基本模型预测伪对的结合可能性,并为每个等位基因选择高置信度阴性对(得分<0.1)或阳性对(得分>0.9)。
经过这些步骤后,大多数等位基因的数据是平衡的,具有异常比例的等位基因被删除了。最后,使用437077个HLA对(包含81个HLA等位基因)训练结合模型,其中280525个收集到的对和156552个伪对。
pHLA的免疫原性数据也从IEDB得到。
对数据进行筛选:
- 肽的长度在8到15之间
- 对于实验结果不一致的配对,我们选择阳性配对
最后,获得32785对HLA-肽,其中5702对与HLA-A02:01相关。在32785个HLA-肽对中,7212个具有免疫原性,3013个免疫原性HLA肽对与HLA-A02:01相关。
代码分析
接上次的代码,分析attention.py模块的代码
代码结构
attention.py
from keras import backend as K, initializers, regularizers, constraints
from keras.engine.topology import Layer
def dot_product(x, kernel):
if K.backend() == 'tensorflow':
return K.squeeze(K.dot(x, K.expand_dims(kernel)), axis=-1)
else:
return K.dot(x, kernel)
Keras 是一个兼容 Theano 和 Tensorflow 的神经网络高级包,Keras基于backend来做运算。
Keras 可以基于两个backend,一个是 Theano,一个是 Tensorflow。如果选择Theano作为Keras的Backend, 那么Keras就用 Theano 在底层搭建所需要的神经网络;同样,如果选择 Tensorflow ,Keras 就使用 Tensorflow 在底层搭建神经网络。
接下来为Attention类,参数为Layer,这个类中定义了五个方法。
__init__方法
def __init__(self,
W_regularizer=None, b_regularizer=None,
W_constraint=None, b_constraint=None,
bias=True,
return_attention=False,
**kwargs):
self.supports_masking = True
self.return_attention = return_attention
self.init = initializers.get('glorot_uniform')
self.W_regularizer = regularizers.get(W_regularizer)
self.b_regularizer = regularizers.get(b_regularizer)
self.W_constraint = constraints.get(W_constraint)
self.b_constraint = constraints.get(b_constraint)
self.bias = bias
super(Attention, self).__init__(**kwargs)
Keras模型参数:
-
W_regularizer: 权重上的正则化
-
b_regularizer: 偏置项的正则化
-
W_constraint: 权重上约束项
-
b_constraint: 偏置上的约束项
-
bias: 是否添加偏置项
初始化方法定义了对Keras层设置初始化权重的方法。
initializers.get('glorot_uniform')
glorot_normal(seed=None)
glorot正态分布初始化方法,也称作Xavier正态分布初始化,参数由0均值,标准差为sqrt(2 / (fan_in + fan_out))的正态分布产生,其中fan_in和fan_out是权重张量的扇入扇出(即输入和输出单元数目)。
seed:随机数种子
bulid(self, input_shape)
def build(self, input_shape):
assert len(input_shape) == 3
self.W = self.add_weight((input_shape[-1],),
initializer=self.init,
name='{}_W'.format(self.name),
regularizer=self.W_regularizer,
constraint=self.W_constraint)
if self.bias:
self.b = self.add_weight((input_shape[1],),
initializer='zero',
name='{}_b'.format(self.name),
regularizer=self.b_regularizer,
constraint=self.b_constraint)
else:
self.b = None
self.built = True
参考资料:
[1] https://www.jianshu.com/p/ca41dbd91de6