何を探してるんですが類似性尺度と呼ばれ理解されるであろう。簡単なgoogle/SOの検索では、2つのベクトル間の類似性を得るためのさまざまな方法が明らかになります。私はあなたがすべての項目の最上位k個関連商品を望むことに気づいhttp://dataaspirant.com/2015/04/11/five-most-popular-similarity-measures-implementation-in-python/
:
from math import *
def square_rooted(x):
return round(sqrt(sum([a*a for a in x])),3)
def cosine_similarity(x,y):
numerator = sum(a*b for a,b in zip(x,y))
denominator = square_rooted(x)*square_rooted(y)
return round(numerator/float(denominator),3)
print cosine_similarity([3, 45, 7, 2], [2, 54, 13, 15])
から撮影:ここではコサイン類似度についてpython2でいくつかのサンプルコードです。それを行う最善の方法は、k最近隣の実装です。できることはknnグラフを作成し、クエリのグラフから同様の上位k個のアイテムを返すことです。
このための素晴らしい図書館はnmslib
です。ここではコサイン類似度とHNSW方法についてKNNクエリfrom the libraryのためのいくつかのサンプルコードです(あなたは、いくつかの利用可能な方法のいずれかを使用することができますがHNSWはあなたの高次元データのために特に効率的である。):
import nmslib
import numpy
# create a random matrix to index
data = numpy.random.randn(10000, 100).astype(numpy.float32)
# initialize a new index, using a HNSW index on Cosine Similarity
index = nmslib.init(method='hnsw', space='cosinesimil')
index.addDataPointBatch(data)
index.createIndex({'post': 2}, print_progress=True)
# query for the nearest neighbours of the first datapoint
ids, distances = index.knnQuery(data[0], k=10)
# get all nearest neighbours for all the datapoint
# using a pool of 4 threads to compute
neighbours = index.knnQueryBatch(data, k=10, num_threads=4)
の終わりにコードは、各データ点に対するKトップ隣人はneighbours
変数に格納されます。あなたはあなたの目的のためにそれを使うことができます。
出典
2017-06-10 10:16:36
fzk
返信いただきありがとうございます。 – user123
は、これらの番号([3、45、7、2]、[2、54、13、15])を取得したことを知りたいだけですか? – user123
サンプルデータです。任意の2つのベクトル間の類似度を得るためにあなたのデータベクトルに入れてください。また、私が追加したリンクに移動してみてください。彼らは多くの関連情報を含んでいます – fzk