k-means 将一个数据点分类为一组

数据挖掘 机器学习 聚类 k-均值
2021-10-03 00:05:10

我有 1000 组一维数据(每组长度为 360),我想要 k 意味着对每组数据的小/中/大值(n_clusters = 3)进行分类,但我得到了很多大组只有 1 个数据点的实例,因为该值与其他值相去甚远,但其余的看起来可以清楚地创建 3 个集群。

在其他一些情况下,使用 1 个数据点作为大组似乎是有意义的,因为其余的数据点非常接近。目前尚不清楚是否可以有 3 个独特的集群。

什么是处理这个问题的有效方法?

3个回答

我想到了两个想法,可以结合也可以不结合。

  1. 尝试将单个点识别为异常值,并将其从聚类考虑中删除。
  2. 允许 ķ 变化一点。

同时使用并允许 ķ{2,3}允许您在主要点集中仅找到两个组以及异常值。仅使用 (2)ķ{3,4} 可以找到集群 Low/Med/Large/Outlier...它的优点是异常值检测是由 k-means 算法完成的,而不是另一个预处理步骤,但是当你只需要三个时,就有可能找到四个诚实的集群。

当你的数据有异常值时,K-means 不是一个好的选择(你可以从算法的行为方式中理解)。在您的情况下,我建议使用对异常值不敏感的k-medoids (也称为PAM for Partitioning Around Medoids)。

与 K-means 相比,K -medoids需要更多时间来计算,但您不会注意到数据中这种数量级的差异。

K-mrans 对异常值不稳健。这就是你在这里看到的。

在数学上,k-means 做了它预期做的事情。将极值放在自己的集群中会减少方差,这是目标。

就您而言,我认为您首先不想进行聚类。相反,请手动定义将数据离散为三个范围的阈值。然后将在所有系列中使用相同的阈值。