Ce que vous cherchez est appelé mesure de similarité. Une recherche rapide google/SO révélera différentes méthodes pour obtenir la similarité entre deux vecteurs. Voici quelques exemples de code dans python2 pour similitude cosinus:
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])
Extrait de: http://dataaspirant.com/2015/04/11/five-most-popular-similarity-measures-implementation-in-python/
J'ai remarqué que vous voulez haut k articles similaires pour chaque élément. La meilleure façon de le faire est avec une implémentation de k le plus proche voisin. Ce que vous pouvez faire est de créer un knn graphique et de renvoyer les k éléments les plus proches du graphique pour une requête.
Une grande bibliothèque est ce nmslib
. Voici quelques exemples de code pour une requête knn from the library pour la méthode HNSW avec similitude cosinus (vous pouvez utiliser l'une des nombreuses méthodes disponibles HNSW est particulièrement efficace pour vos données de grande dimension.):
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)
A la fin de le code, les k voisins supérieurs pour chaque point de données seront stockés dans la variable neighbours
. Vous pouvez l'utiliser pour vos besoins.
Merci pour votre réponse, – user123
veulent juste savoir où avez-vous obtenu ces chiffres ([3, 45, 7, 2], [2, 54, 13, 15]) ?? – user123
Ce ne sont que des exemples de données. Mettez dans vos vecteurs de données pour obtenir la similitude entre deux vecteurs quelconques. Aussi, essayez de naviguer vers les liens que j'ai ajoutés. Ils contiennent beaucoup d'informations pertinentes – fzk