什么才是好的剪影分数?

问题描述 投票:0回答:1

我目前正在做一些基于单词嵌入的聚类,并且我正在使用一些方法(elbow 和 David-Boulding)来确定我应该考虑的最佳聚类数量。此外,我还考虑了轮廓的衡量标准。如果我理解正确的话,它是衡量数据与正确簇的正确匹配程度的指标,范围从 - 1(不匹配)到 1(正确匹配)。

使用 kmeans 聚类,我获得了在 0.5 和 0.55 之间波动的轮廓分数。所以根据轮廓、肘法(有点太平滑了,但可能是因为我有很多数据)和 David-Bouldin 索引,我应该考虑 5 个簇。不过不知道0.5算不算好分呢?我添加了我所做的不同测量的图表、我用来生成它们的函数(在网上找到的)以及获得的聚类。

def check_clustering(X, K):
    sse,db,slc = {}, {}, {}
    for k in range(2, K):
        # seed of 10 for reproducibility.
        kmeans = KMeans(n_clusters=k, max_iter=1000,random_state=SEED).fit(X)
        if k == 3: labels = kmeans.labels_
        clusters = kmeans.labels_
        sse[k] = kmeans.inertia_ # Inertia: Sum of distances of samples to their closest cluster center
        db[k] = davies_bouldin_score(X,clusters)
        slc[k] = silhouette_score(X,clusters)


    plt.figure(figsize=(15,10))
    plt.plot(list(sse.keys()), list(sse.values()))
    plt.xlabel("Number of cluster")
    plt.ylabel("SSE")
    plt.show()

    plt.figure(figsize=(15,10))
    plt.plot(list(db.keys()), list(db.values()))
    plt.xlabel("Number of cluster")
    plt.ylabel("Davies-Bouldin values")
    plt.show()

    plt.figure(figsize=(15,10))
    plt.plot(list(slc.keys()), list(slc.values()))
    plt.xlabel("Number of cluster")
    plt.ylabel("Silhouette score")
    plt.show()

我对 k 均值聚类很陌生,主要遵循在线教程。有人可以告诉我通过不同措施(但主要是剪影)获得的分数是否正确?

谢谢您的回答。

(另外,还有一个附属问题,但我发现簇的形状有点奇怪(我希望它们更加分散)。它是簇的可能形状吗?(请注意,我使用 PCA 来减少维度,所以可能是因为这个)。 谢谢您的帮助。

python k-means
1个回答
0
投票

我自己搜了一下。

轮廓得分为 1 意味着每个数据点不太可能被分配到另一个集群。

分数接近零意味着每个数据点可以轻松分配到另一个集群

分数接近 -1 表示数据点分类错误。

基于这些假设,我认为 0.55 仍然具有信息性,但不是确定的,因此您需要进行额外的分析才能根据您的数据做出任何断言。

© www.soinside.com 2019 - 2024. All rights reserved.