Merci à ceux qui ont répondu à mes questions précédentes et qui m'ont permis d'arriver jusqu'ici.
J'ai un tableau d'environ 25 000 vecteurs, chacun avec 48 dimensions, avec des valeurs allant de 0 à 255.
J'essaie d'élaborer un plan d'action sensible à la localité (Locality Sensitive Hash). http://en.wikipedia.org/wiki/Locality-sensitive_hashing ) pour trouver un voisin proche ou les points les plus proches.
Ma fonction LSH actuelle est la suivante :
def lsh(vector, r = 1.0, a = None, b = None):
if not a:
a = [normalvariate(10, 4) for i in range(48)]
if not b:
b = uniform(0, r)
hashVal = floor((sum([a[i]*vector[i] for i in range(48)]) + b)/r)
return int(hashVal)
Mes questions à ce stade sont les suivantes :
A : Y a-t-il des valeurs optimales pour la partie "normalvariate(10, 4)" de mon code. Il s'agit de python random.normalvariate ( http://docs.python.org/library/random.html#random.normalvariate ) que j'utilise pour produire le "vecteur de dimension d dont les entrées sont choisies indépendamment à partir d'une distribution stable". D'après mes expériences, les valeurs ne semblent pas avoir beaucoup d'importance.
B : En tête de l'article de Wikipédia, on peut lire :
si d(p,q) <= R, alors h(p) = h(q) avec une probabilité d'au moins P1
si d(p,q) >= cR, alors h(p) = h(q) avec une probabilité maximale de P2
La valeur R mentionnée ici est-elle également la valeur R mentionnée dans la section "Distributions stables" ? ( http://en.wikipedia.org/wiki/Locality-sensitive_hashing#Stable_distributions )
C : En lien avec ma question précédente (B). J'ai découvert qu'en utilisant des valeurs plus élevées de R dans ma fonction de hachage, mes vecteurs se retrouvent dans une plus petite plage de valeurs de hachage. Existe-t-il un moyen d'optimiser ma valeur R ?
D : Combien de tables environ peut-on utiliser ?