余弦相似度及其生物信息学应用

时间:2022-07-22
本文章向大家介绍余弦相似度及其生物信息学应用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

众所周知,在R里面使用cor函数可以计算两个向量的相似情况,有两个参数尤为需要注意:

其中method参数是:One of "pearson" (default), "kendall", or "spearman": can be abbreviated.
 
然后use参数是:This must be (an abbreviation of) one of the strings "everything", "all.obs", "complete.obs", "na.or.complete", or "pairwise.complete.obs".

本来呢,pearson,kendall以及spearman这3个相关性公式就让人头疼了,但是最近我在教程:比较不同的肿瘤somatic突变的signature 发现两个不同算法的signature的相似性并不是和文章完全一致,原因是作者使用了一个cosine similarity(余弦相似度)的概念

cosine similarity(余弦相似度)如何计算

简单搜索了一下它的介绍:

  • 余弦值的范围在[-1,1]之间,值越趋近于1,代表两个向量的方向越接近;越趋近于-1,他们的方向越相反;接近于0,表示两个向量近乎于正交。
  • 最常见的应用就是计算文本相似度。将两个文本根据他们词,建立两个向量,计算这两个向量的余弦值,就可以知道两个文本在统计学方法中他们的相似度情况。实践证明,这是一个非常有效的方法。

第一次搜索它在R里面的用法,发现了tcR包里面的cosine.similarity函数,就简单试用了一下。但是计算得到的结果很诡异,并不是范围在[-1,1]之间。

再次尝试搜索cosine similarity(余弦相似度),发现在 The repertoire of mutational signatures in human cancer 文章里面也提到了:

COSMIC数据库的signature需要更新

为何使用cosine similarity(余弦相似度)而不是简单的相关性系数呢?

前面我们搜索了解到,cosine similarity(余弦相似度)最常见的应用就是计算文本相似度,那么,为什么生物信息学领域里面的cosmic的signature的相似性要采用cosine similarity(余弦相似度)而不是常见的简单的相关性系数呢?

比如,同样的是对cosmic内置的30个signature互相计算相关性,如下:

# https://cancer.sanger.ac.uk/cancergenome/assets/signatures_probabilities.txt
cosmic=read.table('https://cancer.sanger.ac.uk/cancergenome/assets/signatures_probabilities.txt',
                  header = T,sep = 't')[,1:33]

head(cosmic[,1:4])
M=cor(cosmic[,4:33])
pheatmap::pheatmap(M)

出图如下:

而计算cosine similarity(余弦相似度)代码如下;

# 具体数学公式参考:https://www.jianshu.com/p/a894ebba4a1a
cos=function(x,y){
  sum(x * y) / (sqrt(sum(x ^ 2)) * sqrt(sum(y ^ 2)));
}
M2=apply(cosmic[,4:33], 2, function(x){
  apply(cosmic[,4:33], 2, function(y){
    cos(x,y)
  }) 
})  
rownames(M2)=rownames(M)
pheatmap::pheatmap(M2)

出图如下:

虽然我做了探索,但是我其实并不明白为什么cosmic的signature的相似性要采用cosine similarity(余弦相似度)而不是常见的简单的相关性系数。