【问题标题】:Kmeans elbow method not returning an elbowKmeans 肘部方法不返回肘部
【发布时间】:2023-03-15 03:46:01
【问题描述】:

所以按照文档中的示例 (here):

KElbowVisualizer 实现了“elbow”方法来帮助数据科学家 通过将模型拟合到一系列 K 的值。如果折线图类似于手臂,则“肘”( 曲线上的拐点)是一个很好的迹象,表明基础 模型在这一点上最适合。

如果图表中没有肘部怎么办?当我在我的数据集上运行相同的代码时,输​​出是:

因此,每增加一个聚类,失真分数就会不断增加。

但是,当我使用 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()

输出是:

哪个有肘部。

这两种方法有什么区别? 为什么第一张图没有肘部?

根据文档,它们都应用相同的距离方法,即“样本到最近的聚类中心的距离平方和。”

【问题讨论】:

  • 我认为区别在于迭代次数。请为 KElbowVisualizer 提供更多迭代和更新。
  • 看KElbowVisualizer的文档,没有看到增加迭代次数的方法。
  • 你能粘贴你的 KElbowVisualizer 代码吗?
  • KElbowVisualizer 代码与文档 (scikit-yb.org/en/latest/api/cluster/elbow.html) 中的代码完全相同,例外是 X 是我的数据集。
  • 好的,在这种情况下,您传递给 KElbowVisualizer 的模型 KMeans() 具有参数 max_iter。在传递给 KElbowVisualizer 之前也将其更改为 1000。

标签: python pandas scikit-learn cluster-analysis


【解决方案1】:

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

pip install -U yellowbrick

或在 Jupyter 单元中:

!pip install -U yellowbrick

【讨论】:

    猜你喜欢
    • 2021-06-07
    • 2017-05-23
    • 2016-12-23
    • 2019-11-18
    • 2018-11-04
    • 2012-06-12
    • 2018-10-10
    • 1970-01-01
    相关资源
    最近更新 更多