DTINet与其python实现(一)

DTINet基于'guilt by association'原理预测药物与蛋白的相互作用。通过计算相似度矩阵,使用重启随机游走算法和SVD进行降维学习。本文详细介绍了杰卡德相似系数、重启随机游走算法以及SVD在DTINet中的应用。
摘要由CSDN通过智能技术生成


近日,因为一些奇妙的原因,拜读了《 A networkIntegration Approach for Drug-Target interaction Prediction and ComputationalDrug Repositioning from Heterogeneous Information 这篇文章。花了将近一周的时间终于算是大概弄懂了其主要算法的原理,恰逢正在学习python,便着手将提供的matlab代码改成了python,便想阐述一下我对这篇文章的理解与其python的实现与在这个过程中遇到的问题,作为自己学习的记录吧。

这篇文章的主要目的在于通过各种与蛋白和药物相关的数据,对药物靶点进行预测,包括了药物与药物的作用,药物与疾病的作用,药物与side-effect的作用,蛋白与蛋白的作用,蛋白与疾病的作用,药物与蛋白本身的相似性以及药物与蛋白的相互作用。因为我是先拿到这个题目之后才了解到这篇文章,在刚拿到这个题目的时候,我的想法是直接用蛋白与药物本身的相似性通过interaction直接学习不就好了吗,为什么还要给有关疾病、side-effect的数据呢。看完文章后才了解到他是通过将药物、蛋白与其它相关数据转换成药物与蛋白本身的相似性,从而使得最后的相似性矩阵可以包含更多的信息,从而提高预测的准确率。

DTINet实现所基于的假设为“guilt byassociation”,即两种药物或两种蛋白,其相似度越高,则其更有可能具有类似的作用,换一句话说,两个节点的拓扑结构越相似,其功能也越相似。通过将原始数据进行处理加工,最终转换成药物与蛋白的拓扑结构,然后通过已知的药物与蛋白的相互作用,便可学习得到药物与蛋白相互作用的模型,从而可以预测药物于蛋白之间新的相互作用。DTINet主要的步骤如下:

  

1.compute similarity

第一步需要将原始数据转化为similarity matrices,这里用到的是杰卡德相似指数(Jaccardsimilarity coefficient)。

杰卡德相似系数(Jaccard similarity coefficient),也称杰卡德指数(JaccardIndex),是用来衡量两个集合相似度的一种指标。而杰卡德距离(Jaccard distance)是用来衡量两个集合差异性的一种指标,它是杰卡德相似系数补集,被定义为1减去Jaccard相似系数。

Jaccard相似指数被定义为两个集合交集的元素个数除以并集的元素个数:

Jaccard距离即为:

Jaccard距离只适用于0-1矩阵,同时,其与汉明距离(Hamming distance)的区别为,Hamming距离关注0-0匹配,而Jaccard距离在计算时去除了0-0匹配,这也是为什么算法使用Jaccard距离而不是Hamming距离,例如两种药物都无法产生某种side-effect,但这并不一定代表其存在相似的信息。

在这里运用时是计算矩阵中每一行向量的Jaccard相似度,并转化为相似度矩阵,类似于相关系数矩阵,是一个对称矩阵。其python代码实现如下:

import pandas as pd
import numpy as np
from scipy.spatial.distance import pdist
from scipy.spatial.distance import squareform
import utils

Nets = ['mat_drug_drug', 'mat_drug_disease', 'mat_drug_se','mat_protein_protein', 'mat_protein_disease']

for net in Nets:
    inputID='./data/'+net+'.txt'
    M=pd.read_table(inputID,sep=' ', header=None)
    # jaccard similarity
    Sim=1-pdist(M,'jaccard')
    Sim=squareform(Sim)
    Sim=Sim+np.eye(len(Sim))
    Sim=np.nan_to_num(Sim)
    
    #output csv file
    outputID='./data/Sim_'+net+'.csv'
    utils.outputCSVfile(outputID,Sim)
    
#write chemical similarity to networks
M=pd.read_table('./data/Similarity_Matrix_Drugs.txt',sep='    ',header=None)
M=M.as_matrix(columns=None)
utils.outputCSVfile('./data/Sim_mat_drugs.csv',M)
#write sequence similarity to networks
M=pd.read_table('./data/Similarity_Matrix_Proteins.txt',sep=' ',header=None)
M=M.as_matrix(columns=None)
M=M/100
utils.outputCSVfile('./data/Sim_mat_proteins.csv',M)
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值