湖大2022秋数据挖掘期末作业

注意一下:要求用图神经网络,但是我没写过图神经网络,用的是普通的神经网络,所有的层都是全连接层。

实验内容  

基于知识图谱(Knowledge Graph)的基因关系预测

知识图谱主要目标是用来描述真实世界中存在的各种实体和概念,以及他们之间的关系,因此可以认为是一种语义网络。从发展的过程来看,知识图谱是在NLP的基础上发展而来的。知识图谱和自然语言处理NLP有着紧密的联系,都属于比较顶级的AI技术。知识图谱可以用来更高的查询复杂的关联信息,从语义层面理解用户意图,改进搜索质量。

1. 了解知识图谱的目的,内容以及构建流程

2. 对给定数据集进行图神经网络的特征学习及特征表征

3. 掌握知识图谱和图神经网络的关系预测方法,编程实现合成致死数据集的关系预测。

4. 针对数据集实现知识图谱的关系预测方法性能分析及比较。

对给定数据集构建神经网络完成预测,并进行性能评估:

数据集分析:

 

共4个文件,其中gene_list中显示了所有的基因编号,共计6375个基因

湖大2022秋数据挖掘期末作业_第1张图片

 

还有两个文件展示了基因的相似度,分别是PPI相似度和GO相似度。它们各占6375行和6375列,这与基因的数量是一致的,因此可以推测它们和每个基因是一一对应的,可以用来表征基因的特征。

以下是GO相似度的部分数据:

湖大2022秋数据挖掘期末作业_第2张图片

 

可以发现这是一个对称阵,因为相似程度符合对称性,即如果A与B的相似性为x,那么B与A的相似性也为x。

湖大2022秋数据挖掘期末作业_第3张图片

 

GO相似性的全貌,一个6375*6375的对称矩阵,对角线元素为0

湖大2022秋数据挖掘期末作业_第4张图片湖大2022秋数据挖掘期末作业_第5张图片

 

 

上图是PPI相似度,与GO相似度不同的是,PPI矩阵的绝大部分位置取值为0。

 湖大2022秋数据挖掘期末作业_第6张图片

最后一个文件如上图所示,表示了两个基因相互作用对癌细胞的致死性,但是这只给出了部分基因之间的致死性,共计19667个,而全部基因的组合有6375*6374/2=20317125个,已知的基因组合仅占全部组合的不到千分之一。我们的目的就是从已知的基因组合推测出未的知基因组合的致死性,从而大大减少人力物力。

我设计了如下神经网络来解决这个问题:

湖大2022秋数据挖掘期末作业_第7张图片

 

神经网络的全局图

下面我逐步讲解其组成。

该神经网络包括6个输入层,如图所示的input_1到input_6共计6层。

其中input_1和input_2输入的是基因1和基因2的GO特征,是一个长度为6375的向量。随后进入4个全连接层进行特征提取,最后输出长度为128的向量,如下图所示:

湖大2022秋数据挖掘期末作业_第8张图片

input_3和input_4与上图类似,它输入的是基因3和基因4的PPI特征。除了输入值的含义不同,其网络结构与上图完全一致。

 湖大2022秋数据挖掘期末作业_第9张图片

 

由于input_1和input_2最终产生的128维特征向量反映了两个基因之间的联系,且两者的网络结构是对称的,输入向量的含义也是对称的,所以可以将两者的结果相乘,使得基因1和基因2的内在联系能够被网络所识别。

 

Input3_和input_4进行完全相同的操作。同时为了进一步提取特征,我们将相乘后的结果送入3个全连接层,最后得到一个数值。如下图所示:

湖大2022秋数据挖掘期末作业_第10张图片

到目前为止,基因1、基因2与其他全部基因的GO相似度、PPI相似度中所包含的信息就被提取出来了。为了进一步提取基因1和基因2之间的联系,我将基因1与基因2的GO相似度和PPI相似度作为一个数值单独输入模型,即输入给模型的输入层input_5和input_6,至此为止,模型所有的输入层就都被用上了。

我将前面提取到的两个特征和input_5与input_6做连接,形成一个长度为4的向量,最后通过全连接层的拟合,得到一个长度为1的向量,即最终预测的致死率:

湖大2022秋数据挖掘期末作业_第11张图片

构建好模型后,划分数据集,设置好超参数,就可以训练模型了。

模型除了最后一层的激活函数为 “sigmoid”外,其余层的激活函数都为”relu”。最后一层设置为sigmoid是合理的,因为我们致死率的预测值位于0~1之间,而sigmoid的值域也落在(0,1)

湖大2022秋数据挖掘期末作业_第12张图片

Sigmoid的图像,其值域为(0,1)

我将数据集划分为80%的训练集和20%的测试集,用训练集训练模型,并用测试集来评估模型的性能。使用mse和mae指标来评估模型的性能,选择mse作为损失函数,使用adam优化器进行梯度下降算法的优化。

本人采用的CPU是英特尔的12700,采用的显卡是英伟达的3090Ti,训练时间非常短,一个epoch在10ms左右,仅使用CPU训练所花费的时间也是可接受的,CPU完成一个epoch预计在1s内,完成全部训练可能需要耗费数分钟。为了节约计算资源,采用早停法进行训练,最大训练次数设置为50次,实际上在训练了30-40次左右就会停下来。

下图是训练过程中的MAE变化趋势:

湖大2022秋数据挖掘期末作业_第13张图片

 

以下是训练过程中MSE,即损失函数的变化趋势。

湖大2022秋数据挖掘期末作业_第14张图片

 

虽然有轻微的过拟合,但训练的效果非常好,预测致死率的平均误差在4%以内。

为了更直观的看到预测值和真实的差距,以下是部分真实值对应的预测值,其中第一行是真实的致死率,第二行是预测的致死率:

 

 

 

可以直观的看到,绝大部分预测值和真实值是几乎一致的。说明我的模型取得了成功的预测效果。

你可能感兴趣的:(人工智能,算法,python)