聚类(kmeans)是否适合对一维数组进行分区?

机器算法验证 聚类 k-均值
2022-03-27 07:16:36

我想将函数的结果分为 2 个(或 3 个)类别。

我有一个函数效率 = f(重量,速度,#refueling_stops),它接受 3 个输入参数,输出告诉我卡车的“效率”有多高。我的目标是让效率最低的卡车远离道路。但是,我不知道要保留哪辆卡车,要拒绝哪辆卡车。换句话说,我想将函数的所有可能输出值划分为“保留”类别或“拒绝”类别(或“介于”类别)。此外,我无法评价我的决定有多合适,因此我画线的点或多或少是任意的。尽管如此,我正在寻找一种基于科学的方法来解决这个问题。

这种问题有名字吗?

到目前为止,我偶然发现了集群(kmeans 和自然休息/Jenks),这对我来说是全新的。另外我读到我的问题可能类似于将彩色图像转换为黑白(和灰色)。但我不知道这个过程的当前做法是什么。

到目前为止,我已经计算了我的函数的所有可能结果。生成的一维数组的直方图和 PDF 如下所示: 直方图和pdf

然后我通过 R 将它们分成 2 个(或 3 个)类别:

library(classInt)
x <- read.table("all_possible_outcomes")
classIntervals(b, n=2, style = "kmeans")
classIntervals(b, n=3, style = "kmeans")

现在我很好奇这种解决我的问题的方法是否是当前的方法,或者如果不是,那么最佳实践是什么?我想我正在寻找的是某种确认使用集群是合适的。如果没有,你能想到什么替代方案?

2个回答

一维聚类具有一些特殊属性,有时已在定制方法中加以利用。它在教科书文献中似乎常常被忽视,它专注于更普遍的问题。请参阅(例如)答案(不是真正的问题!)

如何将数值数据分组到自然形成的“括号”中?(例如收入)

也就是说,我对你认为你有聚类问题的倾向持怀疑态度。

  1. 当变异的主要特征是连续性时,聚类通常会令人失望;然后要求它找到没有明确定义的组。就您而言,鉴于您的图表,我会非常担心集群的可重复性。特别是估计的 pdf 将随内核选择而有很大差异;仅当您相信其中的所有内容时,将选择委托给例如自动交叉验证才能解决该问题。

  2. 您似乎想要做出或指导一个决定,所以这可能对您的问题表述更为重要。

好吧,k-means 当然适用于一维数据。但它没有很好地利用数据的属性,例如可排序。

例如,有专门的算法,例如 Jenks Natural Breaks 优化。

核密度估计(KDE) 非常适用于一维数据,通过在密度估计中寻找最小值,您还可以分割数据集。在您的情况下,这似乎表明实际上有 8 个集群;与 k-means 相比,您不必事先选择这个数字。