Vue d’ensemble
En mathématiques, la distance euclidienne entre deux points dans l'espace euclidien est la longueur d'un segment de ligne entre les deux points. Dans le graph, en spécifiant N properties numériques (caractéristiques) des nodes pour indiquer l'emplacement du node dans un espace euclidien N-dimensionnel.
Concepts
Distance Euclidienne
Dans l'espace à 2 dimensions, la formule pour calculer la distance euclidienne entre les points A(x1, y1) et B(x2, y2) est :
Dans l'espace à 3 dimensions, la formule pour calculer la distance euclidienne entre les points A(x1, y1, z1) et B(x2, y2, z2) est :
Généralisé à un espace N-dimensionnel, la formule pour calculer la distance euclidienne est :
où xi1 représente les coordonnées de la ième dimension du premier point, xi2 représente les coordonnées de la ième dimension du second point.
La distance euclidienne varie de 0 à +∞ ; plus la valeur est petite, plus les deux nodes sont similaires.
Distance Euclidienne Normalisée
La distance euclidienne normalisée redimensionne la distance euclidienne dans une plage de 0 à 1 ; plus la valeur est proche de 1, plus les deux nodes sont similaires.
Ultipa adopte la formule suivante pour normaliser la distance euclidienne :
Considérations
- Théoriquement, le calcul de la distance euclidienne entre deux nodes ne dépend pas de leur connectivité.
Syntaxe
- Commande :
algo(similarity)
- Paramètres :
Nom |
Type |
Spécification |
Par défaut |
Optionnel |
Description |
---|---|---|---|---|---|
ids / uuids | []_id / []_uuid |
/ | / | Non | ID/UUID du premier groupe de nodes à calculer |
ids2 / uuids2 | []_id / []_uuid |
/ | / | Oui | ID/UUID du second groupe de nodes à calculer |
type | string | euclideanDistance , euclidean |
cosine |
Non | Type de similarité; euclideanDistance sert à calculer la Distance Euclidienne, euclidean sert à calculer la Distance Euclidienne Normalisée |
node_schema_property | []@<schema>?.<property> |
Type numérique, doit être LTE | / | Non | Spécifier deux ou plusieurs propriétés de nodes pour former les vecteurs, toutes les properties doivent appartenir au même schéma |
limit | int | ≥-1 | -1 |
Oui | Nombre de résultats à retourner, -1 pour retourner tous les résultats |
top_limit | int | ≥-1 | -1 |
Oui | En mode sélection, limite le nombre maximum de résultats renvoyés pour chaque node spécifié dans ids /uuids , -1 pour retourner tous les résultats avec similarité > 0 ; en mode appariement, ce paramètre est invalide |
L'algorithme a deux modes de calcul :
- Appariement : lorsque les deux
ids
/uuids
etids2
/uuids2
sont configurés, apparaie chaque node dansids
/uuids
avec chaque node dansids2
/uuids2
(ignorant le même node) et calcule les similarités par paires. - Sélection : lorsque seulement
ids
/uuids
est configuré, pour chaque node cible, calcule les similarités par paires entre celui-ci et tous les autres nodes dans le graph. Les résultats retournés incluent tous ou un nombre limité de nodes ayant une similarité > 0 avec le node cible, classés par similarité décroissante.
Exemples
Le graph d'exemple a 4 produits (les edges sont ignorés), chaque produit a les properties price, weight, weight et height:
File Writeback
Spécification | Contenu |
---|---|
filename | node1 ,node2 ,similarity |
algo(similarity).params({
uuids: [1],
uuids2: [2,3,4],
node_schema_property: ['price', 'weight', 'width', 'height'],
type: 'euclideanDistance'
}).write({
file:{
filename: 'ed'
}
})
Résultats : Fichier ed
product1,product2,94.3822
product1,product3,143.962
product1,product4,165.179
algo(similarity).params({
uuids: [1,2,3,4],
node_schema_property: ['price', 'weight', 'width', 'height'],
type: 'euclidean'
}).write({
file:{
filename: 'ed_list'
}
})
Résultats : Fichier ed_list
product1,product2,0.010484
product1,product3,0.006898
product1,product4,0.006018
product2,product3,0.018082
product2,product4,0.013309
product2,product1,0.010484
product3,product4,0.024091
product3,product2,0.018082
product3,product1,0.006898
product4,product3,0.024091
product4,product2,0.013309
product4,product1,0.006018
Direct Return
Alias Ordinal |
Type |
Description | Colonnes |
---|---|---|---|
0 | []perNodePair | Paire de nodes et sa similarité | node1 , node2 , similarity |
algo(similarity).params({
uuids: [1,2],
uuids2: [2,3,4],
node_schema_property: ['price', 'weight', 'width', 'height'],
type: 'euclideanDistance'
}) as distance
return distance
Résultats : distance
node1 | node2 | similarity |
---|---|---|
1 | 2 | 94.3822017119753 |
1 | 3 | 143.96180048888 |
1 | 4 | 165.178691119648 |
2 | 3 | 54.3046959295419 |
2 | 4 | 74.1350119714025 |
algo(similarity).params({
uuids: [1,2],
type: 'euclidean',
node_schema_property: ['price', 'weight', 'width', 'height'],
top_limit: 1
}) as top
return top
Résultats : top
node1 | node2 | similarity |
---|---|---|
1 | 2 | 0.0104841362649574 |
2 | 3 | 0.0180816471945529 |
Stream Return
Alias Ordinal |
Type |
Description | Colonnes |
---|---|---|---|
0 | []perNodePair | Paire de nodes et sa similarité | node1 , node2 , similarity |
algo(similarity).params({
uuids: [3],
uuids2: [1,2,4],
node_schema_property: ['@product.price', '@product.weight', '@product.width'],
type: 'euclidean'
}).stream() as distance
where distance.similarity > 0.01
return distance
Résultats : distance
node1 | node2 | similarity |
---|---|---|
3 | 2 | 0.0180816471945529 |
3 | 4 | 0.0240910110982062 |
algo(similarity).params({
uuids: [1,3],
node_schema_property: ['price', 'weight', 'width', 'height'],
type: 'euclideanDistance',
top_limit: 1
}).stream() as top
return top
Résultats : top
node1 | node2 | similarity |
---|---|---|
1 | 4 | 165.178691119648 |
3 | 1 | 143.96180048888 |