2010-02-19 6 views
3

J'ai un grand ensemble de données avec les mots word_i et les poids weight[i,j], où le poids est la «force de connexion» entre les mots. Je voudrais binariser ces données, mais je veux savoir s'il existe un algorithme pour faire du code binaire de chaque mot de telle sorte que la distance de Hamming entre les codes des mots corresponde à ce poids.Algorithmes: binarisation de données

Ajouté:
Le problème que je travaille est que je veux essayer d'enseigner un filet ou SVM de neurones pour faire des associations entre les mots. Et c'est pourquoi j'ai décidé de binariser les données. Ne demandez pas pourquoi je ne veux pas utiliser des modèles de Markov ou simplement des graphiques, je les ai essayés et je veux les comparer avec des réseaux de neurones.

Ainsi,

  1. Je veux que mon NN sur le mot donné « un » retour son plus proche association ou des mots ensemble et leurs probabilités,

  2. J'ai essayé juste binariser et faire " ab "comme entrée et poids comme réponse préférée, cela a mal fonctionné,

  3. Je pensais faire en sorte que le seuil (pour les poids) change 1 bit de plus. Plus ce seuil est petit, plus vous avez besoin de bits,

  4. J'ai une situation: a-> b w1; b-> a w2; w1 >> w2, donc la direction est significative.

+0

Corréler avec quelle intensité? Le code binaire doit-il être aussi bavard que possible, ou peut-il être quelconque? Pourquoi fais-tu ça? –

+1

Veuillez clarifier votre question. Binarize == sérialiser? Avez-vous besoin d'un algorithme pour calculer la distance de Hamming? Quel est le problème exactement? –

+0

D'après ce que vous avez dit, je suppose que vous voulez remplacer chaque mot par une chaîne binaire de sorte que la distance de hamming soit égale au poids. Correct? Cela impliquerait que le poids est un nombre entier, également correct? –

Répondre

1

ce que vous pouvez faire est d'utiliser une carte d'auto-organisation (SOM) avec la topologie de longueur fixe, N-bits dire, des mots, de sorte que par exemple si N = 8 alors chaque cellule de la SOM a exactement 8 voisins (ceux où un bit a été retourné). Maintenant, si vous avez K mots [dictionnaire], vous pouvez encoder chaque mot [dictionnaire] comme un vecteur de nombres réels entre 0..1 de sorte que le mot ith ait l'élément ith à 1 et les autres à 0. Vous pouvez ensuite calculer le « distance » entre deux vecteurs arbitraires a1 ... et aK b1 ... bK en sommant sur

i,j : ai * bj * distance(ai, bj) 

qui vous donne la distance métrique pour l'exécution de l'algorithme SOM. Lorsque le SOM s'est stabilisé, les mots [dictionnaires] proches les uns des autres dans votre métrique sont proches les uns des autres dans la topologie de la carte, à partir de laquelle vous obtenez l'encodage trivialement comme des mots [binaires].

Notez que la carte doit avoir plus de cellules il y a des mots, à savoir 2 ** N> K.

Cette réponse suppose bien entendu fond avec des cartes auto-organisatrices. Voir http://en.wikipedia.org/wiki/Self-organizing_map

+0

>>. Maintenant, si vous avez K mots [dictionnaire] vous pouvez encoder chaque mot [dictionnaire] comme un vecteur de nombres réels entre 0..1 de sorte que le mot ith a l'élément ith mis à 1 et d'autres à 0. Cela signifie-t-il que je aurai le nombre de bits == nombre de mots? Ne serait-il pas préférable de coder comme un codage binaire général, ayant un nombre de bits = log (N), N-number of dict mots? Ou voulez-vous le coder en matrice (N * N), où wij est le poids (ai, bj). Dans ce cas, avoir chaque ligne comme exemple pour SOM, nombre d'exemples == nombre de variables. Merci beaucoup! – Ivri

+0

J'ai résolu le problème en utilisant MDS (mise à l'échelle multidimensionnelle) – Ivri

Questions connexes