对密集数据集进行聚类

机器算法验证 r 聚类
2022-04-10 04:25:46

问题:

我正在寻找为数据集找到集群的最佳方法,这些数据集的观测值密集地排列在一起。该数据集是基于运营指标的具有三个数值变量的零售商店。

我不知道如何为这样的示例创建模拟数据集。我有密集聚集的数据和异常值,但在 4k 观察下。

经营目标:

我们需要根据几个变量将数据集分成几组。

目标是缩小优先级更高的商店。稍后,我们将使用推理统计来确定所述操作指标的原因。通过包含的三个运营变量,根据优先级对商店进行细分是有意义的。

我尝试了两种不同类型的分区聚类方法、k 值和不同的变量,但都产生了糟糕的验证结果。这是我采取的步骤:

使用 2/3 变量进行聚类:

  1. 使用CRAN 中的包中的欧几里德距离daisy()函数标准化菊花相异矩阵。cluster

  2. 通过查看 SSE 图表kmeans()函数为 k-means 选择 k。

  3. pamk()在 CRAN 的包中按功能选择 k 为 k-medoid,fpc以获得集群中最高的平均轮廓宽度 - 导致 0.23 的平均轮廓宽度。K-medoid 与CRAN 包中的pam()功能一起使用。cluster

  4. 通过 dunn-index 选择聚类算法 - 最高聚类结果是 k-medoids 0.002。cluster-stats()fpc.

使用所有三个变量进行聚类: - 与上述相同的过程。

结果: 使用两个变量的具有 2 个聚类的 K-medoids 代表了具有最高 dunn-indes 的算法。

概述: 在为每种聚类方法选择最佳聚类数并使用 dunn-index 比较最佳聚类数后,结果有重叠。

在密集聚类数据集上执行聚类分析的推荐方法是什么?我是否需要多次执行聚类才能进一步分割数据?

编辑:添加了散点图,显示具有 3 个变量的聚类

带有集群标签颜色编码的散点图

1个回答

正如@Anony-Mousse 暗示的那样,目前尚不清楚您的数据实际上是可聚类的。最后,您可以选择简单地将数据分成多个分区,如果这有助于您的业务目的,但可能没有任何真正的潜在分组。

从我的角度来看,我无法提供任何有保证的解决方案,但也许我可以提供一些有利可图的建议:

  1. 您有一个明确的异常值(例如,在 [2,3] 散点图的右上角),它可能会扭曲您尝试的任何分析。您可能想尝试单独调查该商店。在此期间,我将把这一点放在一边。
  2. 目前尚不清楚您拥有多少数据,但看起来很多。您说您有“低于 4k 的观察值”。如果它接近那个数量,比如说> 3k,那么你有很多。由于需要进行大量的探索性数据分析,因此我会将您的数据随机分成两半并探索前半部分,然后再用另一半验证您的选择。
  3. 我会尝试对您的变量进行各种转换,看看您是否可以获得更好(即更球形)的分布。例如,取数据的对数可能是合适的。找到合适的变换后,再次检查异常值。
  4. 然后您需要对每个变量进行标准化,使其平均值为 0,标准差为 1。确保保留每个变量的原始平均值和 SD,以便稍后在使用第二组时可以应用完全相同的转换。
  5. 此时(并且仅在现在),您可以尝试聚类。我不会使用 k-means 或 k-medoids。由于您将拥有重叠的集群,因此您将需要一种可以处理它的方法。我熟悉的可以这样做的聚类算法是模糊 k 均值、高斯混合建模和通过核密度估计进行聚类。

    这里有一个连续性:模糊 k-means 本质上近似于 GMM,但对您的集群施加了球形度,而 GMM 没有这样做。GMM 做出了一个非常强的假设,即每个集群都是多元正态的(尽管可能具有不同的方差和协方差)。如果这不是(几乎)完全正确,结果可能会被扭曲。此外,虽然核密度估计默认使用多元高斯核,但最终结果可以更加灵活,并且根本不需要产生多元正态簇。这种推理可能会建议您简单地选择后者,但如果前者的约束/假设成立,它们将有利于您的分析。

  6. 您提到了您正在使用的各种集群验证指标。这些很有价值,但我会选择方法和最终的集群解决方案,考虑到您对该主题的了解以及它是否提供可操作的商业智能,通过这种方法和最终的集群解决方案可以使数据变得有意义。您还应该尝试以各种方式可视化集群。
  7. 通过对另一半数据执行完全相同的预处理和聚类来检查您选择的策略,看看您是否获得了相似且同样连贯/有价值的结果。

1. Azzalini, A. 和 Torelli, N. (2007)。通过非参数密度估计进行聚类,Statisticis and Computing, 17 , 1, pp. 71-80。