Estás leyendo la publicación: Un tutorial sobre varias métricas de evaluación de agrupamiento
La agrupación es el proceso de originar grupos de puntos de datos en función de su uniformidad y diversidad. Generalmente se usa para el aprendizaje no supervisado donde no hay una variable dependiente. Como no hay una variable dependiente en el aprendizaje no supervisado, no pudimos usar ninguna métrica de rendimiento de regresión o clasificación en esto porque todos necesitan una variable dependiente para comparar las predicciones. En este artículo, aprenderemos sobre diferentes métricas de rendimiento para la agrupación e implementación de las mismas. Los puntos principales que se tratarán en este artículo se enumeran a continuación.
Tabla de contenido
- ¿Por qué no métricas de evaluación de clasificación?
- Puntuación de la silueta
- Índice Calinski Harabaz
- Índice de Davies Bouldin
- Descripción de los datos
- ¿Cómo utilizar las métricas de evaluación de agrupamiento?
Primero comprendamos por qué las métricas de evaluación estándar no se pueden usar en la agrupación.
¿Por qué no métricas de evaluación de clasificación?
Dado que en cada métrica de evaluación de clasificación se trata de una matriz de confusión o pérdida de registro, existe la necesidad de una variable dependiente o variable objetivo. Como estas técnicas de evaluación, calculan las métricas en función de los valores observados y predichos. Esta es la razón por la que no se puede utilizar ninguna métrica de evaluación de clasificación para evaluar el rendimiento de ningún algoritmo de agrupación.
Las métricas de evaluación que no requieren ninguna etiqueta de verdad sobre el terreno para calcular la eficiencia del algoritmo de agrupamiento podrían usarse para el cálculo de la evaluación del rendimiento. Hay tres métricas de evaluación comúnmente utilizadas: puntuación de silueta, índice de Calinski Harabaz, índice de Davies-Bouldin.
¿Está buscando un repositorio completo de bibliotecas de Python utilizadas en ciencia de datos? echa un vistazo aquí.
Puntuación de la silueta
Para estudiar la distancia de separación entre los clusters formados por el algoritmo se podría utilizar el análisis de silueta. La distancia entre el clúster se puede calcular mediante diferentes tipos de métricas de distancia (Euclidiana, Manhattan, Minkowski, Hamming). La puntuación de silueta devuelve el promedio coeficiente de silueta aplicado en todas las muestras.
El coeficiente de silueta se calcula utilizando la media de la distancia del intragrupo y el grupo más cercano para todas las muestras. El coeficiente de silueta oscila entre [-1,1]. Cuanto más altos sean los coeficientes de silueta (cuanto más cerca de +1), mayor será la separación entre los grupos. Si el valor es 0, indica que la muestra está en o muy cerca del límite de decisión entre dos conglomerados vecinos, mientras que un valor negativo indica que esas muestras podrían haber sido asignadas al conglomerado equivocado.
La fórmula es la siguiente:
(nc-ic)/max(ic,nc)
dónde,
ic = media de la distancia intra-cluster
nc = media de la distancia al cúmulo más cercano
Índice Calinski Harabaz
El índice de Calinski Harabaz se basa en el principio de la relación de varianza. Esta relación se calcula entre dos parámetros de difusión dentro del grupo y entre la dispersión del grupo. Cuanto mayor sea el índice, mejor será la agrupación.
La fórmula utilizada es
CH(k)=[B(k)W(k)][(n−k)(k−1)]
dónde,
n = puntos de datos
k = racimos
W(k) = dentro de la variación del conglomerado
B(k) = entre variación de conglomerados.
Índice de Davies Bouldin
El índice de Davies Bouldin se basa en el principio de las distancias entre cúmulos y entre cúmulos. Se usa comúnmente para decidir la cantidad de grupos en los que se deben etiquetar los puntos de datos. Es diferente de los otros dos ya que el valor de este índice debe ser pequeño. Entonces, el motivo principal es disminuir el índice DB.
La fórmula que se utiliza para calcular el índice DB.
DB(C)=1Ci=1kmaxjk,jiDij
Dij=di + dj dij
dónde,
Dij= relación de distancia entre agrupamientos dentro y entre agrupaciones para las agrupaciones i-ésima y j-ésima.
C = número de grupos
i,j = número de clústeres que provienen de la misma partición
Descripción de los datos
El conjunto de datos utilizado en este artículo son datos de encuestas realizadas tomando muestras aleatorias de la población. Estos datos se han tomado del repositorio de kaggle que se menciona en las referencias. Contiene 8 columnas que contienen información diferente sobre el encuestado. La descripción de las columnas se menciona a continuación.
- Estado civil: estado civil del encuestado casado y soltero que ya ha sido codificado con la etiqueta 0 y 1.
- Sexo: macho o hembra está etiquetado codificar como 0 y 1.
- Edad: edad del encuestado
- Educación: Hay diferentes niveles de educación
- Ingreso: Ingreso anual del encuestado
- Ocupación: Cualquier ocupación o no
Muestra
Cómo usar métricas de evaluación de agrupamiento
Hasta ahora hemos aprendido sobre todas las partes teóricas de las diferentes técnicas de agrupamiento. Veamos cómo implementarlos en los datos. Antes de implementarlos, necesitamos construir un algoritmo de agrupamiento.
Importación de bibliotecas:
importar numpy como np importar pandas como pd importar matplotlib.pyplot como plt importar seaborn como sns de sklearn.cluster importar KMeans de sklearn.metrics importar silhouette_score,calinski_harabasz_score,davies_bouldin_score
Lectura de conjuntos de datos y preprocesamiento:
df=pd.read_csv(‘clustering data.csv’) df.drop(‘ID’, axis=1, inplace=True) df[‘log_income’]=np.log(df[[‘Income’]]) df.cabeza()
Transformando la columna de ingresos porque el salario puede ser en cualquier moneda. Entonces necesitamos estandarizar los datos para una salida no sesgada.
Encontrar el valor de K en K-Means Clustering:
X=df[[‘Sex’, ‘Marital status’, ‘Age’, ‘Education’, ‘Occupation’, ‘Settlement size’, ‘log_income’]]sí = []
sil_puntuaciones = []
calinski_score = []
davies_score = []
índice = rango(2, 7) para i en índice: kmeans = KMeans(n_clusters=i, random_state=42) etiquetas = kmeans.fit_predict(X) se.append(kmeans.inertia_) sil_scores.append(silhouette_score(X, etiquetas )) calinski_score.append(calinski_harabasz_score(X, etiquetas)) davies_score.append(davies_bouldin_score(X, etiquetas)) print(‘Intertia en K =’, i, ‘:’, kmeans.inertia_) print(“Coeficiente de silueta: % 0.3f” % silhouette_score(X, etiquetas)) print(“Índice Calinski-Harabasz: %0.3f” % calinski_harabasz_score(X, etiquetas)) print(“Índice Davies-Bouldin: %0.3f” % davies_bouldin_score(X, etiquetas) ) imprimir(“———————————————- —————–“)
En el resultado anterior, para cada valor de k se han calculado cuatro métricas de evaluación, k es el número de grupos. Si tomamos un número de grupos como 3 (k=3) los valores serán,
WCSS (dentro de la suma del error cuadrático): 42744
Coeficiente de silueta: 0.616
Índice Calinski-Harabasz: 4304.782
Índice de Davies-Bouldin: 0.563
Disminuir el WCSS es el objetivo clave de la agrupación en clústeres de K-Means, pero además de eso, hay tres métricas de valoración que deben tenerse en cuenta. El coeficiente de silueta debe estar más cerca de +1, cuanto más bajo sea el valor del índice DB, más alto será el rendimiento. Grafiquemos estos valores para tener una visión clara sobre cómo seleccionar la cantidad de clústeres.
Trazar la curva del codo:
plt.plot(índice, se, marcador=”o”) plt.xlabel(‘Clusters’) plt.ylabel(‘Con la suma del error al cuadrado’) plt.show()
En k=3 se pudo observar un punto agudo en el gráfico anterior. Por lo tanto podemos avanzar con k =3. En la segunda gráfica, que es la gráfica de puntaje de silueta, se pudo observar que para k = 3, el puntaje de silueta para cada etiqueta está por encima del promedio (la línea de puntos roja) y también la fluctuación del ancho de cada etiqueta es casi uniforme y no está presente en otras parcelas. Por lo tanto, k=3 es óptimo.
Modelo final y métricas de evaluación:
kmeans = KMeans(n_clusters=3, random_state=42) etiquetas = kmeans.fit_predict(X) print(“Coeficiente de silueta: %0.3f” % puntuación_silueta(X, etiquetas)) print(“Índice de Calinski-Harabasz: %0.3f” % calinski_harabasz_score(X, etiquetas)) print(“Índice Davies-Bouldin: %0.3f” % davies_bouldin_score(X, etiquetas))
Coeficiente de silueta: 0.552
Índice de Calinski-Harabasz: 5509.332
Índice de Davies-Bouldin: 0.566
El coeficiente de silueta es 0,5, que está en el medio de 0 y 1, lo que es aceptable, el índice DB también es 0,5, que está en el medio, pero disminuirlo sería mejor para el rendimiento del modelo, el índice CH es alto, lo cual es bueno. Por estas métricas, se puede concluir que el modelo tiene un desempeño promedio.
Conclusión
En este artículo, hemos aprendido sobre la implementación teórica y práctica de diferentes técnicas de evaluación para la agrupación. algoritmos y dónde utilizar estas técnicas. También hemos pasado por la implementación de estas métricas con un conjunto de datos del mundo real.