【问题标题】:KMeans with huge number of clusters具有大量集群的 KMeans
【发布时间】:2021-05-02 07:50:33
【问题描述】:

我有一个相对较大的图,它有大约 6000 个顶点,我必须使用 KMeans 来查看 5467 个簇是什么。我必须使用不同的指标,这就是为什么我将 distance_matrix 作为输入。这样做的问题是,由于 n_clusters 太大,它不会收敛。有人建议我进行自定义调整以使其正常工作,但我不确定这意味着什么。这就是为什么我在这里发布这个问题。欢迎任何帮助!谢谢! 这是我的代码:

from sklearn.cluster import KMeans

distance_matrix = floyd_warshall_numpy(G)

cluster = KMeans(n_clusters=5467)

cluster.fit(distance_matrix)

graph_labels = cluster.labels_

【问题讨论】:

    标签: python cluster-analysis k-means


    【解决方案1】:

    我不建议使用 Kmeans 进行如此多的集群。相反,尝试使用带有欧几里德距离的Agglomerative clustering。这将允许您找到一个截止点,您可以通过对点进行分组来获得预期的集群数量。

    如果在 5 点关闭,则会给你 4 个集群,而在 2 点关闭它会给你更多。

    虚拟代码-

    from sklearn.cluster import AgglomerativeClustering
    import numpy as np
    X = np.array([[1, 2], [1, 4], [1, 0],[4, 2], [4, 4], [4, 0]])
    clustering = AgglomerativeClustering().fit(X)
    clustering.labels_
    
    array([1, 1, 1, 0, 0, 0])
    

    您也可以使用预先计算的矩阵进行凝聚聚类

    查看我分享的文档链接。

    【讨论】:

    • 您好,谢谢您的回答。我必须进行凝聚聚类和 KMeans 聚类。我做了第一个没有问题,因为它收敛得很快。问题在于 KMeans。
    • Kmeans 只是基于欧几里德距离的聚类。您也可以将欧几里得距离与凝聚聚类一起使用。这会给你类似的结果,但没有最佳的集群数量。您可以使用层次聚类方法来定义截止值。
    • 是的,我知道,我做了凝聚聚类。我需要 KMeans 而不是凝聚聚类。我知道这更容易并且可以按您所说的那样工作,但是我的任务是 KMeans。谢谢你的解释!
    • 好吧,您可能需要获得第二意见,因为我怀疑您的顾问是否建议了正确的方法:) .. 但祝你好运。如果你用 kmeans 正确解决了这个问题,那么也请告诉我。我可能会学到一些新东西 :))
    • 很高兴随时提供帮助。
    猜你喜欢
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 2011-09-30
    • 2013-07-15
    • 1970-01-01
    • 2017-06-01
    相关资源
    最近更新 更多