首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多变量时间序列聚类-关于距离矩阵的问题

多变量时间序列聚类-关于距离矩阵的问题
EN

Stack Overflow用户
提问于 2019-04-25 12:01:29
回答 2查看 428关注 0票数 0

我正在尝试使用R对气象站进行集群。气象站提供诸如温度、风速、湿度等每小时间隔的数据。我可以使用tsclust库轻松地对单变量时间序列进行聚类,但当我对多变量序列进行聚类时,我会得到错误。

我有一个列表形式的数据,所以每个列表元素都是一个矩阵,其中包含一个站点的时间序列数据(变量是列,行是不同的时间戳)。

如果我运行:

代码语言:javascript
复制
tsclust(data, k = 2,
                   distance = 'Euclidean',   seed = 3247, trace = TRUE)

I get error: Error in do.call(.External,c(list(CFUN,x,y,pairwise,if (!is.function(method)) get(method) else method),:不是标量返回值

如果我尝试只计算距离矩阵,我会得到相同的错误

代码语言:javascript
复制
dist(data, method="euclidean")

也许这样的数据不能计算欧几里德距离?如果是,那么可以计算出什么距离?

EN

回答 2

Stack Overflow用户

发布于 2019-04-26 02:09:30

你应该仍然可以使用欧几里得。

您只需自己实现它,因为标准方法只适用于向量,而不适用于矩阵。但这对于您自己的实现来说应该是微不足道的。

但是,如果您的变量具有不同的单位和大小,则很可能会遇到缩放问题。

票数 0
EN

Stack Overflow用户

发布于 2019-04-27 06:21:33

如果你的序列有相同的长度,你可以将它们转换成一个向量,然后重新调整维度。然而,就像Anony-Mousse提到的那样,对具有不同尺度的变量使用欧几里德距离可能会有问题,因此考虑使用zscore进行标准化

代码语言:javascript
复制
series <- zscore(data)
pc <- tsclust(lapply(series, as.vector), distance="Euclidean", seed=3247L, trace=TRUE)

pc@datalist <- series
# replace ncol with the actual number of columns from your data
pc@centroids <- lapply(pc@centroids, matrix, ncol=3L)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55841627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档