← Назад к вопросам

Какие метрики качества используются для кластеризации?

2.0 Middle🔥 141 комментариев
#Машинное обучение#Метрики и оценка моделей

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.

Ответ сгенерирован нейросетью и может содержать ошибки

Метрики качества кластеризации

Оценка качества кластеризации - нетривиальная задача, поскольку в отличие от задач классификации, у нас часто нет эталонных меток. Метрики делятся на внутренние (без ground truth) и внешние (с эталонной разметкой).

Внутренние метрики

1. Silhouette Score (коэффициент силуэта)

Измеряет, насколько объект похож на свой кластер по сравнению с ближайшим чужим. Значение от -1 до +1:

from sklearn.metrics import silhouette_score

score = silhouette_score(X, labels)
# > 0.7  - сильная структура
# 0.5-0.7 - разумная структура
# 0.25-0.5 - слабая структура
# < 0.25 - структура не найдена

Формула для одного объекта: s(i) = (b(i) - a(i)) / max(a(i), b(i)), где a(i) - среднее расстояние до объектов своего кластера, b(i) - среднее расстояние до ближайшего чужого кластера.

2. Davies-Bouldin Index

Отношение внутрикластерных расстояний к межкластерным. Чем меньше - тем лучше (0 - идеальная кластеризация):

from sklearn.metrics import davies_bouldin_score

db_score = davies_bouldin_score(X, labels)

3. Calinski-Harabasz Index (Variance Ratio Criterion)

Отношение дисперсии между кластерами к дисперсии внутри кластеров. Чем больше - тем лучше:

from sklearn.metrics import calinski_harabasz_score

ch_score = calinski_harabasz_score(X, labels)

4. Inertia (Within-Cluster Sum of Squares, WCSS)

Сумма квадратов расстояний от объектов до центроида их кластера. Используется в методе локтя для подбора оптимального числа кластеров:

inertias = []
for k in range(2, 11):
    km = KMeans(n_clusters=k, random_state=42)
    km.fit(X)
    inertias.append(km.inertia_)

Внешние метрики (при наличии эталонных меток)

5. Adjusted Rand Index (ARI)

Скорректированный индекс Рэнда. Измеряет совпадение двух разбиений с поправкой на случайность. Значение от -1 до +1 (1 - идеальное совпадение, 0 - случайное):

from sklearn.metrics import adjusted_rand_score

ari = adjusted_rand_score(true_labels, predicted_labels)

6. Normalized Mutual Information (NMI)

Нормализованная взаимная информация. Оценивает, сколько информации об эталонной разметке содержится в кластеризации:

from sklearn.metrics import normalized_mutual_info_score

nmi = normalized_mutual_info_score(true_labels, predicted_labels)

7. V-Measure, Homogeneity, Completeness

  • Homogeneity - каждый кластер содержит только объекты одного класса
  • Completeness - все объекты одного класса попали в один кластер
  • V-measure - гармоническое среднее двух предыдущих
from sklearn.metrics import v_measure_score, homogeneity_score, completeness_score

v = v_measure_score(true_labels, predicted_labels)

Как выбрать метрику

  • Нет меток: Silhouette Score (универсальная) + Davies-Bouldin (дополнительная проверка)
  • Есть метки: ARI (строгая) + NMI (информационная)
  • Подбор числа кластеров: метод локтя (inertia) + silhouette для каждого k
  • Кластеры произвольной формы: Silhouette лучше Calinski-Harabasz, который предпочитает выпуклые кластеры