Conceptos básicos de los algoritmos de aprendizaje automático: indicadores de evaluación para problemas de agrupamiento

1. La importancia de la evaluación de índices para los problemas de agrupamiento

    聚类算法是非监督学习最常用的一种方法,性能度量是衡量学习模型优劣的指标,
  也可作为优化学习模型的目标函数。聚类性能度量根据训练数据是否包含标记数据
  分为两类,一类是将聚类结果与标记数据进行比较,称为“外部指标”;另一类是直
  接分析聚类结果,称为内部指标。本文对这两类的性能度量以及相似度方法作一个
  详细总结。
  本文将总结的指标如下所示:
  外部指标:
  1.兰德系数(RI)
  2.调整兰德系数(ARI)
  3.同质性(homogeneity)度量
  4.完整性(completeness)度量
  5.V-Measure值(h和c的调和平均值)度量
  内部指标
  1.轮廓系数(Silhouette Coefficient)
  2.Caliniski-Harabaz指数

2. Cálculo de indicadores de evaluación externa

2.1 Método de cálculo del coeficiente de Rand (RI)

  Primero, definimos las variables de emparejamiento por pares a y b:
  a: el número de pares de muestras en el conjunto de datos que pertenecen tanto al mismo grupo C como al mismo grupo K
  b: el número de pares de muestras en el conjunto de datos que no pertenecen al mismo grupo C ni al mismo grupo K Por ejemplo
  , para los siguientes grupos reales y vectores de grupo predichos:
    vector de grupo real: [0, 0, 0, 1, 1, 1]
    vector de grupo predicho: [0, 0, 1 , 1, 1, 1]
  según una definición, a representa el número de pares de muestras en ambos grupos C y K, que son el mismo grupo. De lo anterior, sabemos que a = 2 ([0,0] y [ 1,1] satisface el significado de la pregunta). Según la definición de b, b
  representa Tanto C como K son el número de muestras en diferentes grupos. De lo anterior, sabemos que b=1 ([0,1] ->[1,1] cumple las condiciones)
RI es una medida de la similitud entre dos grupos. Supongamos que el número de muestras es n, definición:
RI = a + b C n 2 RI=\frac{a+b}{ C_{n}^{2}}RI _=Cnorte2a+segundo
  Según la muestra anterior, n=6, grupos=3, por lo que el resultado del cálculo de RI es el siguiente:
RI = a + b C 6 3 = 2 + 1 15 = 1 5 RI=\frac{a+b}{ C_{6}^{3}} =\frac{2+1}{15} =\frac{1}{5}RI _=C63a+segundo=152+1=51

2.2 Método de cálculo del coeficiente Rand de ajuste (ARI)

  La desventaja del coeficiente RI es que a medida que aumenta el número de grupos, el RI de los vectores de clase de grupo asignados aleatoriamente aumenta gradualmente, lo que no está en línea con la teoría. El RI de los vectores de etiqueta de clase de grupo asignados aleatoriamente debe ser 0.
  Para resultados aleatorios, RI no garantiza una puntuación cercana a cero. Para lograr "cuando los resultados de agrupamiento se generan aleatoriamente, el índice debe ser cercano a cero", se propuso el índice de rand ajustado (Adjusted randindex), que tiene un mayor grado de discriminación, su fórmula de cálculo es la siguiente: ARI = RI −
E [ RI ] máx ( RI ) − E [ RI ] ARI=\frac{RI-E[RI]}{max(RI)-E[RI]}ARI _ _=máx ( RI ) _ _E [ RI ] _RI _E [ R I ] .
  El código Python relevante es el siguiente:

from sklearn.metrics import adjusted_rand_score
true_labels = [ 0, 0, 0, 1, 1, 1 ]# 真实的标签
predicted_labels = [ 0, 0, 1, 1, 2, 2 ]# 聚类结果的标签
ari_score = adjusted_rand_score(true_labels, predicted_labels)
print("调整兰德系数:",ari_score )

2.3 Método de cálculo de la medida de homogeneidad

  Damos la fórmula de cálculo de la medida de homogeneidad de la siguiente manera:
h = 1 − H ( C ∣ K ) H ( C ) h=1-\frac{H(C|K)}{H(C)}h=1H ( C )H ( C K )
H ( C ∣ K ) es la entropía condicional de la división de categorías bajo una condición de división de conglomerados dada, H ( C ∣ K ) = − ∑ c = 1 ∣ C ∣ ∑ k = 1 ∣ K ∣ nc , kn log ⁡ ( nc , knk ), H ( C ) es la entropía de división de categorías, H ( C ) = − ∑ c = 1 ∣ C ∣ ncn log ⁡ ( ncn ) , n representa el número total de instancias. H(C \mid K) es la entropía condicional de la división de categorías bajo una condición de división de conglomerados dada, \\ H(C \mid K)= -\sum_{c=1}^{|C|} \sum_{k= 1 }^{|K|} \frac{n_{c, k}}{n} \log \left(\frac{n_{c, k}}{n_{k}}\right), H(C) es Entropía de clasificación, \\ H(C)=-\sum_{c=1}^{|C|} \frac{n_{c}}{n} \log \left(\frac{n_{c}}{ n}\right), n representa el número total de instancias.H ( CK ) es la entropía condicional de la división de categorías bajo condiciones dadas de división de conglomerados ,H ( Ck )=c = 1Ck = 1Knortenortec , kiniciar sesión(norteknortec , k),H ( C ) es la entropía de división de categorías ,H ( C )=c = 1Cnortenorteciniciar sesión(nortenortec),n representa el número total de instancias.
  El código Python relevante es el siguiente:

from sklearn.metrics import homogeneity_score
true_labels = [ 0, 0, 0, 1, 1, 1 ]# 真实的标签
predicted_labels = [ 0, 0, 1, 1, 2, 2 ]# 聚类结果的标签
homogeneity = homogeneity_score(true_labels, predicted_labels)
print("同质性:", homogeneity)

2.4 Método de cálculo de la métrica de integridad

  Cada parámetro de la medida de integridad es similar a la medida de homogeneidad y su fórmula de cálculo es la siguiente:
h = 1 − H ( K ∣ C ) H ( K ) h=1-\frac{H(K|C) }{ H(K)}h=1H ( k )H ( K C )
  El código Python relevante es el siguiente:

from sklearn.metrics import completeness_score
true_labels = [ 0, 0, 0, 1, 1, 1 ]# 真实的标签
predicted_labels = [ 0, 0, 1, 1, 2, 2 ]# 聚类结果的标签
completeness = completeness_score(true_labels, predicted_labels)
print("完整性:", completeness)

2.5.Método de cálculo del valor de medida V

  El método de cálculo de V-Measure es la media armónica de h y c. La fórmula de cálculo es la siguiente:
V = 2 hch + c V=\frac{2hc}{h+c}V=h+C2h c _
  El código Python relevante es el siguiente:

#%%
from sklearn.metrics import v_measure_score
true_labels = [ 0, 0, 0, 1, 1, 1 ]# 真实的标签
predicted_labels = [ 0, 0, 1, 1, 2, 2 ]# 聚类结果的标签
v_measure = v_measure_score(true_labels, predicted_labels)
print("V度量:", v_measure)

3. Cálculo de indicadores de evaluación interna

3.1 Método de cálculo del coeficiente de silueta.

  El coeficiente de silueta es adecuado para situaciones en las que se desconoce la información real de la categoría. Para una sola muestra, sea a la distancia promedio a otras muestras en la misma categoría, b sea la distancia promedio a las muestras más cercanas en diferentes categorías y el coeficiente de silueta sea: s = b − amax ( a , b ) s= \
frac{ba}{max(a,b)}s=máx ( a , _segundo )bun
  El código Python relevante es el siguiente:

#%%
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
X=[[0,1,2,6],[1,0,2,6],[2,1,0,6],[6,6,6,0]]
y=[0,0,0,1]
kmeans = KMeans(n_clusters=3)	
# 根据数据data进行聚类,结果存放于result_list中
result_list = kmeans.fit_predict(X)
# 将原始的数据data和聚类结果result_list
score = silhouette_score(X, result_list)
print(score)

3.2 Método de cálculo de Calinski-Harabaz

  Este método de cálculo es simple y directo, cuanto mayores sean los datos obtenidos, mejor. El método de cálculo del factor Calinski-Harabaz se detalla a continuación: es decir, cuanto menor sea
Insertar descripción de la imagen aquí
  la covarianza de los datos dentro de la categoría, mejor y mayor Cuanto mayor sea la covarianza entre categorías, mejor: tales puntuaciones de Calinski-Harabasz serán altas.
  El código Python relevante es el siguiente:

#%%
#%%
import numpy as np
from sklearn import metrics
from sklearn.cluster import KMeans
X=[[0,1,2,6],[1,0,2,6],[2,1,0,6],[6,6,6,0]]
y=[0,0,0,1]
kmeans = KMeans(n_clusters=3)	
result_list = kmeans.fit_predict(X)
calinski_harabasz_score= metrics.calinski_harabasz_score(X, result_list)
print(calinski_harabasz_score)

4. Agradecimientos

本章内容的完成离不开以下大佬文章的启发和帮助,在这里列出名单,如果对于内容还有不懂的,可以移步对应的文章进行进一步的理解分析。
1.聚类评价指标的外部指标评价:https://blog.csdn.net/fengdu78/article/details/103951665
2.聚类评价指标的外部指标评价:https://zhuanlan.zhihu.com/p/145989213
3.聚类评价指标的内部指标评价:https://blog.csdn.net/sinat_26917383/article/details/70577710
在文章的最后再次表达由衷的感谢!!

Supongo que te gusta

Origin blog.csdn.net/m0_71819746/article/details/133465439
Recomendado
Clasificación