GRL.py和UMAP.py代码解释
1. GRL.py
import load_data
from sklearn.model_selection import KFold
import numpy as np
import random
import Model2 as Model
from karateclub import BoostNE, NodeSketch, GraRep, NetMF, Node2Vec, DeepWalk, RandNE, GLEE, Walklets, Role2Vec
# 定义函数GraphPepPI,用于处理肽-蛋白质相互作用的数据
def GraphPepPI():
inter_type = 'PepPI' # 定义相互作用类型为肽-蛋白质相互作用 (PepPI)
file_path = './Dataset/' + str(inter_type) # 定义数据集的文件路径
mole_x = load_data.load_moles(file_path+'/peptides.txt') # 加载肽分子的数据信息
mole_y = load_data.load_moles(file_path+'/proteins.txt') # 加载蛋白质分子的数据信息
# 加载相互作用和非相互作用的配对信息
inter_file = file_path+'/peptide-protein interacting pairs.txt'
non_inter_file = file_path+'/peptide-protein non-interacting pairs.txt'
pairs = load_data.load_pairs(inter_file, non_inter_file, mole_x, mole_y) # 加载并组合相互作用对和非相互作用对
random.shuffle(pairs) # 随机打乱配对数据
pairs = np.array(pairs) # 将配对数据转换为NumPy数组
# 加载肽和蛋白质的序列特征
x_seq_file = file_path + '/lncRNA sequences.fasta'
x_feat_dict = load_data.load_psednc_feat(x_seq_file, mole_x, 2, 0.05) # 加载并计算肽的伪二核苷酸特征
x_ss_mat = load_data.cal_ss_sim(x_feat_dict) # 计算肽之间的序列相似度矩阵
y_seq_file = file_path + '/protein sequences.fasta'
y_feat_dict = load_data.load_pseaac_feat(y_seq_file, mole_y) # 加载并计算蛋白质的伪氨基酸组成特征
y_ss_mat = load_data.cal_ss_sim(y_feat_dict) # 计算蛋白质之间的序列相似度矩阵
n_fold = 5 # 定义交叉验证的折数为5
embed = [] # 初始化嵌入列表,用于存储最终的特征表示
label = [] # 初始化标签列表,用于存储最终的标签
# 计算肽和蛋白质的相似度矩阵
x_sim_mat = load_data.cal_x_sim(x_ss_mat, pairs, len(mole_x), len(mole_y), 0.8) # 计算肽的相似度矩阵
y_sim_mat = load_data.cal_y_sim(y_ss_mat, pairs, len(mole_x), len(mole_y), 0.6) # 计算蛋白质的相似度矩阵
print(x_sim_mat.shape, y_sim_mat.shape) # 输出相似度矩阵的形状
model = Model.AHGRL_intra() # 初始化模型,使用AHGRL_intra模型
train_data = load_data.dataset(x_ss_mat, y_sim_mat, pairs, x_feat_dict, y_feat_dict) # 生成训练数据集
scores, x_feat, y_feat = Model.feature_representation(model, len(mole_x), len(mole_y), train_data) # 使用模型进行特征表示
# 生成测试数据集
data_test, y_test = load_data.final_dataset(x_feat, y_feat, pairs)
embed += data_test # 将测试数据的嵌入添加到embed列表
label += y_test # 将测试数据的标签添加到label列表
# 保存嵌入和标签为.npy文件
np.save('./Results/MLI_emb.npy', np.array(embed)) # 保存嵌入
np.save('./Results/MLI_label.npy', np.array(label)) # 保存标签
# 循环调用GraphPepPI函数,这里只运行一次
for i in range(1):
GraphPepPI()
代码解释:
-
导入库和定义函数:
- 导入了必要的库,包括自定义的
load_data模块、用于交叉验证的KFold、NumPy库、随机数生成器random、自定义的模型模块Model2,以及karateclub中的一些图嵌入算法。 - 定义了
GraphPepPI()函数,主要用于处理肽-蛋白质相互作用数据并生成特征嵌入。
- 导入了必要的库,包括自定义的
-
加载和预处理数据:
- 从指定路径加载肽和蛋白质的分子数据。
- 加载肽-蛋白质的相互作用对和非相互作用对,并打乱顺序以准备后续的模型训练。
-
特征提取:
- 加载肽和蛋白质的序列特征,并计算肽之间和蛋白质之间的相似度矩阵。
- 使用自定义的模型对数据进行特征表示,生成训练数据。
-
生成嵌入和标签:
- 生成用于模型评估的测试数据集,包含特征嵌入和相应的标签。
- 将生成的嵌入和标签保存为
.npy文件,方便后续的使用和分析。
-
执行函数:
- 使用一个简单的循环调用
GraphPepPI()函数,实际上只执行一次。这可能是为了方便扩展,若有需要可以更改循环次数以进行更多实验。
- 使用一个简单的循环调用
这段代码的主要目的是处理和分析肽-蛋白质相互作用的数据,提取特征并生成相应的嵌入表示,以便后续的机器学习任务或分析。
2. UMAP.py
import numpy as np
import umap
from sklearn.datasets import make_blobs
from sklearn.preprocessing import StandardScaler, MinMaxScaler
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
# 设置图像全局参数,包括字体和负号的处理
config = {
"font.family": 'serif', # 设置字体系列为serif
"font.size": 20, # 设置字体大小为20
"mathtext.fontset": 'stix', # 设置数学字体集为stix
"font.serif": ['Times New Roman'], # 设置serif字体为Times New Roman
'axes.unicode_minus': False # 处理负号显示
}
plt.rcParams.update(config) # 更新matplotlib的全局配置
plt.rcParams.update({'font.size': 15}) # 更新字体大小为15
# 生成模拟数据(这里的代码未使用)
n_samples = 300
random_state = 42
# X, y = make_blobs(n_samples=n_samples, centers=2, random_state=random_state, n_features=2)
# 上述代码生成二维数据集,但这里被注释掉,实际使用的是加载的高维数据
# 加载数据并进行预处理
X = np.load('./Results/NodeSketch_emb.npy') # 加载节点嵌入数据
X = StandardScaler().fit_transform(X) # 对数据进行标准化处理
X = PCA().fit_transform(X) # 使用PCA对数据进行降维
print(X.shape) # 输出降维后的数据形状
y = np.load('./Results/NodeSketch_label.npy') # 加载数据标签
# 使用UMAP对数据进行进一步降维
uMAP = umap.UMAP(n_neighbors=5, min_dist=0.5, spread=10, random_state=random_state)
X_umap = uMAP.fit_transform(X) # 使用UMAP将数据降到二维
# 可视化
plt.figure(figsize=(5, 4.5)) # 设置图像尺寸
colors = ['#5467B1', '#C74E91'] # 定义两个类别的颜色
for i in range(2):
plt.scatter(X_umap[y == i, 0], X_umap[y == i, 1], c=colors[i], edgecolors='none', s=3)
# 绘制每个类别的点,c参数设置颜色,edgecolors='none'表示不绘制边框,s=3表示点的大小
# 去除坐标轴
ax = plt.gca() # 获取当前轴对象
bwith = 1 # 设置边框宽度为1
ax.spines['bottom'].set_linewidth(bwith) # 设置下边框的宽度
ax.spines['left'].set_linewidth(bwith) # 设置左边框的宽度
ax.spines['top'].set_linewidth(bwith) # 设置上边框的宽度
ax.spines['right'].set_linewidth(bwith) # 设置右边框的宽度
plt.legend(frameon=False) # 如果有图例,不显示图例的边框
# 添加标题
plt.title('NodeSketch')
# 保存图像,格式为png,分辨率为1200dpi
plt.savefig("./UMAP_NodeSketch.png", dpi=1200, format="png")
# 显示图形
plt.show()
代码解释:
-
导入库和设置参数:
- 导入所需的Python库,包括Numpy、UMAP、scikit-learn用于数据处理和降维,matplotlib用于可视化。
- 配置全局图像参数,如字体和负号显示。
-
加载和预处理数据:
- 加载存储在
NodeSketch_emb.npy文件中的节点嵌入数据,并使用标准化和PCA进行降维。 - 加载对应的标签数据。
- 加载存储在
-
UMAP降维:
- 使用UMAP将数据进一步降维到二维,以便可视化。
-
数据可视化:
- 创建图形并设置大小,选择两种颜色表示不同类别。
- 绘制散点图,分别为两个类别的数据点进行着色。
- 设置图形的边框宽度并移除图例边框。
- 添加标题,并将生成的图像保存为PNG格式文件。
-
显示图像:
- 显示生成的图形。
这段代码主要用于将高维数据降维并可视化,以便于观察和分析不同类别的数据分布。

浙公网安备 33010602011771号