geschätzt Was Sie suchen bezeichnet wird Ähnlichkeitsmaß. Eine schnelle Google/SO-Suche wird verschiedene Methoden aufzeigen, um die Ähnlichkeit zwischen zwei Vektoren zu erhalten. Hier ist ein Beispielcode in python2 für Kosinusähnlichkeit:
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])
entnommen aus: http://dataaspirant.com/2015/04/11/five-most-popular-similarity-measures-implementation-in-python/
ich bemerkt, dass Sie Top-k und ähnliche Artikel für jeden Artikel möchten. Der beste Weg dazu ist eine k Nearest Neighbor Implementierung. Sie können ein KNN-Diagramm erstellen und die obersten k ähnlichen Elemente aus dem Diagramm für eine Abfrage zurückgeben. Eine große Bibliothek für dieses ist nmslib
. Hier ist ein Beispielcode für eine knn Abfrage from the library für die HNSW Methode mit Kosinusähnlichkeit (Sie eines der vielen verfügbaren Methoden verwenden können HNSW ist besonders effizient für Ihre hohe Dimensionsdaten.):
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)
Am Ende Der Code, die k oberen Nachbarn für jeden Datenpunkt werden in der neighbours
Variable gespeichert. Sie können das für Ihre Zwecke verwenden.
Danke für Ihre Antwort, – user123
wollen nur wissen, wo haben Sie diese Zahlen ([3, 45, 7, 2], [2, 54, 13, 15]) ?? – user123
Sie sind nur Beispieldaten. Setze deine Datenvektoren ein, um die Ähnlichkeit zwischen zwei beliebigen Vektoren zu erhalten. Versuche auch, zu den Links zu navigieren, die ich hinzugefügt habe. Sie enthalten viele relevante Informationen – fzk