余弦相似度在生物研究中的应用

2022-03-10  本文已影响0人  斗战胜佛oh

众所周知,在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(余弦相似度)如何计算

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

为何使用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)
Cosine similarity

虽然做了探索,但是其实并不明白为什么cosmic的signature的相似性要采用cosine similarity(余弦相似度)而不是常见的简单的相关性系数。
不过上面的代码亲测可以用,打开你的R实操即可。

上一篇 下一篇

猜你喜欢

热点阅读