【问题标题】:looking for optimum k-cluster in huge vectors在巨大的向量中寻找最优的 k 簇
【发布时间】:2020-05-21 12:30:38
【问题描述】:

我有 569 个向量要使用 K-Means 进行聚类。但首先,我需要找到最优的 K-Cluster。我尝试使用 YellowBrick 包中的 KElbowVizualizer 函数使用肘部方法,但它无法显示 K-Cluster 的确切数量。所以现在我正在寻找替代方案。

知道如何找到最优的 k 簇吗?

这是我在 KElbowVisualizer 中使用的代码:

from sklearn.cluster import MiniBatchKMeans
from sklearn.feature_extraction.text import TfidfVectorizer
from yellowbrick.cluster import KElbowVisualizer

vec = TfidfVectorizer(
      stop_words = 'english',
      use_idf=True
)

vectors_= vec.fit_transform(df1)

model = MiniBatchKMeans()
titleKElbow = "The Optimal K-Cluster with Elbow Method"
visualizer = KElbowVisualizer(model, k=(2,30), metric='silhouette', timings=False, title = titleKElbow, size=(1080, 720))
visualizer.fit(vectors_)
visualizer.show(outpath="G:/My Drive/0. Thesis/Results/kelbow_minibatchkmeans.png")

【问题讨论】:

    标签: python scikit-learn k-means


    【解决方案1】:

    让我解释一下我的一种方法,我知道这很耗时,但是如果您需要一些简单愚蠢的方法,那就是:

    当我尝试找到最佳聚类数时,我只是在 2 到 n 之间进行一个 for 循环,在每次迭代中使用不同数量的质心,拟合模型并打印轮廓分数。

    如果有特定数量的集群与特征中的组匹配,我会选择得分最高的模型或得分最高的模型之一。

    示例代码:

    for i in range(2, 30):
        model = MiniBatchKMeans(n_clusters=i)
        model.fit(vectors_)
        score = silhouette_score(vectors_, model.labels_)
        print("Number clusters: {}, Silhouette score is {})".format(i, score))
    

    它可能会输出如下内容:

    Number clusters: 2, Silhouette score is 0.519799469615586)
    Number clusters: 3, Silhouette score is 0.6105084877652616)
    Number clusters: 4, Silhouette score is 0.6177814923806652)
    Number clusters: 5, Silhouette score is 0.623432421353322)
    Number clusters: 6, Silhouette score is 0.6454444674454114)
    Number clusters: 7, Silhouette score is 0.5614716290406436)
    Number clusters: 8, Silhouette score is 0.5585556926568208)
    Number clusters: 9, Silhouette score is 0.565265125745878)
    ......
    

    所以我会选择 6 个集群。

    【讨论】:

    • 我试过了,但在 500 个向量之后,它不再显示我的剪影分数
    • @JackZakiZakiulFahmiJailani 你能用新代码发布一个编辑吗?让我们看看有什么我能做的:)
    • 我的意思是,我在上面尝试了你的代码,它确实向我显示了每个向量的轮廓分数。但是在 500 个向量之后,它不会显示任何东西。我猜它无法实现到巨大的向量。
    猜你喜欢
    • 2018-11-28
    • 1970-01-01
    • 2019-04-29
    • 2016-10-12
    • 1970-01-01
    • 2015-08-17
    • 2018-04-06
    • 1970-01-01
    • 2011-02-07
    相关资源
    最近更新 更多