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()

代码解释:

  1. 导入库和定义函数

    • 导入了必要的库,包括自定义的load_data模块、用于交叉验证的KFold、NumPy库、随机数生成器random、自定义的模型模块Model2,以及karateclub中的一些图嵌入算法。
    • 定义了GraphPepPI()函数,主要用于处理肽-蛋白质相互作用数据并生成特征嵌入。
  2. 加载和预处理数据

    • 从指定路径加载肽和蛋白质的分子数据。
    • 加载肽-蛋白质的相互作用对和非相互作用对,并打乱顺序以准备后续的模型训练。
  3. 特征提取

    • 加载肽和蛋白质的序列特征,并计算肽之间和蛋白质之间的相似度矩阵。
    • 使用自定义的模型对数据进行特征表示,生成训练数据。
  4. 生成嵌入和标签

    • 生成用于模型评估的测试数据集,包含特征嵌入和相应的标签。
    • 将生成的嵌入和标签保存为.npy文件,方便后续的使用和分析。
  5. 执行函数

    • 使用一个简单的循环调用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()  

代码解释:

  1. 导入库和设置参数

    • 导入所需的Python库,包括Numpy、UMAP、scikit-learn用于数据处理和降维,matplotlib用于可视化。
    • 配置全局图像参数,如字体和负号显示。
  2. 加载和预处理数据

    • 加载存储在NodeSketch_emb.npy文件中的节点嵌入数据,并使用标准化和PCA进行降维。
    • 加载对应的标签数据。
  3. UMAP降维

    • 使用UMAP将数据进一步降维到二维,以便可视化。
  4. 数据可视化

    • 创建图形并设置大小,选择两种颜色表示不同类别。
    • 绘制散点图,分别为两个类别的数据点进行着色。
    • 设置图形的边框宽度并移除图例边框。
    • 添加标题,并将生成的图像保存为PNG格式文件。
  5. 显示图像

    • 显示生成的图形。

这段代码主要用于将高维数据降维并可视化,以便于观察和分析不同类别的数据分布。

posted @ 2024-08-12 23:41  wuhaoliu  阅读(15)  评论(0)    收藏  举报  来源