PGL图学习之基于GNN模型新冠疫苗任务[系列九]

简介: 13.PGL图学习之基于GNN模型新冠疫苗任务[系列九]

PGL图学习之基于GNN模型新冠疫苗任务[系列九]

项目链接:https://aistudio.baidu.com/aistudio/projectdetail/5123296?contributionType=1

# 加载一些需要用到的模块,设置随机数
import json
import random
import numpy as np
import pandas as pd

import matplotlib.pyplot as plt
import networkx as nx

from utils.config import prepare_config, make_dir
from utils.logger import prepare_logger, log_to_file
from data_parser import GraphParser

seed = 123
np.random.seed(seed)
random.seed(seed)

数据EDA

# https://www.kaggle.com/c/stanford-covid-vaccine/data
# 加载训练用的数据
df = pd.read_json('../data/data179441/train.json', lines=True)
# 查看一下数据集的内容
sample = df.loc[0]
print(sample)

index                                                                400
id                                                          id_2a7a4496f
sequence               GGAAAGCCCGCGGCGCCGGGCGCCGCGGCCGCCCAGGCCGCCCGGC...
structure              .....(((...)))((((((((((((((((((((.((((....)))...
predicted_loop_type    EEEEESSSHHHSSSSSSSSSSSSSSSSSSSSSSSISSSSHHHHSSS...
signal_to_noise                                                        0
SN_filter                                                              0
seq_length                                                           107
seq_scored                                                            68
reactivity_error       [146151.225, 146151.225, 146151.225, 146151.22...
deg_error_Mg_pH10      [104235.1742, 104235.1742, 104235.1742, 104235...
deg_error_pH10         [222620.9531, 222620.9531, 222620.9531, 222620...
deg_error_Mg_50C       [171525.3217, 171525.3217, 171525.3217, 171525...
deg_error_50C          [191738.0886, 191738.0886, 191738.0886, 191738...
reactivity             [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...
deg_Mg_pH10            [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...
deg_pH10               [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...
deg_Mg_50C             [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...
deg_50C                [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...
Name: 0, dtype: object

例如 deg_50C、deg_Mg_50C 这样的值全为0的行,就是我们需要预测的。

structure一行,数据中的括号是为了构成边用的。

本案例要预测RNA序列不同位置的降解速率,训练数据中提供了多个ground值,标签包括以下几项:reactivity, deg_Mg_pH10, and deg_Mg_50

reactivity - (1x68 vector 训练集,1x91测试集) 一个浮点数数组,与seq_scores有相同的长度,是前68个碱基的反应活性值,按顺序表示,用于确定RNA样本可能的二级结构。

deg_Mg_pH10 - (训练集 1x68向量,1x91测试集)一个浮点数数组,与seq_scores有相同的长度,是前68个碱基的反应活性值,按顺序表示,用于确定在高pH (pH 10)下的降解可能性。

deg_Mg_50 - (训练集 1x68向量,1x91测试集)一个浮点数数组,与seq_scores有相同的长度,是前68个碱基的反应活性值,按顺序表示,用于确定在高温(50摄氏度)下的降解可能性。

# 利用GraphParser构造图结构的数据
args = prepare_config("./config.yaml", isCreate=False, isSave=False)
parser = GraphParser(args) # GraphParser类来自data_parser.py
gdata = parser.parse(sample) # GraphParser里最主要的函数就是parse(self, sample)
{'nfeat': array([[0., 0., 0., ..., 0., 0., 0.],
        [0., 0., 0., ..., 0., 0., 0.],
        [0., 1., 0., ..., 0., 0., 0.],
        ...,
        [1., 0., 0., ..., 0., 0., 0.],
        [1., 0., 0., ..., 0., 0., 0.],
        [1., 0., 0., ..., 0., 0., 0.]], dtype=float32),
 'edges': array([[  0,   1],
        [  1,   0],
        [  1,   2],
        ...,
        [142, 105],
        [106, 142],
        [142, 106]]),
 'efeat': array([[ 0.,  0.,  0.,  1.,  1.],
        [ 0.,  0.,  0., -1.,  1.],
        [ 0.,  0.,  0.,  1.,  1.],
        ...,
        [ 0.,  1.,  0.,  0.,  0.],
        [ 0.,  1.,  0.,  0.,  0.],
        [ 0.,  1.,  0.,  0.,  0.]], dtype=float32),
 'labels': array([[ 0.    ,  0.    ,  0.    ],
        [ 0.    ,  0.    ,  0.    ],
        ...,
        [ 0.    ,  0.9213,  0.    ],
        [ 6.8894,  3.5097,  5.7754],
        [ 0.    ,  1.8426,  6.0642],
          ...,        
        [ 0.    ,  0.    ,  0.    ],
        [ 0.    ,  0.    ,  0.    ]], dtype=float32),
 'mask': array([[ True],
        [ True],
     ......
       [False]])}

nfeat —— 节点特征

edges —— 边

efeat —— 边特征

labels —— 节点标签有三种,所以这可以看成是一个多分类任务

图数据可视化

# 图数据可视化
fig = plt.figure(figsize=(24, 12))
nx_G = nx.Graph()
nx_G.add_nodes_from([i for i in range(len(gdata['nfeat']))])

nx_G.add_edges_from(gdata['edges'])
node_color = ['g' for _ in range(sample['seq_length'])] + \
['y' for _ in range(len(gdata['nfeat']) - sample['seq_length'])]
options = {
    "node_color": node_color,
}
pos = nx.spring_layout(nx_G, iterations=400, k=0.2)
nx.draw(nx_G, pos, **options)

plt.show()

Snipaste_2022-11-25_20-53-23.jpg

模型训练&预测

# 我们在 layer.py 里定义了一个新的 gnn 模型(my_gnn),消息传递的过程中加入了边的特征(edge_feat)
# 然后修改 model.py 里的 GNNModel
# 使用修改后的模型,运行 main.py。为节省时间,设置 epochs = 100

!python main.py --config config.yaml

结果返回的是 MCRMSE 和 loss

{'MCRMSE': 0.5496759, 'loss': 0.3025484172316889}

[DEBUG] 2022-11-25 17:50:42,468 [  trainer.py:   66]:    {'MCRMSE': 0.5496759, 'loss': 0.3025484172316889}
[DEBUG] 2022-11-25 17:50:42,468 [  trainer.py:   73]:    write to tensorboard ../checkpoints/covid19/eval_history/eval
[DEBUG] 2022-11-25 17:50:42,469 [  trainer.py:   73]:    write to tensorboard ../checkpoints/covid19/eval_history/eval
[INFO] 2022-11-25 17:50:42,469 [  trainer.py:   76]:    [Eval:eval]:MCRMSE:0.5496758818626404    loss:0.3025484172316889
[INFO] 2022-11-25 17:50:42,602 [monitored_executor.py:  606]:    ********** Stop Loop ************
[DEBUG] 2022-11-25 17:50:42,607 [monitored_executor.py:  199]:    saving step 12500 to ../checkpoints/covid19/model_12500
!python main.py --mode infer
相关文章
|
4月前
|
机器学习/深度学习 人工智能 芯片
牛津光计算论文登Nature正刊,分析帕金森患者步态准确率达92.2%
【9月更文挑战第23天】牛津大学研究人员在《自然》杂志上发表了一篇关于光计算的重要论文,展示了一种利用光的局部相干性增强光子计算并行性的新方法。该技术通过部分相干光与重建方法结合,提高了处理效率和并行性,同时降低了对相移器和微环谐振器的依赖,展示了在光子张量核心中的应用潜力,并在实际计算任务中实现了高准确率。这项突破有望推动光子处理器在人工智能领域的广泛应用。
51 5
|
5月前
|
机器学习/深度学习 自然语言处理
准确率达60.8%,浙大基于Transformer的化学逆合成预测模型,登Nature子刊
【8月更文挑战第29天】浙江大学团队在《Nature》子刊上发表的论文介绍了一款名为EditRetro的基于Transformer架构的化学逆合成预测模型,其准确率高达60.8%,为化学合成领域带来了革命性的变化。此模型无需依赖传统化学反应模板,具备更强的泛化能力和多样化合成路线生成能力,在药物研发和材料科学领域展现出巨大潜力,尽管仍存在一定的错误率和计算资源需求高等挑战。论文详情见:https://www.nature.com/articles/s41467-024-50617-1。
75 3
|
7月前
|
数据采集 人工智能 算法
ICLR 2024 Spotlight:单模型斩获蛋白质突变预测榜一!西湖大学提出基于结构词表方法
【6月更文挑战第1天】西湖大学团队研发的蛋白质语言模型SaProt,在结构词表方法下,于蛋白质突变预测任务中荣登榜首。SaProt利用Foldseek编码的结构标记理解蛋白质行为,超越现有基准模型,在10个下游任务中表现出色。尽管训练资源需求大,且有特定任务优化空间,但该模型为生物医学研究带来新工具,促进科学理解与合作。论文链接:[https://www.biorxiv.org/content/10.1101/2023.10.01.560349v4](https://www.biorxiv.org/content/10.1101/2023.10.01.560349v4)
225 7
|
8月前
|
机器学习/深度学习 算法 数据挖掘
JCR一区5.4分|经典~非肿瘤机器学习筛选生物标志物+qPCR
本文介绍了一项使用机器学习算法识别间变性甲状腺癌(ATC)新型生物标志物和免疫浸润特征的研究。该研究发表在2023年9月的《Journal of Endocrinological Investigation》上,IF为5.4。通过对GEO数据库中的RNA测序数据进行分析,研究人员鉴定出425个差异表达基因,并利用LASSO和SVM-RFE算法确定了4个ATC特征基因(ADM、PXDN、MMP1和TFF3)。这些基因在诊断、药物敏感性和免疫微环境中具有潜在价值,可能成为ATC诊断和治疗的生物标志物。
154 0
|
8月前
|
机器学习/深度学习 人工智能 Java
【AI for Science】量子化学:分子属性预测-第2次打卡-特征工程baseline上分
【AI for Science】量子化学:分子属性预测-第2次打卡-特征工程baseline上分
|
机器学习/深度学习 自然语言处理 算法
KDD 2023 | 第四范式开发用于分子性质预测的生成式3D预训练模型
KDD 2023 | 第四范式开发用于分子性质预测的生成式3D预训练模型
140 0
|
搜索推荐
ICDE 2023 | DCMT:基于因果纠偏的直接全空间多任务转化率预测模型
ICDE 2023 | DCMT:基于因果纠偏的直接全空间多任务转化率预测模型
1201 0
ICDE 2023 | DCMT:基于因果纠偏的直接全空间多任务转化率预测模型
|
机器学习/深度学习 人工智能 数据库
结构生物学没失业!深度评估AlphaFold 2:「蛋白质功能预测」水平不足|NeurIPS 2022
结构生物学没失业!深度评估AlphaFold 2:「蛋白质功能预测」水平不足|NeurIPS 2022
207 0
|
机器学习/深度学习 存储 缓存
PGL图学习之项目实践(UniMP算法实现论文节点分类、新冠疫苗项目实战,助力疫情)[系列九]
本项目讲了论文节点分类任务和新冠疫苗任务,并在论文节点分类任务中对代码进行详细讲解。PGL八九系列的项目耦合性比较大,也花了挺久时间研究希望对大家有帮助。
|
机器学习/深度学习 算法 知识图谱
【哥伦比亚大学博士论文】深度概率图建模,147页pdf阐述深度学习与主题模型结合
现实中,概率图建模(PGM)往往缺乏灵活性,而深度学习虽然强大,但缺乏PGM的可解释性和校准性。本文研究了深度概率图建模(DPGM)。DPGM通过利用DL使PGM更加灵活。
368 0
【哥伦比亚大学博士论文】深度概率图建模,147页pdf阐述深度学习与主题模型结合

热门文章

最新文章