network

nodeSimilarity

##set_network

Description

L'action nodeSimilarity calcule des mesures de similitude entre les nœuds d'un graphe en se basant sur sa structure topologique. Elle est particulièrement utile pour la prédiction de liens, les systèmes de recommandation ou l'identification d'entités redondantes. Vous pouvez calculer des indices classiques (Jaccard, Cosine, Dice) ou des similitudes basées sur des vecteurs latents (embeddings). C'est un peu comme essayer de deviner qui sera le prochain 'ami' de votre nœud en regardant ses fréquentations actuelles !

Syntaxe Officielle
network.nodeSimilarity /
[adamicAdar=True | False]
[bottomk=integer]
[commonNeighbors=True | False]
[convergenceThreshold=double]
[cosine=True | False]
[deterministic=True | False]
[dice=True | False]
[direction="DIRECTED" | "UNDIRECTED"]
[display={displayTables}]
[distributed=True | False]
[embed=True | False]
[embeddings={"variable-name-1", ...}]
[graph=integer]
[indexOffset=integer]
[jaccard=True | False]
[links={castable}]
[linksVar={linksVar}]
[logFreqTime=integer]
[logLevel="AGGRESSIVE" | "BASIC" | "MODERATE" | "NONE"]
[maxScore=double]
[minScore=double]
[multiLinks=True | False]
[nDimensions=integer]
[negativeSampleFactor=integer]
[nodes={castable}]
[nodesSubset={castable}]
[nodesSubsetVar={nodesSubsetVar}]
[nodesVar={nodesVar}]
[nSamples=integer]
[nThreads=integer]
[orderBy="ADAMICADAR" | "COMMONNEIGHBORS" | "COSINE" | "DICE" | "JACCARD" | "VECTOR"]
[outConvergence={casouttable}]
[outGraphList={casouttable}]
[outLinks={casouttable}]
[outNodes={casouttable}]
[outputTables={outputTables}]
[outSimilarity={casouttable}]
[proximityOrder="FIRST" | "SECOND"]
[selfLinks=True | False]
[sink="string" | double | integer]
[source="string" | double | integer]
[sparse=True | False]
[standardizedLabels=True | False]
[standardizedLabelsOut=True | False]
[topk=integer]
[vector=True | False];

Paramètres Clés

Nom du paramètre Description
adamicAdar Si positionné sur True, calcule la mesure de similitude d'Adamic-Adar, qui pondère davantage les voisins communs ayant un faible degré.
jaccard Calcule l'indice de Jaccard (par défaut à True), défini comme la taille de l'intersection des voisinages divisée par la taille de leur union.
vector Active le calcul de similitude vectorielle basé sur des techniques d'apprentissage profond pour graphes (embeddings).
nDimensions Spécifie le nombre de dimensions pour les vecteurs de nœuds (embeddings). Par défaut 100.
topk Limite la sortie aux K paires de nœuds ayant les scores de similitude les plus élevés.
outSimilarity Désigne la table CAS de sortie qui contiendra les scores de similitude pour chaque paire de nœuds.

Préparation des données

Création d'un réseau de relations simples

Ce code génère une table de liens représentant un petit réseau social pour tester les similitudes.

1DATA mycas.links; INPUT from $ to $; DATALINES; Anna Bob Anna Clara Bob Anna Bob Clara Bob David Clara Anna Clara Bob David Bob David Elsa ; RUN;

Exemples d'utilisation

Calcul de similitude de Jaccard

Calcule les scores de Jaccard pour toutes les paires de nœuds du réseau.

1PROC CAS; network.nodeSimilarity / links={name="links"} jaccard=true outSimilarity={name="jaccard_out", replace=true}; RUN; QUIT;
Résultat Attendu :
Une table 'jaccard_out' contenant les colonnes 'node1', 'node2' et 'jaccard' avec les scores calculés.
Similitude vectorielle avec Embeddings et Top-K

Génère des embeddings de dimension 10 et renvoie les 5 paires les plus similaires.

1PROC CAS; network.nodeSimilarity / links={name="links"} vector=true nDimensions=10 topk=5 orderBy="VECTOR" outSimilarity={name="vector_top5", replace=true} outNodes={name="node_vectors", replace=true}; RUN; QUIT;
Résultat Attendu :
La table 'node_vectors' contient les coordonnées vectorielles de chaque nœud, et 'vector_top5' liste les 5 paires les plus proches mathématiquement.