【问题标题】:Maximum value for n_clusters in K Means algorithmK 均值算法中 n_clusters 的最大值
【发布时间】:2021-04-24 13:31:21
【问题描述】:

我有一个包含 28000 条记录的数据集。该数据是电子商务商店菜单项的数据。挑战如下:

多家商店的产品相似,但名称不同。例如,“HP 笔记本电脑 1102”以“HP 笔记本电脑 1102”、“Hewlett-Packard 笔记本电脑 1102”、“HP 笔记本电脑 1102”和许多其他不同的名称出现在不同的商店中。

我选择将产品列表转换为 tfidf 向量,并使用 KMeans 聚类将相似的产品组合在一起。我还使用了一些其他功能,如产品类别、子类别等。(我有一个热编码所有类别特征)

现在我的挑战是估计 KMeans 算法中的最优 n_clusters。由于集群应该发生在产品级别,我假设我需要一个高 n_clusters 值。 n_clusters有上限吗?

此外,有关解决方案的任何建议和建议都会非常有帮助。 提前致谢。

【问题讨论】:

标签: python machine-learning nlp cluster-analysis k-means


【解决方案1】:

上限是数据点的数量,但您几乎可以肯定需要一个低一点的数字,以便聚类提供任何值。如果您有 10,000 个产品,我认为从有用性的角度来看,5,000 个集群将是一个粗略的最大值。

您可以使用 silhouette score 和 inertia 指标来帮助确定最佳聚类数。

使用每个样本的平均聚类内距离 (a) 和平均最近聚类距离 (b) 计算轮廓系数。样本的轮廓系数为 (b - a) / max(a, b)。为了澄清,b是样本与样本不属于的最近集群之间的距离...... 最佳值为 1,最差值为 -1。接近 0 的值表示重叠的集群。 - 来自scikit-learn docs

inertia_ 是 scikit-learn 中拟合聚类对象的属性 - 不是单独的评估指标。 它是“样本到最近的聚类中心的距离平方和”。 - 例如,参见KMeans clustering docs in scikit-learn。

请注意,当您添加更多集群时,惯性会增加,因此您可能需要使用肘形图来可视化变化最小的位置。

【讨论】:

    【解决方案2】:

    您正在针对 k 进行优化,因此您可以在此处尝试与此类似的方法:how do I cluster a list of geographic points by distance?

    至于最大 k,每个集群只能拥有与数据点一样多的集群,因此请尝试使用它作为上限

    【讨论】:

      猜你喜欢
      • 2012-07-19
      • 2014-09-16
      • 2011-09-06
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多