gpt4 book ai didi

python - 计算 k-means 的距离时环绕

转载 作者:太空宇宙 更新时间:2023-11-03 15:18:34 24 4
gpt4 key购买 nike

我正在尝试使用 sklearn 对某些数据集进行 K 均值聚类。问题是其中一个维度是一天中的小时数:一个从 0 到 23 的数字,因此距离算法认为 0 离 23 很远,因为从绝对意义上讲它是。实际上,出于我的目的,0 小时非常接近 23 小时。有没有办法让距离算法进行某种形式的环绕,以便计算更“真实”的时差。我正在做一些简单的事情,类似于以下内容:

from sklearn.cluster import KMeans

clusters = KMeans(n_clusters = 2)
data = vstack(data)
fit = clusters.fit(data)
classes = fit.predict(data)

data 元素类似于 [22, 418, 192],其中第一个元素是小时。

有什么想法吗?

最佳答案

即使@elyase 的回答被接受,我认为这不是正确的方法。

是的,要使用这样的距离,您必须改进距离测量,因此 - 使用不同的库。但更重要的是 - k-means 中使用的 mean 概念不适合循环维度。让我们考虑以下示例:

#current cluster X,, based on centroid position Xc=24
x1=1
x2=24

#current cluster Y, based on centroid position Yc=10
y1=12
y2=13

计算简单的算术平均值会将质心置于Xc=12.5,Yc=12.5,从循环测量的角度来看是不正确的,应该是Xc=0.5,Yc=12.5。如您所见,基于循环距离度量的分配与简单的均值运算不“兼容”,并导致奇怪的结果。

  • 简单的 k-means 将产生聚类 {x1,y1}, {x2,y2}
  • 简单的 k--means + 距离测量导致退化的 super 集群 {x1,x2,y1,y2}
  • 正确的聚类应该是 {x1,x2},{y1,y2}

解决这个问题需要检查一个如果(是否更好地测量“简单平均”或将其中一个点表示为 x'=x-24)。不幸的是,给定 n 个点,它有 2^n 个可能性。

这似乎是核化 k-means 的一个用例,您实际上是在抽象特征空间中进行聚类(在您的例子中 - 一个围绕时间维度滚动的“管”)由内核(“相似性度量”,是某些向量空间的内积)。

给出了内核 k-means 的详细信息 here

关于python - 计算 k-means 的距离时环绕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18689427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com