El dataset se puede obtener de kaggle.com/datasets/nikhileswarkomati/suicide-watch. Este dataset tiene que ser añadido a la carpeta /Datasets. Como prueba, se deja un archivo de 10000 instancias en la carpeta /Datasets.
La elección del tamaño del dataset se puede hacer teniendo en cuenta los siguientes tiempos:
Requisitos:
- Tener
python3(vesión 3.10.13) instalado - Tener
pipinstalado - Tener
gitinstalado
- Clonar el repositorio:
git clone https://github.com/Maits27/Density_Based_Clustering.git- Creamos un entorno virtual (ejemplo con venv) y entramos en él:
python -m venv .env
source .env/bin/activate- Instalar las dependencias:
cd ./Density_Based_Clustering
pip install -r requirements.txt- Instalamos el modelo necesario para tokenizar:
python -m spacy download en_core_web_sm-
Descargar dataset de kaggle.com/datasets/nikhileswarkomati/suicide-watch y añadirlo a la carpeta
/Datasetsdel proyecto. -
Ejecutar el archivo
./src/main.py:
cd ./src/
python main.py <numInstances> <vectorsDim> <vectorType> <algorithm> <epsilon> <minPts>Donde:
numInstances: número de instancias a utilizar de entrenamiento. Tiene que ser menor al número de instancias totales del dataset original.vectorsDim: número de dimensiones a utilizar. Indicar cualquier número si se usabertenvectorTypevectorType:bertpara usar Transformers odoc2vecpara usar Doc2Vecalgorithm:ourDensityAlgorithmpara usar nuestro algoritmo ydbscanpara usar el de la libreríasklearn.epsilon: valor deepsilonpara el algortimo de Clustering.minPts: valor deminPtspara el algoritmo de Clustering.
Recomendamos utilizar los siguientes valores que dan buenos resultados para hacer pruebas:
python main.py 10000 768 bert ourDensityAlgorithm 2.567 12python main.py 10000 768 bert dbscan 0.0071 5Alternativamente, se incluye main.ipynb para poder ejecutar el proceso paso a paso.
Se pide como requisito tener Docker instalado.
- Descargar la imagen desde DockerHub:
docker pull sergiom8m8/density_clustering- Ejecutar imagen:
docker run -it sergiom8m8/density_clustering <numInstances> <vectorsDim> <vectorType> <algorithm> <epsilon> <minPts>Los valores que pueden tomar los campos se explican en la sección 1.2.2.
El proceso principal está dividido en diferentes módulos que siguen el siguiente diagrama:
Modulo para reducir el dataset original. Se pueden indicar los valores para un dataset train y un datset test:
python reduceDatset.py <datasetPath> <numTrainInstances> <numTestInstances> <outPath> Donde:
datasetPath: ruta del dataset original. Preferiblemente en./Datasets.numTrainInstances: número de instancias paratrain.numTestInstances: número de instancias paratest. La suma del número de instancias paratrainy el número de instancias paratestno debe superar el número de instancias del dataset original.outPath: ruta para escribir los datasettrainytest. Preferiblemente en./Datasets.
Este módulo ofrece 2 tipos de tokenizaciones:
- Tokenización con limpieza:
- Quita los emojis
- Quita las palabras 'filler' y 'filer'
- Quita las palabras de más de 3 tokens
- Quita los stopwords
- Quita todos los carácteres especiales
- Lematiza los tokens
- Pasa a minúscula todos los tokens
- Tokenización sin limpieza
Este módulo ofrece 2 tipos de vectorizaciones:
- Doc2Vec
- Vectorización mediante Transformers
Este módulo ofrece 2 tipos de algoritmo:
- Nuestro algoritmo de densidad
- Algoritmo de DBSCAN implementado por SKLEARN
Este módulo ofrece varios tipos de evaluación:
- Métricas internas:
- Rand Index
- Jaccard Score
- Fowlkes Mallows Score
- Silhouette
- Pair-Wise-Evaluation entre dos modelos de clustering
- Class-to-cluster evaluation
- Generación de WordClouds
- Conseguir muestras de los clusters
El de inferencia utiliza los módulos del siguiente diagrama:
Es el módulo con las funciones y utilidades para realizar la inferencia, es decir, clasificar instancias nuevas a clusters previamente calculados.
Son módulos auxiliares utilizados por otros módulos para tareas concretas.
Es el módulo con las herramientas para optimizar los parámetros epsilon y minPts
Contiene las utilidades para representación visual de los datos:
- Distribución de la clase
- Distribución de pares de instancias
- Visualización PCA
- Visualización t-SNE
Contiene las herramientas para guardar y cargar archivos con tokens, embeddings, distancias, clusters y resultados de ejecuciones de optimización.


