/ / Comment calculer la similarité cosinus pour deux vecteurs de tailles différentes - c #, exploration de données, similarité cosinus

Comment calculer la similarité des cosinus pour deux tailles de vecteurs différents - c #, extraction de données, similarité cosinus

Je dois calculer la similarité de cosinus sur des fichiers volumineux contenant des lignes de nombres, par exemple:

6 3 574

11 1 6 575 576 321

4 577 6 64

69 11 6 55

11 218 6 578 579 580 581 229 582 583 155 100 584 148 446 585

Je le stocke déjà sur une matrice de chaîne, qui fait la division et chaque numéro est une cellule différente.

string[] lines = FileBuff.Split(new string[] { "rn", "n" }, StringSplitOptions.None);
FileMatrix = new string[lines.Length][];
for (int i = 0; i < lines.Length; i++)
{
FileMatrix[i] = lines[i].Split(new string[] { "t", " " }, StringSplitOptions.None);
}

Ma question est de savoir comment calculer la similarité cosinus des lignes qui se trouve dans differentes tailles?
pour calculer le numérateur, il doit avoir la même taille (A [i] * B [i] + A [i + 1] * B [i + 1] + .....)

J'ai trouvé cet exemple, c'est le même problème que le mien avec juste des lettres:

Document 1: The quick brown fox jumped over the lazy dog.

Global order:     The quick brown fox jumped over the lazy dog
Vector for Doc 1:  1    1     1    1     1     1    1   1   1

Document 2: The runner was quick.

Global order:     The quick brown fox jumped over the lazy dog runner was
Vector for Doc 1:  1    1     1    1     1     1    1   1   1
Vector for Doc 2:  1    1     0    0     0     0    0   0   0    1     1

Dans ce cas, je dois théoriquement compléter le vecteur Document 1 avec des zéros. j'ai besoin d'aide pour un code qui le rend

Réponses:

0 pour la réponse № 1

Les vecteurs doivent avoir la même longueur. S'ils ne le sont pas, vous devez ajouter à zéro celui qui a la plus petite dimension. Fondamentalement, la logique est la suivante:

Considérons 2 vecteurs: (0,1) et (0,0,1).

Le premier est en 2D, le second en 3D. Vous pouvez considérer le vecteur 2D comme un vecteur 3D, mais situé dans le plan (x, y). Donc, (0,1) équivaut à (0,1,0).

Voir également une réponse à cette question dans la section Python.


0 pour la réponse № 2

Ça dépend.

Si vos données sont supposées être un espace vectoriel continu, les vecteurs doivent avoir la même longueur.

Si vos données sont un vecteur fragmenté, les valeurs manquantes par définition sont 0 (généralement).

Vos données donnent l’impression que vous n’avez que le index de 1s.

Le cosinus consiste ensuite à compter la taille de l'intersection (divisée par la longueur moyenne géométrique); Je voudrais aller avec Jaccard sur de telles données à la place.

Vous devez connaître le format d'entrée - les réponses sont multiples, à moins que vous ne donniez les informations essentielles sur la manière dont les données sont codées et sur leur contenu. veux dire.