Как рассчитать силуэтную оценку для каждого кластера отдельно в python - PullRequest
1 голос
/ 26 января 2020

Вы можете легко извлечь оценку силуэта с помощью 1 строки кода, которая усредняет оценки для всех ваших кластеров, но как вы извлекаете каждую из промежуточных оценок из реализации Scikit Learn оценки силуэта? Я хочу иметь возможность извлекать эту же оценку для каждого кластера отдельно, а не только получать общую оценку.

metrics.silhouette_score(x, y, metric='euclidean')

1 Ответ

3 голосов
/ 26 января 2020

Если ваши данные выглядят примерно так:

num_clusters = 3
X, y = datasets.load_iris(return_X_y=True)
kmeans_model = KMeans(n_clusters=num_clusters, random_state=1).fit(X)
cluster_labels = kmeans_model.labels_

Вы можете использовать metrics.silhouette_samples для вычисления коэффициентов силуэта для каждой выборки, а затем взять среднее значение для каждого кластера:

sample_silhouette_values = metrics.silhouette_samples(X, cluster_labels)

means_lst = []
for label in range(num_clusters):
    means_lst.append(sample_silhouette_values[cluster_labels == label].mean())

print(means_lst)                                                                             
[0.4173199215409322, 0.7981404884286224, 0.45110506043401194] # 1 mean for each of the 3 clusters
...