gpt4 book ai didi

python - 从向量集中找到最相关的向量

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:12:14 24 4
gpt4 key购买 nike

我有一组形状为 (1000,) 的向量(它是图像的向量表示),我需要找出其中哪一个与其他向量最相关(最相关的图像来表示该实体)。我正在经历许多像 kNN 这样的算法,但我没有任何经过训练的数据来与这些向量进行比较,我只有这些向量。谁能告诉我我需要使用哪种算法来实现这一目标??

最佳答案

这完全取决于嵌入的类型/这些表示的计算方式,不使用这个假设就没有有效的算法!

您需要某种度量,它能够评估两个向量的相似性!

当你确实有这个指标时,天真的方法是一个循环比较所有:

# linear-search
max_similarity = -inf
max_vector
for vector in all_vectors:
similarity = similarity(my_vector, vector)
if similarity > max_similarity:
max_similarity = similarity
max_vector = vector

对于某些指标,可以通过指标树和类似方法(基本上是 kNN 算法的内部结构)来加速上述过程,这些方法尝试使用基础指标的假设(结果是在潜在的加速中)。这些算法在非常高的维度上变慢,但我不确定 1000 是否已经太多了!

如果您的假设/相似性基于欧几里得度量(使用 sklearn 的 KDTree):

from sklearn.neighbors import KDTree
X = np.vstack(my_vectors)
tree = KDTree(X)
dist, ind = tree.query(my_vector, k=1) # get nearest neighbor

一个很好的例子是 OpenFace这完全建立在将人脸映射到欧氏空间的想法之上(相似的人脸具有低欧氏距离)! (基础论文:FaceNet)

还有 BallTree支持更多指标!

from sklearn.neighbors import KDTree, BallTree

KDTree.valid_metrics
['cityblock', 'p', 'l2', 'chebyshev', 'l1', 'euclidean', 'minkowski',
'infinity', 'manhattan']

BallTree.valid_metrics
['braycurtis', 'cityblock', 'p', 'hamming', 'dice', 'l2', 'rogerstanimoto',
'wminkowski', 'chebyshev', 'russellrao', 'sokalmichener', 'matching', 'l1',
'haversine', 'pyfunc', 'kulsinski', 'seuclidean', 'mahalanobis', 'euclidean',
'minkowski', 'sokalsneath', 'infinity', 'manhattan', 'jaccard', 'canberra']

再说一遍:这里第一句话是最重要的!

关于python - 从向量集中找到最相关的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47004401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com