更新 K-Means 聚类中的 K 值

Posted

技术标签:

【中文标题】更新 K-Means 聚类中的 K 值【英文标题】:Updating value of K in K-Means Clustering 【发布时间】:2019-05-04 22:52:42 【问题描述】:

在没有标签且不知道所需集群数量的情况下对数据集进行聚类的最佳方法是什么?

例如,使用没有标签或不知道标签类别数量的 Iris 数据集。

我的想法:

计算样本与每个现有聚类的均方距离 *如果均方距离 > 某个阈值乘以取决于(惩罚)k 的因子,则添加一个“新”候选。 *如果添加了新集群,则找到新的“最佳”k+1 个集群中心 如果没有添加新集群,请转到下一行

【问题讨论】:

【参考方案1】:

您可以按照here 的描述在不同的 K 值处绘制肘部曲线

具体来说,

1) 肘部方法的思想是在数据集上对一系列 k 值(例如,在上面的示例中从 1 到 10 的 k)运行 k 均值聚类,并为每个 k 值计算误差平方和 (SSE)。

2) 然后,为每个 k 值绘制 SSE 的折线图。如果折线图看起来像一只手臂,那么手臂上的“肘部”就是最好的k值

3) 所以我们的目标是选择一个小的 k 值,它仍然具有低 SSE,而肘部通常代表我们通过增加 k 开始收益递减的位置

【讨论】:

谢谢!我熟悉肘法,如果我错了,请纠正我,但它不需要标记数据来计算 SSE 吗?这种方法是否适用于未标记的数据和我们不知道大约簇数的数据? K-means 是一种无监督算法,因此应该可以。您不是从已知的“最佳”集群计算 SSE - 您是从当前集群计算 SSE(然后迭代改进) 为了回答这个出色的答案,@AidanSmyth 你问“但它不需要标记数据”:答案是否定的,你通过指定应用 assumed 标签不同的k值。聚类算法假设有 k 个标签,并最小化集群内和集群外 SSE 以将集群标签应用于每个点。然后,您重复此操作并重新计算您想尝试的每个 K 值。肘部是假设存在的最佳类数【参考方案2】:

关于如何选择k,已经提出了数十种方法。

x-means等一些变体可以动态调整k,你只需要给出最大值-并选择质量标准AIC或BIC。

【讨论】:

以上是关于更新 K-Means 聚类中的 K 值的主要内容,如果未能解决你的问题,请参考以下文章

k-means 聚类中的项数

k-means聚类算法python实现,导入的数据集有啥要求

在 k-means 聚类中最小化损失函数意味着啥?

[聚类算法] K-means 算法

kmeans聚类

在 K-means 聚类中组织聚类