【发布时间】: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