2012-09-26 54 views
0

我觉得这不会太难。我知道hclust()cutree(),但是如何获得质心的坐标,其中距离它的点距离是否高于给定的半径?我知道质心范围内的点可能已经属于不在范围内的质心。我很好。作为dclust高度不排序将R中的给定半径内的点合并为质心

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)就已经失败。

+0

这听起来更像是k-均值聚类而不是层次聚类。您可以递增地增加k,直到从某点到其群集质心的最差距离在您选择的半径内。 – flodel

+1

您需要更具体地了解您正在尝试做什么。 kmeans()函数可能是你想要的,但是质心位置(和质心的数量)是来自数据还是独立于数据?观察结果能否与集群无法匹敌?如果您始终可以添加质心(群集),那么您可以设置所需的任何最差距离,包括零! kmeans()也不会给出唯一的结果,除非您在开始时提供质心。如果质心来自您的数据,则可能有多种解决方案。 – dcarlson

+0

我们不要谈论观察。我有一些来自OpenStreetMap的数据和两个或更多街道彼此相遇的节点坐标。由于在短距离内有许多上述节点的交叉点(我们人类可以看到它们)(想象一条街道与另一条路线分开),我想要一个表示可视化节点的点。 –

回答

0

使用您的数据并使用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 

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

相关问题