【问题标题】:Error in Mean shift Clustering when input is distance matrix输入为距离矩阵时均值偏移聚类中的错误
【发布时间】:2014-01-02 19:12:49
【问题描述】:

当我运行以下代码时:

library(fossil)
df    <- data.frame(long,lat)
dist  <- earth.dist(df, dist=F) #calculating distance matrix
library(LPCM)
ms(dist,0.43,scaled=TRUE,iter=100,plotms=1)

我收到一个错误:

Error in if (th[j] < thresh) { : missing value where TRUE/FALSE needed

我已经通过了运行均值偏移聚类所需的每个输入。为什么我会收到此错误? 如何告诉ms输入是距离矩阵而不是数据矩阵?

    head(df)
      long      lat
1 116.3313 39.97575
2 116.3315 39.97562
3 116.3319 39.97550
4 116.3321 39.97545
5 116.3324 39.97550
6 116.3327 39.97548

【问题讨论】:

  • 尝试将na.rm = TRUE 作为另一个参数传递给ms
  • @Scott Ritchie 试过了,不行

标签: r cluster-analysis


【解决方案1】:

试试这个

ms(dist,0.43,scaled=TRUE,iter=100,plotms=1,na.rm=TRUE)  

在错误之后立即给出命令 traceback()。这将使您找出导致错误的代码行。看看是否有任何您不希望在该迭代中出现的内容丢失或为 0。

【讨论】:

  • traceback() 不会告诉任何事情。它会告诉错误发生在 ms(dist,0.43,scaled=TRUE,iter=100,plotms=1,na.rm=TRUE)
【解决方案2】:

由于ms 函数似乎无法处理缺失值,因此您必须将它们从数据框中删除:

df <- df[apply(df, 1, function(x) !any(is.na(x))),]
dist  <- earth.dist(df, dist=F) #calculating distance matrix
library(LPCM)
ms(dist,0.43,scaled=TRUE,iter=100,plotms=1)

【讨论】:

  • dist 是一个距离矩阵,因此所有对角线元素都为零。 df 中没有缺失值,但可能在 dist 中。我使用上面的代码来删除它们。仍然遇到同样的错误
  • 您能否使用head(df) 的输出更新您的问题,以便我们可以处理一些数据?
【解决方案3】:

就我所理解的均值偏移而言,

Mean-Shift 不能与预先计算的距离矩阵一起使用

因为它需要移动点,并计算距离移动位置的距离。您将如何预先计算这些距离?

这与 k-means 基本相同,也需要到均值的距离。

【讨论】:

  • 是的,我想这是对的。我尝试了 k-means 和 PAM,然后我使用了 dbscan。到目前为止,dbscan 是最好的,但在 dbscan 中,集群也不是我想要的方式。
  • 绝对尝试完整链接聚类,从您之前的问题来看,这似乎是最好的。但除非您在 -180+180 度线附近有大量数据,否则 ELKI 中的均值偏移对您来说应该没问题,它可以使用大地距离。仅仅计算平均值也会在日期线附近严重失败。但是,由于您对集群的最大直径感兴趣,这只是要求“完全连接”。
  • 有没有ELKI的教程。我找不到任何
  • 搜索“ELKI 教程”会为我提供结果。但显然它最终不像 R 那样古老或大......但大多数 R 包也没有附带教程。
猜你喜欢
  • 2021-05-07
  • 2011-02-25
  • 1970-01-01
  • 2016-03-20
  • 2015-04-21
  • 2013-07-14
  • 2013-04-21
  • 2014-07-28
  • 2019-02-05
相关资源
最近更新 更多