[EN] In this project conducted in collaboration with Antonio Macías, we have performed a study of relational metrics for a dataset in the form of a graph that can be used to train a relational machine learning model to do multi-class node classification.
Using the programming language Python and leveraging libraries such as scikit-learn, we extracted relational features from a graph with over 20,000 Facebook pages to determine which group each belonged to. The groups the pages could belong to are: 'politicians', 'government organizations', 'TV shows', and 'companies'.
After training and evaluating several models with various combinations of metrics and hyperparameters, we concluded that a classification tree algorithm (CART) is the most suitable for this machine learning task. On the other hand, using the node2vec library, we managed to train a classification algorithm using a Knn model with an accuracy of over 90%, even greater than the previously mentioned.
In the following sections, we explain how to run the Jupyter notebooks with the code and summarize what you will find in the study document.
[ES] En este proyecto realizado en conjunto con Antonio Macías hemos realizado un estudio de métricas relacionales para un conjunto de datos en forma de grafo que sirvan para entrenar a un modelo de aprendizaje automático relacional para realizar tareas de clasificación de nodos multiclase.
Usando el lenguaje de programación Python y ayudándonos de librerías como scikit-learn, hemos obtenido características relacionales de un grafo con más de 20,000 páginas de Facebook para averiguar a qué grupo pertenecía cada una de ellas. Los grupos a los que podía pertenecer las páginas eran los siguientes: politicos, organizaciones gubernamentales, programas de televisión y empresas.
Tras entrenar y evaluar varios modelos con varias combinaciones de métrica e hiperparámetros, hemos concluído que un algoritmo de árboles de clasificación (CART) es el más adecuado para esta tarea de aprendizaje automático. Por otro lado, usando la librería node2vec, conseguimos entrenar un algoritmo de clasificación usando un modelo Knn con una precisión de más del 90%, incluso mayor que la anteriormente mencionada.
En los siguientes apartados explicamos cómo ejecutar los cuadernos de Jupyter con el código y resumimos qué podrás encontrar en documento del estudio realizado.
[EN]
To start our project and experiment with the trained models, we recommend following these steps:
First, we recommend using the version of Python 3.12.8
or higher, which is the one we have used for all notebooks. Also, you must install the latest version of Jupyter notebook
to run the notebooks with the code, and Conda
, which will be necessary to run Jupyter and some libraries such as numpy. Finally, the following libraries used throughout the code will have to be installed:
[ES]
Para poner en marcha nuestro proyecto y experimentar con los modelos entrenados recomendamos seguir los siguientes pasos:
Primero, recomendamos usar la versión de Python 3.12.8
o superior, que es la que hemos usado para todos lo cuadernos. También, deberás instalar la última versión de Jupyter notebook
para ejecutar los cuadernos con el código, y Conda
que será necesario para ejecutar tanto Jupyter como algunas librerías como numpy. Por último, habrá que tener instaladas las siguienes librerías que se usan a lo largo de todo el código:
- Matplotlib (>= 3.9)
- Networx (>= 3.3)
- Numpy (>= 2.0.0)
- SciPy (>= 1.13.X)
- Scikit-learn (>=1.5)
- Pandas (>=2.2.X)
- Node2Vec (latest)
[EN] First, you must clone our repository or download the folders and place them in the desired location.
[ES] Primero, deberás clonar nuestro repositorio o descargar las carpetas y colocarlas en la ubicación deseada.
[EN]
Next, you will have to download the Facebook data used to train the models. You must download them and enter them in the folder called facebook_large
or name the folder of the data you download with the same name. In any case, the folder with the data must be at the same directory level as the cadernos
folder.
[ES]
Seguidamente, deberás descargar los datos de Facebook utilizados para entrenar a los modelos. Debes descargarlos e introducirlos en la carpeta llamada facebook_large
o nombrar la carpeta de los datos que descargues con ese mismo nombre. En cualquier caso la carpeta con los datos debe estar en el mismo nivel de directorio que la carpeta cuadernos
.
Link - Enlace: https://snap.stanford.edu/data/facebook-large-page-page-network.html
[EN]
Now you will only have to run the Jupyter notebooks in order and explore the models. You can find them all in the cuadernos
folder. In the grafos
folder you can find the representations of the graphs already generated after the execution of the first notebooks. These take a long time to execute, that's why we already provide the representations obtained after their execution.
[ES]
Ahora solo tendrás que ejecutar los cuadernos de Jupyter en orden y exploarar los modelos. Podrás encontrarlos todos en la carpeta cuadernos
. En la carpeta grafos
podrás encontrar las representaciones de los grafos ya generadas tras la ejecución de los primeros cuadernos. Estos tardan bastante en ejecutarse, por eso aportamos directamente las representaciones obtenidas tras su ejecución.
[EN] You can find a complete study in the file El-arbol-social.pdf. There, we delve into the mathematical and more technical details of the entire code, and the results obtained after the training of the models are discussed in further detail.
[ES] Podrás encontrar un estudio completo en el archivo El-arbol-social.pdf. Aquí, profundizamos en los detalles matemáticos y más tecnicos de todo el código y se comentan en detalle los resultados obtenidos tras el entrenamiento de los modelos.
Delfín Santana Rubio: https://github.com/DelfinSR
Antonio Macías Ferrera: https://github.com/antoniommff ; https://bento.me/antoniommff