6 votes

Hachage sensible à la localité - recherche de probabilités et de valeurs pour R

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 ?

2voto

Aaron Merriam Points 566

Pour les personnes intéressées. J'ai trouvé ce document ( http://web.mit.edu/andoni/www/papers/cSquared.pdf qui contient une explication très détaillée, bien que compliquée, de l'utilisation de LSH pour les espaces de haute dimension.

2voto

Jon Points 63

Vous pouvez consulter "MetaOptimize" - comme Stack Overflow pour l'apprentissage automatique.
http://metaoptimize.com/qa

Votre question n'est pas vraiment une question de python ou de programmation, et cette communauté pourrait être en mesure de vous aider un peu plus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X