El algoritmo Total Neighbors o «todos los vecinos» es un algoritmo perteneciente a la familia de predicción de enlaces que esta disponible en la biblioteca de Neo4j. A continuación descubriremos información importante sobre este algoritmo y conoceremos un ejemplo práctico para evaluar su potencialidad.
¿Qué es el algoritmo Total Neighbors?
Este algoritmo conocido como Total Neighbors se encarga de calcular la cercanía de los nodos pertenecientes a un grafo, en función del número de vecinos únicos que tienen. Toma como base la idea de que cuanto más conectado esté un nodo, es más probable que se añadan nuevos enlaces.
Este algoritmo funciona bajo la implementación de una fórmula matemática que se expresa de la siguiente forma:
Donde se tiene que N (x) es el conjunto de los vértices adyacentes a x, y N(y) es el conjunto de nodos adyacentes a y. Dentro de los valores que podemos obtener producto de la aplicación del algoritmo, un valor cero indica que dos nodos no están cerca, mientras que los valores más altos indican que los nodos están más cerca uno de otro.
A continuación observaremos un ejercicio desarrollado en Cypher para comprender el funcionamiento del algoritmo.
Ejemplo de aplicación
Para desarrollar este ejemplo, construiremos un grafo donde designaremos algunos nodos y expresaremos sus relaciones entre ellos, como lo mostramos a continuación:
MERGE (zhen:Person {name: "Zhen"})
MERGE (praveena:Person {name: "Praveena"})
MERGE (michael:Person {name: "Michael"})
MERGE (arya:Person {name: "Arya"})
MERGE (karin:Person {name: "Karin"})
MERGE (zhen)-[:FRIENDS]-(arya)
MERGE (zhen)-[:FRIENDS]-(praveena)
MERGE (praveena)-[:WORKS_WITH]-(karin)
MERGE (praveena)-[:FRIENDS]-(michael)
MERGE (michael)-[:WORKS_WITH]-(karin)
MERGE (arya)-[:FRIENDS]-(karin)
Posteriormente ejecutamos una consulta en Cypher con el algoritmo para estudiar un par de nodos específicos y conocer si se encuentran cerca el uno del otro.
MATCH (p1:Person {name: 'Michael'})
MATCH (p2:Person {name: 'Karin'})
RETURN algo.linkprediction.totalNeighbors(p1, p2) AS score
score |
---|
4.0 |
Los resultados demuestran que los vértices se encuentran cerca dentro de la estructura del grafo. También podemos ejecutar la consulta para estudiar los mismos vértices, pero desde su relación especifica.
MATCH (p1:Person {name: 'Michael'})
MATCH (p2:Person {name: 'Karin'})
RETURN algo.linkprediction.totalNeighbors(p1, p2, {relationshipQuery: "FRIENDS"}) AS score
score |
---|
2.0 |
Esperamos que esta información sea de utilidad para entender de mejor manera el funcionameinto de este algoritmo.
Visita más de Grapheverywhere para conocer todo lo que necesitas sobre los algoritmos de análisis de grafos y predicción de enlaces.