2017-02-13 4 views
1

Je dois prétraiter les données en nombres pour pouvoir appliquer des algorithmes ML dans un ensemble de données, mais il y a cette fonctionnalité qui est presque arborescente avec des chaînes dont je n'ai aucune idée. comment transformer. Ici va un exemple:Apprentissage automatique des chaînes de prétraitement à des nombres basés sur la similarité des chaînes

Feature -> Value I would like to transform to (example): 

X Y Z foo -> 0.5 
X Y Z bar -> 0.501 

A B C foo -> 4.1 
W B C foo -> 5 

Essentiellement la chaîne transformerait en un nombre réel unique, où ce nombre serait très proche d'autres chiffres si leurs chaînes étaient presque identiques, ce qui donne plus de poids aux premiers mots qui viennent premier sur la chaîne.

Ma question, existe-t-il un algorithme déjà existant pour résoudre ce problème?

+0

Vous demandez d'intégrer un espace de plus grande dimension dans un espace à une dimension. C'est généralement impossible sauf approximativement. Voir https://en.wikipedia.org/wiki/Nonlinear_dimensionality_reduction pour les pointeurs, mais vous devrez également décider quelle est votre métrique de distance. –

Répondre

0

Tout d'abord, je ne connais aucun algorithme pour résoudre ce problème. Mais j'ai une idée (je sais que ce n'est pas "une réponse" mais je n'ai pas la réputation d'ajouter ceci comme commentaire).

Transformez chaque chaîne en répétant chaque caractère proportionnellement à sa position depuis la fin. Par exemple, "Foo" deviendra "FFFooo" et "abcd" "aaaabbbccd". Ensuite, utilisez le edit-distance sur chaque paire pour construire une matrice de distance, M.

Maintenant c'est un problème d'optimisation. Commencez avec une solution aléatoire (un réel aléatoire pour chaque mot), puis calculez la matrice de distance M 'de votre solution et minimisez une certaine métrique (erreur au carré) entre M et M'.

0

Il me semble, d'après votre exemple, que vous essayez de trouver la similitude entre deux documents de textes. La similarité des cosinus est la mesure de distance la plus utilisée dans ce contexte.

Par exemple, comparons « Le garçon mange la pomme » et « La fille mange la poire »

D'abord, créer une matrice de fréquence, où ij d'entrée contient le nombre de j fois terme figure dans le document je.

   "the" "boy" "girl" "eats" "apple" "pear" 
(sentence 1) 2  1  0  1  1  0 
(sentence 2) 2  0  1  1  0  1 

La similarité du cosinus peut donc être calculé avec

enter image description here

De Principles of Data Mining:

Ceci est le cosinus de l'anvgle entre les deux vecteurs (de façon équivalente, leur produit scalaire après que chacun a été normalisé pour avoir une longueur unitaire) et, par conséquent, reflète la similarité en termes de distribution relative de leurs composantes terme.