Estás leyendo la publicación: Una guía para la agrupación en clústeres con OPTICS usando PyClustering
Las técnicas de clasificación automática, también conocidas como agrupación, ayudan a revelar la estructura de un conjunto de datos. PyClustering es un paquete de minería de datos de código abierto de Python y C++ que ofrece una variedad de técnicas y enfoques de agrupación, incluidas redes oscilatorias bioinspiradas. PyClustering se ocupa principalmente del análisis de conglomerados para que sea más accesible y claro para los usuarios. Este artículo cubrirá los diferentes tipos de módulos ofrecidos por pyclustering e implementará un algoritmo compatible con pyclustering. Los siguientes son los temas a tratar.
Tabla de contenido
- Acerca de PyClustering
- Módulos en PyClustering
- Acerca de la ÓPTICA
- ¿Cómo implementar OPTICS usando Pyclustering?
Comencemos hablando de PyClustering como un paquete
Acerca de PyClustering
La biblioteca PyClustering es un paquete de minería de datos para Python y C++ que se centra en el análisis de clústeres. Para garantizar una eficiencia óptima, la mitad C++ de la biblioteca se utiliza para el procesamiento de forma predeterminada. Esto es especialmente cierto para los algoritmos basados en redes oscilatorias, cuya dinámica está regulada por un conjunto de ecuaciones diferenciales. Si no se encuentra un compilador de C++, PyClustering utiliza por defecto implementaciones de Python puro de todos los núcleos. PyClustering usa el módulo NumPy para operaciones de matriz para mejorar la velocidad de las implementaciones de Python.
PyClustering proporciona soluciones de agrupación en clúster C++14 paralelas y eficientes. El enhebrado se proporciona a través de un solo hilo de operación en la mayoría de las plataformas, con la biblioteca de patrones paralelos utilizada para Windows. Debido a la estandarización de estas bibliotecas de subprocesos, PyClustering es fácil de implementar en proyectos existentes.
Los principales requisitos de Python de PyClustering son NumPy y SciPy, con MatPlotLib y Pillow necesarios para la funcionalidad de visualización. La función de visualización incluye gráficos 2D y 3D de incrustaciones de grupos, segmentos de imágenes y gráficos de procesos de sincronización en el caso de redes oscilatorias.
¿Está buscando un repositorio completo de bibliotecas de Python utilizadas en ciencia de datos, echa un vistazo aquí.
Módulos en Pyclustering
Hay cinco módulos en clústeres de pyclustering, n-net, g-color y contenedores.
Algoritmos de agrupamiento
Los algoritmos y métodos se encuentran en el módulo de Python “pyclustering.cluster”. Hay una lista de algoritmos de agrupamiento compatibles con Pyclustering.
- aglomerativo
- ESTALLIDO
- ABEDUL
- BSAS
- CLARANS
- CAMARILLA
- CURAR
- DBSCAN
- Codo
- EMA
- GA – Algoritmo Genético
- HSyncNet
- K-medias y K-medias++
- K-medianas y K-medoides
- MBSAS
- ÓPTICA
- ROCA
- Silueta
- SOM-SC
- SyncNet y Sync-SOM
- TTSAS
- Medias X
Redes oscilatorias y redes neuronales
Las redes neuronales oscilatorias (ONN) y las redes neuronales (NN) se encuentran en el módulo de Python “pyclustering.nnet”. Hay una lista de redes compatibles con Pyclustering.
Una red neuronal oscilatoria (ONN) es un tipo de red neuronal artificial en la que las neuronas están conectadas a osciladores. Las redes neuronales oscilatorias están inspiradas en la ocurrencia de oscilaciones neuronales en el cerebro y están estrechamente relacionadas con el modelo de Kuramoto. Para detectar imágenes, se han desarrollado redes neuronales oscilatorias.
- Red neuronal caótica (CNN)
- Red neuronal acoplada a pulsos (PCNN)
- Mapa autoorganizado (SOM)
- Red neuronal oscilatoria basada en el modelo de Kuramoto (Sync)
- Red neuronal oscilatoria para el reconocimiento de patrones (SyncPR)
- Red neuronal oscilatoria para segmentación de imágenes (SyncSegm)
- Red neuronal oscilatoria basada en la ecuación de Landau-Stuart y el modelo de Kuramoto (fSync)
- Red neuronal oscilatoria basada en el modelo de Hodgkin-Huxley (HHN)
- Red oscilatoria de histéresis
- Red oscilatoria inhibidora global excitatoria local (LEGION)
Algoritmos de coloración de gráficos
Los algoritmos de coloración de gráficos se encuentran en el módulo de Python “pyclustering.gcolor”. La coloración de gráficos es un subconjunto del etiquetado de gráficos; implica la asignación de etiquetas a los nodos de un gráfico sujeto a criterios específicos. Es un método para colorear los vértices de un gráfico de modo que no haya dos vértices vecinos del mismo color. Se utilizan tres tipos diferentes de técnicas.
- DSatur
- Histéresis
- GColorSync
Contenedores
Hay dos tipos de contenedores utilizados por Pycluster para construir un árbol en un espacio n-dimensional para buscar puntos de datos para la agrupación. En python, está presente en un “pyclustering.container”:
Acerca de la ÓPTICA
Muchos conjuntos de datos reales tienen el rasgo fundamental de que su estructura de clúster subyacente no puede describirse mediante parámetros de densidad global. Para identificar grupos en varias ubicaciones del espacio de datos, se pueden requerir densidades locales muy diferentes. Un enfoque de agrupamiento basado en la densidad es Puntos de pedido para identificar la estructura de agrupamiento (OPTICS).
El principio esencial del agrupamiento basado en la densidad es que la vecindad de un determinado radio debe contener al menos un número mínimo de objetos (MinPts), es decir, la cardinalidad de la vecindad debe superar un umbral. OPTICS genera un pedido de base de datos, almacenando la distancia del núcleo y una distancia de accesibilidad razonable para cada elemento.
¿Cómo funciona esto?
OPTICS funciona de manera similar a DBSCAN; comenzará con la recuperación de la vecindad de distancia máxima del objeto pasado desde el bucle principal OPTICS, establece su distancia de alcance en UNDEFINED y determina su distancia central.
Luego se verifica el objeto para el atributo de objeto central, y si no es un objeto central a la distancia de generación, el control simplemente se devuelve al bucle principal OPTICS, que elige el siguiente objeto sin procesar en la base de datos. De lo contrario, si el elemento es un objeto central a una distancia menor que la distancia máxima, recopila iterativamente objetos alcanzables por densidad directamente con respecto a la distancia máxima y una cantidad mínima de objetos.
Los objetos a los que se puede acceder directamente por densidad desde un objeto central actual se agregan a la lista de semillas de OrderSeeds para el crecimiento futuro. Los objetos de OrderSeeds se organizan por distancia de accesibilidad al objeto central más cercano desde el que han sido directamente accesibles por densidad.
En cada ciclo, se elige el objeto actual en la lista de semillas con la distancia de alcance más corta. Se determinan la distancia máxima de vecindad y núcleo de este objeto. Luego, el elemento simplemente se guarda junto con su distancia central y la distancia de accesibilidad actual. Si el objeto existente es un objeto principal, se pueden agregar más candidatos de expansión a la lista inicial.
¿En qué se diferencia OPTICS de DBSCAN?
- El enfoque de agrupación en clústeres de OPTICS consume más memoria, ya que utiliza una cola de prioridad (Min Heap) para seleccionar el siguiente punto de datos en términos de distancia de alcance que está más cerca del punto que se está procesando actualmente. También necesita mayores recursos informáticos, ya que las consultas de vecino más cercano en DBSCAN son más complejas que las consultas de radio.
- El algoritmo de agrupamiento OPTICS no requiere el parámetro épsilon y simplemente se incluye en el pseudocódigo anterior para disminuir el tiempo requerido. Como resultado, se simplifica el proceso analítico de ajuste de parámetros.
- OPTICS no divide los datos de entrada en grupos. Simplemente genera un gráfico de distancia de accesibilidad, y depende del codificador analizarlo y agrupar los puntos en consecuencia.
¿Cómo implementar OPTICS usando Pyclustering?
Instalemos Pyclustering para comenzar con los algoritmos OPTICS.
! pip3 instalar pyclustering
Importar bibliotecas necesarias
importar aleatorio de pyclustering.cluster importar cluster_visualizer,cluster_visualizer_multidim de pyclustering.cluster.optics importar óptica, ordering_analyser, ordering_visualizer de pyclustering.utils importar read_sample, timedcall de pyclustering.samples.definitions importar SIMPLE_SAMPLES,FCPS_SAMPLES,FAMOUS_SAMPLES
Usando los datos de muestra proporcionados por el propio Pyclustering y realizando el algoritmo OPTICS para agrupar los datos sin procesar y analizar los resultados.
muestra = read_sample (fcps_samples.sample_two_diamonds) radius_cluster = 0.2 num_neighbors = 10 optics_model = optics (muestra, radius_cluster, num_neighbors) optics_model.process () clusters = optics_model.get_cluster tics_model.get_ordering ()
Para el algoritmo es necesario definir el radio del clúster y el número de vecinos. Los clusters formados por el algoritmo OPTICS se almacenan utilizando “.get_clusters”. De manera similar, se extrae información sobre el ruido del conjunto de datos de entrada y el orden de agrupación. El orden de agrupación de conjuntos de datos contiene información sobre la estructura de agrupación interna siguiendo el radio de conectividad.
Analizando los clusters formados con la muestra. Trazar el histograma del número de conglomerados formados para comprobar la distribución y dispersión de los puntos de datos en cada conglomerado.
plots = cluster_visualizer() plots.append_clusters(clusters, sample) plots.show() analyser_cluster = ordering_analyser(ordering) ordering_visualizer.show_ordering_diagram(analyser_cluster, 2)
Como podemos observar que el conglomerado es aproximadamente igual a la muestra. Los grupos también mantienen la forma del diamante al igual que la muestra. Como se mencionó anteriormente, el radio del clúster es 0,2 y en la representación podemos observar que el radio del clúster es aproximadamente 0,2. Hay un total de 2 clusters formados por el algoritmo y por la distribución se podría decir que están perfectamente formados.
Implementemos esto en datos multidimensionales ya que los datos anteriores eran bidimensionales. Todo en el código sería igual excepto la parte de visualización. Como se trata de datos multidimensionales, necesito usar “cluster_visualizer_multidim()” en lugar de “cluster_visualizer()”.
muestra = leer_muestra(FAMOUS_SAMPLES.SAMPLE_IRIS) radio_cluster = 0.5 num_neighbors = 10 optics_model = optics(sample, radius_cluster, num_neighbors) optics_model.process() clusters = optics_model.get_clusters() ruido = optics_model.get_noise() ordering = optics_model.get_ordering() plots = cluster_visualizer_multidim() plots.append_clusters(clusters, sample) plots.show() analyser_cluster = ordering_analyser(ordering) ordering_visualizer.show_ordering_diagram(analyser_cluster, 3)
En la representación anterior, hay seis parcelas de grupos que representan seis dimensiones diferentes de los datos. También se puede visualizar una sola dimensión mediante el siguiente código.
plots = cluster_visualizer_multidim() plots.append_clusters(clusters, sample) plots.show(pair_filter=[[0,3]])
Conclusión
PyClustering es un paquete de minería de datos que admite una gran lista de algoritmos de agrupación que lo hacen flexible para operar. Dado que utiliza Numpy para operaciones matemáticas y el procesamiento paralelo hace que el procesamiento sea más rápido. Con este artículo, entendimos el paquete y los módulos que ofrece el paquete con la implementación de OPTICS en datos bidimensionales y multidimensionales.