赛题解析
目标
本次siRNA药物药预测主要通过深度学习模型预测化学修饰siRNA序列数据预测其对应的信使RNA的沉默效率,从而指导siRNA药物设计。
相关生物知识
1.RNAi(RNA干扰):siRNA通过与目标mRNA结合,切割目标mRNA,从而沉默特定基因,抑制特定基因的表达。
2.siRNA设计与合成:siRNA与靶向RNA互补,即为靶向RNA的反义序列,并携带RNA诱导沉默复合物(RISC),在与靶向RNA结合后,RISC发生作用降解靶向RNA,所以在设计siRNA时,需要考虑靶向RNA的序列特异性,同时不应其他基因有显著同源的序列,以保证siRNA能够特异性结合到靶向RNA上,除此之外,还应考虑GC含量,序列稳定性等问题。
评价指标
对预测结果的平均绝对误差(MAE)、预测值在一定范围内的平均绝对误差(RANGE-MAE)、预测值在一定范围内的F1指标(F1)进行权重计算:
score = (1 - mae / 100) * 0.5 + (1 - range_mae / 100) * f1 * 0.5
Baseline初次跑通
代码思路
1.依赖库的导入
使用import导入文件操作、深度学习、数据处理、模型评估等必要的工具。
2.创建基因组分词器
将输入的RNA序列分割成多个部分,以便进行后续的分析和处理
分词器构造方法:
-
初始化 (
__init__
方法):- 定义了两个参数:ngram(指定 n-gram 的大小)和stride(每次移动多少个标记以获取下一个 n-gram)。
def __init__(self, ngram=5, stride=2): self.ngram = ngram self.stride = stride
-
分词 (tokenize 方法):
- 将输入的序列转换为大写。
- 根据 ngram 的值获取满足条件的列表。
- 移除不完整的分词。
def tokenize(self, t):
t = t.upper()
if self.ngram == 1:
toks = list(t)
else:
toks = [t[i:i+self.ngram] for i in range(0, len(t), self.stride) if len(t[i:i+self.ngram]) == self.ngram]
if len(toks[-1]) < self.ngram:
toks = toks[:-1]
3.创建基因组词汇表
4.siRNA数据集转化
(1)初始化数据集
def __init__(self, df, columns, vocab, tokenizer, max_len, is_test=False):
(2)获取数据集中样本数量
def __len__(self):
return len(self.df)
(3)对样本进行分词和编码
(4)将编码后的序列填充至相同长度
padded = encoded + [0] * (self.max_len - len(encoded))
5.GRU模型
GRU是一种用于处理序列数据的递归神经网络架构,以GRU为基础构建的用于处理siRNA序列的模型包含重置门(决定先前信息的保留程度)、更新门(决定保留多少前一状态的信息)等
6.评估指标计算函数
根据赛事评价指标进行相应计算得到综合评分
7.主训练函数
bs = 64
epochs = 50
lr = 0.001
seed = 42
output_dir = "output/models"
上述为主要调整参数,包括:
(1)bs(Batch Size):每次迭代中通过模型训练的数据样本数量,常见的设为32、64、128等,大批次可使模型更稳固,提高训练速度,小批次可使模型更好地收敛。
(2)epochs(Epoch):整个训练数据集被完整训练的次数,适度增加epochs可帮助提高模型的训练表现,但过大会导致过拟合现象,使模型在新数据上的表现不佳。
(3)lr(学习率):决定模型权重更新的幅度,较大的学习率可能导致训练不稳定,而较小的学习率会导致训练过慢。
(4)seed(随机种子)初始化为随机数生成器的值,确保试验的可重复性。