SSCLMD项目复现指南

本指南提供了复现SSCLMD(Self-supervised Contrastive Learning on Attribute and Topology Graphs for Predicting Relationships Among lncRNAs, miRNAs and Diseases)项目的详细步骤。

1. 环境配置

1.1 Python环境

SSCLMD项目需要Python 3.7+版本,建议使用Anaconda或Miniconda创建虚拟环境:

# 创建虚拟环境
conda create -n ssclmd python=3.7
# 激活环境
conda activate ssclmd

1.2 安装依赖

项目依赖以下Python库:

# 安装PyTorch(版本2.0.0,CUDA 11.8)
pip install torch==2.0.0 torchvision==0.15.0 torchaudio==2.0.0 --index-url https://download.pytorch.org/whl/cu118

# 安装PyTorch Geometric
pip install torch-geometric==2.3.0

# 安装其他依赖
pip install numpy==1.21.1 scikit-learn==0.24.1 scipy matplotlib

2. 数据准备

2.1 解压数据集

项目包含两个压缩的数据集,需要先解压:

# 解压数据集
cd SSCLMD-main/data
unrar x dataset1.rar
unrar x dataset2.rar

如果没有安装unrar,可以使用操作系统的解压工具解压.rar文件。

2.2 数据集结构说明

解压后的数据集目录结构如下:

dataset1/
├── LDA.edgelist              # 已知的lncRNA-疾病关联
├── MDA.edgelist              # 已知的miRNA-疾病关联
├── LMI.edgelist              # 已知的lncRNA-miRNA相互作用
├── no_LDA.edgelist           # 未知的lncRNA-疾病对
├── no_MDA.edgelist           # 未知的miRNA-疾病对
├── no_LMI.edgelist           # 未知的lncRNA-miRNA对
├── lncRNA_sequences2.xlsx    # lncRNA序列数据
├── miRNA_sequences2.xlsx     # miRNA序列数据
├── disease_name.xlsx         # 疾病名称和DOID编号
└── dis_sem_sim.txt           # 疾病语义相似性数据

3. 数据预处理

在训练模型前,需要进行数据预处理,生成必要的特征和图结构。

3.1 生成K-mer特征和属性图

运行data_preparation.py脚本生成lncRNA/miRNA的k-mer特征并构建基于属性的KNN图:

cd SSCLMD-main/code
python data_preparation.py

此脚本会生成以下文件:

  • lnc_att_graph.txt:lncRNA的属性图
  • mi_att_graph.txt:miRNA的属性图
  • dis_att_graph.txt:疾病的属性图

3.2 计算相似性和拓扑图内边

运行calculating_similarity.py计算节点间的相似性和拓扑图的内边关系:

python calculating_similarity.py

此脚本会生成以下文件:

  • one_hot_lnc_sim_*.txt:lncRNA的GIPK相似性矩阵
  • one_hot_mi_sim_*.txt:miRNA的GIPK相似性矩阵
  • one_hot_dis_sim_*.txt:疾病的GIPK相似性矩阵

4. 模型训练与测试

4.1 配置参数

在运行模型前,可以根据需要修改parms_setting.py中的参数:

# 修改parms_setting.py中的参数
# 例如,修改任务类型为LDA、MDA或LMI
parser.add_argument('--task_type', default="LDA", choices=['LDA', 'MDA','LMI'])

# 修改训练参数
parser.add_argument('--lr', type=float, default=5e-4)
parser.add_argument('--epochs', type=int, default=80)

主要参数说明:

  • --task_type:预测任务类型,可选LDA、MDA或LMI
  • --in_file:正样本数据文件路径
  • --neg_sample:负样本数据文件路径
  • --lr:学习率
  • --epochs:训练轮数
  • --dimensions:特征维度(LDA为512,MDA和LMI为1024)
  • --loss_ratio1:自监督损失权重(LDA为1.0,MDA和LMI为0.1)

4.2 运行模型

运行main.py脚本进行模型训练和测试:

python main.py

默认情况下,将对数据集1进行lncRNA-疾病关联(LDA)预测任务的训练和测试。

4.3 修改任务类型

如需进行其他任务的预测,可以修改参数:

对于miRNA-疾病关联(MDA)预测

python main.py --task_type MDA --in_file dataset1/MDA.edgelist --neg_sample dataset1/no_MDA.edgelist --dimensions 1024 --loss_ratio1 0.1

对于lncRNA-miRNA相互作用(LMI)预测

python main.py --task_type LMI --in_file dataset1/LMI.edgelist --neg_sample dataset1/no_LMI.edgelist --dimensions 1024 --loss_ratio1 0.1

5. 评估结果

5.1 性能指标

训练和测试过程中,模型会输出以下性能指标:

  • 训练损失(loss_train)
  • 训练集上的AUROC值(auroc_train)
  • 测试集上的AUROC值(auroc_test)
  • 测试集上的AUPRC值(auprc_test)
  • 测试集上的F1分数(f1_test)

5.2 结果解释

评估结果的解释:

  • AUROC值越接近1,表示模型对正负样本的区分能力越强
  • AUPRC值越高,表示模型在各个召回率水平上的精确率越高
  • F1分数是精确率和召回率的调和平均值,越高表示模型的综合性能越好

6. 常见问题与解决方案

6.1 内存不足

如果遇到内存不足的问题,可以尝试以下解决方案:

  • 减小批次大小(batch size)
  • 减小特征维度(dimensions)
  • 如果使用GPU,尝试使用CPU版本的PyTorch

6.2 CUDA错误

如果遇到CUDA相关错误,可以尝试:

  • 检查CUDA版本与PyTorch版本是否匹配
  • --no-cuda设置为True,使用CPU运行
  • 清理GPU内存:torch.cuda.empty_cache()

6.3 数据加载错误

如果遇到数据加载错误,检查:

  • 文件路径是否正确
  • 数据集是否正确解压
  • 数据格式是否符合要求

7. 模型调优建议

7.1 超参数调优

以下超参数对模型性能影响较大,可以进行调优:

  • 学习率(lr):建议在[1e-4, 1e-3]范围内调整
  • 隐藏层维度(hidden1, hidden2):建议根据任务复杂度进行调整
  • 自监督损失权重(loss_ratio1):不同任务的最佳值不同

7.2 模型修改建议

如需进一步提升模型性能,可以考虑:

  • 尝试不同的图神经网络层(如GAT、GraphSAGE)
  • 修改注意力机制的实现
  • 调整解码器结构
  • 增加正则化方法,如Dropout和权重衰减

8. 结果可视化

可以使用matplotlib库对结果进行可视化,例如绘制ROC曲线和PR曲线:

import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, precision_recall_curve

# 绘制ROC曲线
fpr, tpr, _ = roc_curve(y_true, y_pred)
plt.figure()
plt.plot(fpr, tpr, label=f'AUROC = {roc_auc:.4f}')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend()
plt.savefig('roc_curve.png')

# 绘制PR曲线
precision, recall, _ = precision_recall_curve(y_true, y_pred)
plt.figure()
plt.plot(recall, precision, label=f'AUPRC = {prc_auc:.4f}')
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision-Recall Curve')
plt.legend()
plt.savefig('pr_curve.png')

9. 多数据集实验

项目提供了两个数据集,建议在两个数据集上都进行实验,以验证模型的泛化能力。

对于数据集2,只需修改相应的文件路径:

python main.py --in_file dataset2/LDA.edgelist --neg_sample dataset2/no_LDA.edgelist

10. 总结

按照本指南的步骤,您应该能够成功复现SSCLMD项目,并在lncRNA-疾病关联、miRNA-疾病关联和lncRNA-miRNA相互作用预测任务上取得良好的性能。如有任何问题,请参考原论文或查看项目代码中的注释。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐