Какие метрики качества используются для кластеризации?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Метрики качества кластеризации
Оценка качества кластеризации - нетривиальная задача, поскольку в отличие от задач классификации, у нас часто нет эталонных меток. Метрики делятся на внутренние (без 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, который предпочитает выпуклые кластеры