如何使用pyclustering lib计算k聚类的Silhouette系数?

时间:2018-07-26 13:36:06

标签: python scikit-learn cluster-analysis sklearn-pandas

我喜欢在数据集https://archive.ics.uci.edu/ml/datasets/seeds上尝试k聚类方法(PAM)

我不知道除 pyclustering 以外是否还有其他库可用于此目的。无论如何,如何使用该库为群集计算剪影系数?它没有提供使用sklearn的k均值的方法。

2 个答案:

答案 0 :(得分:0)

您可以在documentation中使用sklearn.metrics.silhouette_score(X, labels, metric=’euclidean’, sample_size=None, random_state=None, **kwds)。此函数返回所有样本的平均轮廓系数。要获取每个样本的值,请使用silhouette_samples。我还建议查看此vignette。这里也有一个很好的例子供您测试。

答案 1 :(得分:0)

从0.8.2开始,也可以通过pyclustering,这是文档中的示例:

from pyclustering.cluster.center_initializer import kmeans_plusplus_initializer
from pyclustering.cluster.kmeans import kmeans
from pyclustering.cluster.silhouette import silhouette

from pyclustering.samples.definitions import SIMPLE_SAMPLES
from pyclustering.utils import read_sample

# Read data 'SampleSimple3' from Simple Sample collection.
sample = read_sample(SIMPLE_SAMPLES.SAMPLE_SIMPLE3)

# Prepare initial centers
centers = kmeans_plusplus_initializer(sample, 4).initialize()

# Perform cluster analysis
kmeans_instance = kmeans(sample, centers)
kmeans_instance.process();
clusters = kmeans_instance.get_clusters()

# Calculate Silhouette score
score = silhouette(sample, clusters).process().get_score()

对于PAM,您需要更改最后一部分:

...
medoids = kmeans_plusplus_initializer(sample, 4).initialize(return_index=True)
kmedoids_instance = kmedoids(sample, medoids)
clusters = kmedoids_instance.process().get_clusters()

score = silhouette(sample, clusters).process().get_score()