首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sklearn.manifold中的余弦相似法

sklearn.manifold中的余弦相似法
EN

Stack Overflow用户
提问于 2016-04-11 09:58:10
回答 3查看 8K关注 0票数 10

我有一个小问题要在我的数据集上执行TSNE,使用余弦相似性。

我计算了所有向量的余弦相似性,所以我有一个包含余弦相似性的方阵:

代码语言:javascript
复制
A = [[  1    0.7   0.5   0.6  ]
     [  0.7   1    0.3   0.4  ]
     [  0.5  0.3    1    0.1  ]
     [  0.6  0.4   0.1    1   ]]

然后,我像这样使用TSNE:

代码语言:javascript
复制
A = np.matrix([[1, 0.7,0.5,0.6],[0.7,1,0.3,0.4],[0.5,0.3,1,0.1],[0.6,0.4,0.1,1]])
model = manifold.TSNE(metric="precomputed")
Y = model.fit_transform(A) 

但我不确定要使用预先计算的度量来保持我的余弦相似性:

代码语言:javascript
复制
#[documentation][1]
If metric is “precomputed”, X is assumed to be a distance matrix

但是当我尝试使用余弦度量时,我得到了一个错误:

代码语言:javascript
复制
A = np.matrix([[1, 0.7,0.5,0.6],[0.7,1,0.3,0.4],[0.5,0.3,1,0.1],[0.6,0.4,0.1,1]])
model = manifold.TSNE(metric="cosine")
Y = model.fit_transform(A) 

raise ValueError("All distances should be positive, either "
ValueError: All distances should be positive, either the metric or 
precomputed distances given as X are not correct

因此,我的问题是,如何能够在现有的数据集(相似性矩阵)上使用余弦度量来执行 ?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-11 13:01:29

我可以回答你的大部分问题,但是我不太清楚为什么在第二个例子中会出现这个错误。

您已经计算了每个向量的余弦相似性,但是scikit假设输入到TSNE的距离矩阵。然而,这是一个非常简单的转换距离=1-相似。所以作为你的例子

代码语言:javascript
复制
import numpy as np
from sklearn import manifold
A = np.matrix([[1, 0.7,0.5,0.6],[0.7,1,0.3,0.4],[0.5,0.3,1,0.1],[0.6,0.4,0.1,1]])
A = 1.-A
model = manifold.TSNE(metric="precomputed")
Y = model.fit_transform(A) 

这应该会给你你想要的转变。

票数 7
EN

Stack Overflow用户

发布于 2018-01-30 10:48:52

可以使用sklearn pairwise_distances完成

代码语言:javascript
复制
from sklearn.manifold import TSNE
from sklearn.metrics import pairwise_distances

distance_matrix = pairwise_distances(X, X, metric='cosine', n_jobs=-1)
model = TSNE(metric="precomputed")
Xpr = model.fit_transform(distance_matrix)

distance_matrix中的值将在[0,2]范围内,因为(1 - [-1,1])

票数 3
EN

Stack Overflow用户

发布于 2016-09-07 12:46:26

目前有一个bug。见此处:https://github.com/scikit-learn/scikit-learn/issues/5772

然而,scikit的t-sne使用与余弦距离成正比的平方欧几里得距离,假设数据是L2归一化的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36545434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档