Identificación de lo desconocido con métricas de agrupamiento
Publicado: 2022-09-08La agrupación en clústeres es un método de aprendizaje automático no supervisado para dividir datos dados en grupos basándose únicamente en las características de cada muestra. La clasificación de datos en grupos puede ayudar a identificar similitudes desconocidas entre muestras o revelar valores atípicos en el conjunto de datos. En el mundo real, la agrupación tiene importancia en diversos campos, desde el marketing hasta la biología: las aplicaciones de agrupación incluyen la segmentación del mercado, el análisis de redes sociales y el diagnóstico por imágenes médicas.
Debido a que este proceso no está supervisado, se pueden formar múltiples resultados de agrupación en torno a diferentes características. Por ejemplo, imagine que tiene un conjunto de datos compuesto por varias imágenes de pantalones rojos, pantalones negros, camisas rojas y camisas negras. Un algoritmo puede encontrar grupos basados en la forma de la ropa, mientras que otro puede crear grupos basados en el color.
Al analizar un conjunto de datos, necesitamos una forma de medir con precisión el rendimiento de diferentes algoritmos de agrupamiento; es posible que deseemos contrastar las soluciones de dos algoritmos, o ver qué tan cerca está el resultado de un agrupamiento de una solución esperada. En este artículo, exploraremos algunas de las métricas que se pueden usar para comparar diferentes resultados de agrupamiento obtenidos a partir de los mismos datos.
Comprender la agrupación en clústeres: un breve ejemplo
Definamos un conjunto de datos de ejemplo que usaremos para explicar varios conceptos de métricas de agrupación y examinar qué tipos de agrupaciones podría producir.
Primero, algunas notaciones y términos comunes:
- $D$: el conjunto de datos
- $A$, $B$: dos grupos que son subconjuntos de nuestro conjunto de datos
- $C$: el agrupamiento de verdad de campo de $D$ con el que compararemos otro agrupamiento
- El agrupamiento $C$ tiene $K$ clústeres, $C = {C_1, …, C_k}$
- $C'$: una segunda agrupación de $D$
- El agrupamiento $C'$ tiene $K'$ clústeres, $C' = {C^\prime_1, …, C^\prime_{k^\prime}}$
Los resultados de la agrupación pueden variar en función no solo de las funciones de clasificación, sino también del número total de grupos. El resultado depende del algoritmo, su sensibilidad a pequeñas perturbaciones, los parámetros del modelo y las características de los datos. Usando nuestro conjunto de datos mencionado anteriormente de pantalones y camisas negros y rojos, hay una variedad de resultados de agrupación que se pueden producir a partir de diferentes algoritmos.
Para distinguir entre el agrupamiento general $C$ y nuestros agrupamientos de ejemplo, usaremos $c$ en minúsculas para describir nuestros agrupamientos de ejemplo:
- $c$, con grupos basados en la forma: $c = {c_1, c_2}$, donde $c_1$ representa pantalones y $c_2$ representa camisas
- $c'$, con grupos basados en el color: $c' = {c'_1, c'_2}$, donde $c'_1$ representa ropa roja y $c'_2$ representa ropa negra
- $c''$, con grupos basados en forma y color: $c'' = {{c^{\prime \prime}}_1, {c^{\prime \prime}}_2, {c^{\prime \prime}}_3, {c^{\prime \prime}}_4}$, donde ${c^{\prime \prime}}_1$ representa pantalones rojos, ${c^{\prime \prime}}_2 $ representa pantalones negros, ${c^{\prime \prime}}_3$ representa camisas rojas y ${c^{\prime \prime}}_4$ representa camisas negras
Las agrupaciones adicionales pueden incluir más de cuatro agrupaciones en función de diferentes características, como si una camisa es sin mangas o con mangas.
Como se ve en nuestro ejemplo, un método de agrupamiento divide todas las muestras en un conjunto de datos en subconjuntos disjuntos no vacíos. En el clúster $c$, no hay ninguna imagen que pertenezca tanto al subconjunto de pantalones como al de camisa: $c_1 \cap c_2 = \emptyset$. Este concepto puede ampliarse; no hay dos subconjuntos de cualquier grupo que tengan la misma muestra.
Una descripción general de las métricas de comparación de agrupamiento
La mayoría de los criterios para comparar agrupaciones se pueden describir utilizando la matriz de confusión del par $C, C'$. La matriz de confusión sería una matriz $K \times K'$ cuyo elemento $kk'$ésimo (el elemento en la fila $k$ésima y la columna $k'$ésima) es el número de muestras en la intersección de los conglomerados $ C_k$ de $C$ y $C'_{k'}$ de $C'$:
\[n_{kk'} = |C_k \cap C'_{k'}|\]Desglosaremos esto usando nuestro ejemplo simplificado de pantalones y camisas negros y rojos, suponiendo que el conjunto de datos $D$ tiene 100 pantalones rojos, 200 pantalones negros, 200 camisas rojas y 300 camisas negras. Examinemos la matriz de confusión de $c$ y $c''$:
Como $K = 2$ y $K'' = 4$, esta es una matriz de $2 \times 4$. Elijamos $k = 2$ y $k'' = 3$. Vemos que el elemento $n_{kk'} = n_{23} = 200$. Esto significa que la intersección de $c_2$ (camisas) y ${c^{\prime\prime}}_3$ (camisas rojas) es 200, lo cual es correcto ya que $c_2 \cap {c^{\prime\prime} }_3$ sería simplemente el conjunto de camisas rojas.
Las métricas de agrupación en clústeres se pueden categorizar en términos generales en tres grupos según el método de comparación de clústeres subyacente:
En este artículo, solo mencionamos algunas de las muchas métricas disponibles, pero nuestros ejemplos servirán para ayudar a definir los tres grupos de métricas de agrupación.
conteo de pares
El conteo de pares requiere examinar todos los pares de muestras y luego contar los pares donde las agrupaciones concuerdan y no están de acuerdo. Cada par de muestras puede pertenecer a uno de los cuatro conjuntos, donde los recuentos de elementos del conjunto ($N_{ij}$) se obtienen de la matriz de confusión:
- $S_{11}$, con elementos $N_{11}$: los elementos del par están en el mismo grupo bajo $C$ y $C'$
- Un par de dos camisas rojas caería bajo $S_{11}$ al comparar $c$ y $c''$
- $S_{00}$, con elementos $N_{00}$: los elementos del par están en diferentes grupos bajo $C$ y $C'$
- Un par de camisa roja y pantalones negros caería en $S_{00}$ al comparar $c$ y $c''$
- $S_{10}$, con elementos $N_{10}$: los elementos del par están en el mismo grupo en $C$ y grupos diferentes en $C'$
- Un par de camisa roja y una camisa negra caerían en $S_{10}$ al comparar $c$ y $c''$
- $S_{01}$, con elementos $N_{01}$: los elementos del par están en diferentes clústeres en $C$ y el mismo clúster en $C'$
- $S_{01}$ no tiene elementos ($N_{01} = 0$) al comparar $c$ y $c''$
El índice Rand se define como $(N_{00} + N_{11})/(n(n-1)/2)$, donde $n$ representa el número de muestras; también se puede leer como (número de pares tratados de manera similar)/(número total de pares). Aunque en teoría su valor oscila entre 0 y 1, en la práctica su rango suele ser mucho más estrecho. Un valor más alto significa más similitud entre los agrupamientos. (Un índice de Rand de 1 representaría una combinación perfecta donde dos agrupaciones tienen agrupaciones idénticas).
Una limitación del índice de Rand es su comportamiento cuando el número de conglomerados aumenta para acercarse al número de elementos; en este caso, converge hacia 1, lo que crea desafíos para medir con precisión la similitud de los agrupamientos. Se han introducido varias versiones mejoradas o modificadas del índice Rand para abordar este problema. Una variación es el índice de Rand ajustado ; sin embargo, asume que dos agrupamientos se extraen aleatoriamente con un número fijo de agrupamientos y elementos de agrupamiento.
Teoría de la información
Estas métricas se basan en nociones genéricas de la teoría de la información. Discutiremos dos de ellos: la entropía y la información mutua (MI).
La entropía describe cuánta información hay en un agrupamiento. Si la entropía asociada con un agrupamiento es 0, entonces no hay incertidumbre sobre el conglomerado de una muestra seleccionada al azar, lo cual es cierto cuando solo hay un conglomerado.
MI describe la cantidad de información que proporciona un agrupamiento sobre el otro. MI puede indicar en qué medida el conocimiento del conglomerado de una muestra en $C$ reduce la incertidumbre sobre el conglomerado de la muestra en $C'$.
La información mutua normalizada es MI que está normalizada por la media geométrica o aritmética de las entropías de las agrupaciones. El MI estándar no está limitado por un valor constante, por lo que la información mutua normalizada proporciona una métrica de agrupamiento más interpretable.
Otra métrica popular en esta categoría es la variación de la información (VI) que depende tanto de la entropía como del MI de las agrupaciones. Sea $H(C)$ la entropía de un agrupamiento y $I(C, C')$ el MI entre dos agrupamientos. El VI entre dos agrupaciones se puede definir como $VI(C,C') = H(C)+H(C')-2I(C,C')$. Un VI de 0 representa una combinación perfecta entre dos agrupaciones.
Establecer superposición
Establecer métricas de superposición implica determinar la mejor coincidencia para los clústeres en $C$ con los clústeres en $C'$ según la superposición máxima entre los clústeres. Para todas las métricas de esta categoría, un 1 significa que las agrupaciones son idénticas.
La medida de coincidencia máxima explora la matriz de confusión en orden decreciente y coincide primero con la entrada más grande de la matriz de confusión. Luego elimina los clústeres coincidentes y repite el proceso secuencialmente hasta que se agotan los clústeres.
La medida F es otra métrica de superposición de conjuntos. A diferencia de la medida de coincidencia máxima, la medida F se usa con frecuencia para comparar un agrupamiento con una solución óptima, en lugar de comparar dos agrupamientos.
Aplicación de métricas de agrupamiento con medida F
Debido al uso común de la medida F en modelos de aprendizaje automático y aplicaciones importantes como los motores de búsqueda, exploraremos la medida F con más detalle con un ejemplo.
Definición de medida F
Supongamos que $C$ es nuestra solución básica u óptima. Para cualquier grupo $k$th en $C$, donde $k \in [1, K]$, calcularemos una medida F individual con cada grupo en el resultado de agrupación $C'$. Esta medida F individual indica qué tan bien el conglomerado $C^\prime_{k'}$ describe al conglomerado $C_k$ y se puede determinar a través de la precisión y la recuperación (dos métricas de evaluación del modelo) para estos conglomerados. Definamos $I_{kk'}$ como la intersección de elementos en el grupo $k$ésimo de $C$ y el grupo $k'$ésimo de $C'$, y $\lvert C_k \rvert$ como el número de elementos en el grupo $k$th.
Precisión $p = \frac{I_{kk'}}{\lvert C'_{k'} \rvert}$
Recordar $r = \frac{I_{kk'}}{\lvert C_{k} \rvert}$
Luego, la medida F individual del grupo $k$th y $k'$th se puede calcular como la media armónica de la precisión y recuperación de estos grupos:
\[F_{kk'} = \frac{2rp}{r+p} = \frac{2I_{kk'}}{|C_k|+|C'_{k'}|}\]Ahora, para comparar $C$ y $C'$, veamos la medida F general. Primero, crearemos una matriz similar a una tabla de contingencia cuyos valores son las medidas F individuales de los conglomerados. Supongamos que hemos mapeado los grupos de $C$ como filas de una tabla y los grupos de $C'$ como columnas, con valores de tabla correspondientes a medidas F individuales. Identifique el par de conglomerados con la máxima medida F individual y elimine la fila y la columna correspondientes a estos conglomerados. Repita esto hasta que se agoten los racimos. Finalmente, podemos definir la medida F general:
\[F(C, C') = \frac{1}{n} \sum_{i=1}^K n_imax(F(C_i, C'_j)) \forall j \in {1, K'}\ ]Como puede ver, la medida F general es la suma ponderada de nuestras medidas F individuales máximas para los grupos.
Configuración de datos y resultados esperados
Cualquier cuaderno de Python adecuado para el aprendizaje automático, como un cuaderno de Jupyter, funcionará como nuestro entorno. Antes de comenzar, es posible que desee examinar el archivo README de mi repositorio de GitHub, el archivo de ejemplo extendido readme_help_example.ipynb
y el archivo requirements.txt
(las bibliotecas requeridas).
Usaremos los datos de muestra en el repositorio de GitHub, que se compone de artículos de noticias. Los datos se organizan con información que incluye category
, headline
, date
y short_description
:
categoría | titular | fecha | Breve descripción | |
---|---|---|---|---|
49999 | EL POSTE MUNDIAL | Las muertes por la guerra contra las drogas suben a 1.800 en Filipinas | 2016-08-22 | Solo en las últimas siete semanas. |
49966 | GUSTO | Sí, puedes hacer un verdadero café al estilo cubano en casa | 2016-08-22 | Se trata de la crema. |
49965 | ESTILO | El protector solar con aroma a pollo frito de KFC mantendrá... | 2016-08-22 | Para cuando quieras hacerte oler el dedo... |
49964 | POLÍTICA | HUFFPOLLSTER: Los demócratas tienen una sólida oportunidad de... | 2016-08-22 | El modelo basado en encuestas de HuffPost indica que el Senado R... |
Podemos usar pandas para leer, analizar y manipular los datos. Ordenaremos los datos por fecha y seleccionaremos una pequeña muestra (10 000 titulares de noticias) para nuestra demostración, ya que el conjunto completo de datos es grande:
import pandas as pd df = pd.read_json("./sample_data/example_news_data.json", lines=True) df.sort_values(by='date', inplace=True) df = df[:10000] len(df['category'].unique())
Al ejecutarlo, debería ver que el portátil genera el resultado 30, ya que hay 30 categorías en esta muestra de datos. También puede ejecutar df.head(4)
para ver cómo se almacenan los datos. (Debe coincidir con la tabla que se muestra en esta sección).
Optimización de funciones de agrupamiento
Antes de aplicar el agrupamiento, primero debemos preprocesar el texto para reducir las características redundantes de nuestro modelo, que incluyen:
- Actualizar el texto para tener un caso uniforme.
- Eliminación de caracteres numéricos o especiales.
- Realización de la lematización.
- Eliminación de palabras vacías.
import re import nltk from nltk.corpus import stopwords from nltk.stem import WordNetLemmatizer wordnet_lemmatizer = WordNetLemmatizer() nltk.download('stopwords') stop_words = stopwords.words('english') nltk.download('wordnet') nltk.download('omw-1.4') def preprocess(text: str) -> str: text = text.lower() text = re.sub('[^az]',' ',text) text = re.sub('\s+', ' ', text) text = text.split(" ") words = [wordnet_lemmatizer.lemmatize(word, 'v') for word in text if word not in stop_words] return " ".join(words) df['processed_input'] = df['headline'].apply(preprocess)
Los titulares preprocesados resultantes se muestran como processed_input
, que puede observar ejecutando de nuevo df.head(4)
:
categoría | titular | fecha | Breve descripción | entrada_procesada | |
---|---|---|---|---|---|
49999 | EL POSTE MUNDIAL | Las muertes por la guerra contra las drogas suben a 1.800 en Filipinas | 2016-08-22 | Solo en las últimas siete semanas. | Las muertes por la guerra contra las drogas suben en Filipinas |
49966 | GUSTO | Sí, puedes hacer un verdadero café al estilo cubano en casa | 2016-08-22 | Se trata de la crema. | Sí, haz un verdadero café al estilo cubano en casa. |
49965 | ESTILO | El protector solar con aroma a pollo frito de KFC mantendrá... | 2016-08-22 | Para cuando quieras hacerte oler el dedo... | El protector solar con aroma a pollo frito de KFC mantiene la piel … |
49964 | POLÍTICA | HUFFPOLLSTER: Los demócratas tienen una sólida oportunidad de... | 2016-08-22 | El modelo basado en encuestas de HuffPost indica que el Senado R... | Huffpollster demócratas sólida oportunidad de retomar el Senado |
Ahora, necesitamos representar cada título como un vector numérico para poder aplicarle cualquier modelo de aprendizaje automático. Hay varias técnicas de extracción de características para lograr esto; usaremos TF-IDF (frecuencia de término-frecuencia de documento inversa). Esta técnica reduce el efecto de las palabras que aparecen con alta frecuencia en los documentos (en nuestro ejemplo, los titulares de las noticias), ya que estas claramente no deberían ser las características decisivas para agruparlos o clasificarlos.
from sklearn.cluster import AgglomerativeClustering, KMeans from sklearn.feature_extraction.text import TfidfVectorizer vectorizer = TfidfVectorizer(max_features=300, tokenizer=lambda x: x.split(' ')) tfidf_mat = vectorizer.fit_transform(df['processed_input']) X = tfidf_mat.todense() X[X==0]=0.00001
A continuación, probaremos nuestro primer método de agrupamiento, el agrupamiento aglomerativo, en estos vectores de características.
Método de agrupamiento 1: agrupamiento aglomerativo
Considerando las categorías de noticias dadas como la solución óptima, comparemos estos resultados con los de la agrupación aglomerativa (con el número deseado de agrupaciones como 30 ya que hay 30 categorías en el conjunto de datos):
clusters_agg = AgglomerativeClustering(n_clusters=30).fit_predict(X) df['class_prd'] = clusters_agg.astype(int)
Identificaremos los grupos resultantes por etiquetas de números enteros; a los titulares que pertenecen al mismo grupo se les asigna la misma etiqueta de número entero. La función cluster_measure
del módulo compare_clusters
de nuestro repositorio de GitHub devuelve la medida F agregada y la cantidad de clústeres que coinciden perfectamente para que podamos ver qué tan preciso fue nuestro resultado de agrupación:
from clustering.compare_clusters import cluster_measure # 'cluster_measure` requires given text categories to be in the column 'text_category` df['text_category'] = df['category'] res_df, fmeasure_aggregate, true_matches = cluster_measure(df, gt_column='class_gt') fmeasure_aggregate, len(true_matches) # Outputs: (0.19858339749319176, 0)
Al comparar estos resultados de conglomerados con la solución óptima, obtenemos una medida F baja de 0,198 y 0 conglomerados que coinciden con los grupos de clases reales, lo que representa que los conglomerados aglomerados no se alinean con las categorías principales que elegimos. Veamos un clúster en el resultado para ver cómo se ve.
df[df['class_prd'] == 0]['category'].value_counts()
Al examinar los resultados, vemos que este grupo contiene titulares de todas las categorías:
POLITICS 1268 ENTERTAINMENT 712 THE WORLDPOST 373 HEALTHY LIVING 272 QUEER VOICES 251 PARENTS 212 BLACK VOICES 211 ... FIFTY 24 EDUCATION 23 COLLEGE 14 ARTS 13
Por lo tanto, nuestra medida F baja tiene sentido considerando que los grupos de nuestro resultado no se alinean con la solución óptima. Sin embargo, es importante recordar que la clasificación de categoría dada que elegimos refleja solo una posible división del conjunto de datos. Una medida F baja aquí no implica que el resultado de la agrupación sea incorrecto, sino que el resultado de la agrupación no coincidió con nuestro método deseado de dividir los datos.
Método de agrupamiento 2: K-medias
Probemos otro algoritmo de agrupamiento popular en el mismo conjunto de datos: agrupamiento k-means. Crearemos un nuevo marco de datos y usaremos la función cluster_measure
nuevamente:
kmeans = KMeans(n_clusters=30, random_state=0).fit(X) df2 = df.copy() df2['class_prd'] = kmeans.predict(X).astype(int) res_df, fmeasure_aggregate, true_matches = cluster_measure(df2) fmeasure_aggregate, len(true_matches) # Outputs: (0.18332960871141976, 0)
Al igual que el resultado del agrupamiento aglomerativo, nuestro resultado del agrupamiento de k-medias ha formado grupos que son diferentes a nuestras categorías dadas: tiene una medida F de 0,18 en comparación con la solución óptima. Dado que los dos resultados de agrupamiento tienen medidas F similares, sería interesante compararlos entre sí. Ya tenemos las agrupaciones, por lo que solo necesitamos calcular la medida F. Primero, traeremos ambos resultados en una columna, con class_gt
teniendo el resultado de agrupamiento aglomerativo, y class_prd
teniendo el resultado de agrupamiento k-means:
df1 = df2.copy() df1['class_gt'] = df['class_prd'] res_df, fmeasure_aggregate, true_matches = cluster_measure(df1, gt_column='class_gt') fmeasure_aggregate, len(true_matches) # Outputs: (0.4030316435020922, 0)
Con una medida F más alta de 0,4, podemos observar que las agrupaciones de los dos algoritmos son más similares entre sí que a la solución óptima.
Descubra más sobre los resultados mejorados de la agrupación en clústeres
Una comprensión de las métricas de comparación de agrupamiento disponibles ampliará el análisis de su modelo de aprendizaje automático. Hemos visto la métrica de agrupación en clústeres de la medida F en acción y le brindamos los conceptos básicos que necesita para aplicar estos aprendizajes a su próximo resultado de agrupación. Para aprender aún más, aquí están mis mejores opciones para leer más:
- Comparación de agrupaciones: una descripción general de Dorothea Wagner y Silke Wagner
- Comparación de agrupaciones: una distancia basada en información por Marina Meila
- Medidas teóricas de la información para la comparación de agrupamientos: variantes, propiedades, normalización y corrección por probabilidad por Nguyen Xuan Vinh, Julien Epps y James Bailey
Lecturas adicionales en el blog de ingeniería de Toptal:
- Grafique la ciencia de datos con Python/NetworkX
- Clasificación de imágenes semisupervisadas con datos sin etiquetar
- Incorporaciones en el aprendizaje automático: hacer que los datos complejos sean simples
El blog de ingeniería de Toptal agradece a Luis Bronchal por revisar los ejemplos de código presentados en este artículo.