作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 scikit 的 Nearest Neighbor 实现从随机值矩阵中找到最接近给定列向量的列向量。
此代码应该找到第 21 列的最近邻居,然后检查这些邻居与第 21 列的实际余弦相似度。
from sklearn.neighbors import NearestNeighbors
import sklearn.metrics.pairwise as smp
import numpy as np
test=np.random.randint(0,5,(50,50))
nbrs = NearestNeighbors(n_neighbors=5, algorithm='auto', metric=smp.cosine_similarity).fit(test)
distances, indices = nbrs.kneighbors(test)
x=21
for idx,d in enumerate(indices[x]):
sim2 = smp.cosine_similarity(test[:,x],test[:,d])
print "sklearns cosine similarity would be ", sim2
print 'sklearns reported distance is', distances[x][idx]
print 'sklearns if that distance was cosine, the similarity would be: ' ,1- distances[x][idx]
sklearns cosine similarity would be [[ 0.66190748]]
sklearns reported distance is 0.616586738214
sklearns if that distance was cosine, the similarity would be: 0.383413261786
最佳答案
好的,问题是 NearestNeighbors 的 .fit() 方法,默认情况下假定行是样本,列是特征。在传递矩阵之前,我必须转置矩阵。
编辑:另外,另一个问题是作为度量传递的可调用对象应该是距离可调用对象,而不是相似性可调用对象。否则你会得到 K 最远的邻居:/
关于python-2.7 - 为什么 scikit-learn 的最近邻似乎没有返回正确的余弦相似距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23032628/
我是一名优秀的程序员,十分优秀!