我有569个向量,我想用K-Means进行聚类。但首先,我需要找到最优的K-Cluster。我尝试了使用YellowBrick包中的KElbowVizualizer函数的肘部方法,但它无法显示K-Clusters的确切数量。所以现在我正在寻找一种替代方案。
你知道如何找到最优的k-cluster吗?
这是我在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")发布于 2020-02-06 00:26:30
让我解释一下我的一种方法,我知道这很耗时,但如果你需要一些简单的-愚蠢的东西,这里就是:
当我试图找到最佳聚类数时,我只需在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个簇。
https://stackoverflow.com/questions/60078398
复制相似问题