【问题标题】:Combine points within given radius in R to a centroid将R中给定半径内的点组合到质心
【发布时间】:2012-09-26 13:36:34
【问题描述】:

我觉得这不能太难。我知道hclust()cutree(),但是如何获得质心的坐标,其中没有点距离高于给定半径?我知道质心范围内的点可能已经属于不在范围内的质心。我没问题。

set.seed(1)
data <- matrix(runif(100),ncol=2)
plot(data) 
dclust <- hclust(dist(data),method="centroid")
cutree(dclust,h=0.1)

cutree(...,h=0.1) 已经失败,因为dclust 的高度没有排序。

【问题讨论】:

  • 这听起来更像是 k-means 聚类而不是层次聚类。您可以逐渐增加 k,直到从一个点到其集群质心的最差距离在您选择的半径范围内。
  • 您需要更具体地了解您想要做什么。 kmeans() 函数可能是您想要的,但是质心位置(和质心数量)是来自数据还是独立于数据?观察可以与集群不匹配吗?如果你总是可以添加一个质心(集群),那么你可以设置任何你想要的最差距离,包括零!除非您在开始时提供质心,否则 kmeans() 也不会给出唯一的结果。如果质心来自您的数据,则可能有多种解决方案。
  • 我们先不谈观察。我有一些来自 OpenStreetMap 的数据以及两条或多条街道相交的节点坐标。由于在短距离内有许多上述节点的交叉口(正如我们人类所看到的那样)(想象一条街道,不同的车道与另一条车道相遇)我想要一个代表这些节点的点,例如用于可视化。

标签: r cluster-analysis centroid


【解决方案1】:

使用您的数据并对 25 个组运行 kmeans 会产生以下结果。这就是你的意思吗?

Example <- kmeans(data, 25)
plot(data, type="n")
text(Example$centers, unlist(dimnames(Example$centers)), col="red")
text(data, as.character(Example$cluster), cex=.75)
cdist <- sqrt((data[,1] - Example$centers[Example$cluster, 1])^2 + 
     (data[, 2] - Example$centers[Example$cluster, 2])^2)
names(cdist) <- 1:50
cdist

最后三行计算并显示每个点到它所分配的质心的距离。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 2012-12-15
    • 2016-07-24
    • 1970-01-01
    • 2011-04-25
    • 2010-12-10
    • 1970-01-01
    相关资源
    最近更新 更多