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



所有评论(0)