Kmeans肘子方法不返回肘子。

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

所以按照文档中的例子(此处):

KElbowVisualizer实现了 "肘部 "方法,帮助数据科学家通过对K的数值范围进行模型拟合,选择最佳的聚类数量。 如果线图像一只手臂,那么 "肘部"(曲线上的拐点)就很好地表明,基础模型在该点上的拟合效果最好。

如果图中没有肘部呢?当我在我的数据集上运行同样的代码时,输出的结果是。enter image description here

所以每增加一个聚类,失真度就会不断增加

然而,当我使用kmeans.intertia属性,运行另一个肘子方法的例子时。

sse = {}
for k in range(1, 10):
    kmeans = KMeans(n_clusters=k, max_iter=1000).fit(testDF)
    testDF["clusters"] = kmeans.labels_
    #print(data["clusters"])
    sse[k] = kmeans.inertia_ # Inertia: Sum of distances of samples to their 
closest cluster center
plt.figure()
plt.plot(list(sse.keys()), list(sse.values()))
plt.xlabel("Number of cluster")
plt.ylabel("SSE")
plt.show()

输出是:

enter image description here

其中确实有一个弯头。

这两种方法有什么区别?为什么第一张图上没有弯头?

根据文档,它们都应用了相同的距离法,即 "样本到其最近的簇中心的平方距离之和"。

python pandas scikit-learn cluster-analysis
1个回答
0
投票

我刚才也遇到了同样的问题,更新到Yellowbrick v1.1就解决了。

pip install -U yellowbrick

或在Jupyter单元中。

!pip install -U yellowbrick

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