Hug*_*cot 7 cosine-similarity scikit-learn
我使用余弦相似性在我的数据集上执行TSNE有一个小问题.
我已经计算了所有向量的余弦相似度,所以我有一个包含余弦相似度的方阵:
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 ]]
Run Code Online (Sandbox Code Playgroud)
然后,我正在使用TSNE:
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)
Run Code Online (Sandbox Code Playgroud)
但我不确定使用预先计算的度量标准来保持我的余弦相似度:
#[documentation][1]
If metric is “precomputed”, X is assumed to be a distance matrix
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用余弦指标时,我收到了一个错误:
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
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,如何在现有数据集(相似度矩阵)上使用余弦度量来执行TSNE?
我可以回答你的大多数问题,但是我不太清楚为什么在你的第二个例子中会出现这个错误.
您已经计算了每个向量的余弦相似度,但是scikit假定了TSNE输入的距离矩阵.然而,这是一个非常简单的转换距离= 1 - 相似性.所以对你的例子
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)
Run Code Online (Sandbox Code Playgroud)
这应该可以为您提供所需的转换.
归档时间: |
|
查看次数: |
3594 次 |
最近记录: |