在大型向量中寻找最佳kcluster

2024-10-06 07:39:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有569个向量,我想用K-均值聚类。但首先,我需要找到最优的K-簇。我使用YellowBrick软件包中的KelbowVizizer函数尝试了肘部方法,但它无法显示K簇的确切数目。所以现在我正在寻找一个替代方案

你知道如何找到最优的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")

Tags: fromimportmodelsklearn向量fit均值cluster
1条回答
网友
1楼 · 发布于 2024-10-06 07:39:41

让我解释一下我的一种方法,我知道这很费时,但如果你需要一些简单而愚蠢的东西,就在这里:

当我试图找到最佳数量的簇时,我只是在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个集群

相关问题 更多 >