【问题标题】:Distance of pointsfrom cluster centers after K means clusteringK表示聚类后点与聚类中心的距离
【发布时间】:2015-02-27 09:43:26
【问题描述】:

我正在使用R 中的kmeans 函数执行K 均值聚类。缩放我的数据后。在我得到集群之后,我想要每个点到它的集群中心的距离,而不是获得单独的集群分配。这是我正在使用的代码。

data=read.csv("C:/Users/My_Folder/data.csv") # A data frame of 200 rows and 20 variables
traindata=data[,c(3,4)] # Features on which I want to do clustering
traindata=scale(traindata,center = T,scale=T) # Feature Scaling
km.result=rep(0,nrow(traindata))
km.cluster = kmeans(traindata, 2,iter.max=20,nstart=25)$cluster
cluster_1_num = sum(km.cluster==1)
cluster_2_num = sum(km.cluster==2)
if(cluster_1_num>cluster_2_num){
  km.result[km.cluster==1]=1}
else{
  km.result[km.cluster==2]=1}
data$cluster=km.result

这段代码有效地将我的 200 行分成 2 个集群。代替标签,有没有办法从它的集群中心获取每个点的距离。我是否需要将我的数据重新缩放为原始值。

【问题讨论】:

  • 给我们一个可重现的小例子如何?
  • @RomanLuštrik,好的。我已经给出了我正在使用的代码。有什么方法可以提供我的数据的 csv 文件?
  • 构建一个最小的、自包含的示例。请参阅this topic,了解有关如何实现此目的的提示。

标签: r cluster-analysis k-means


【解决方案1】:

碰巧您只捕获了kmeans 的返回值的cluster 元素,它还返回了集群的centers。试试这个:

 #generate some data
 traindata<-matrix(rnorm(400),ncol=2)
 traindata=scale(traindata,center = T,scale=T) # Feature Scaling
 #get the full kmeans
 km.cluster = kmeans(traindata, 2,iter.max=20,nstart=25)
 #define a (euclidean) distance function between two matrices with two columns
 myDist<-function(p1,p2) sqrt((p1[,1]-p2[,1])^2+(p1[,2]-p2[,2])^2)
 #gets the distances
 myDist(traindata[km.cluster$cluster==1,],km.cluster$centers[1,,drop=FALSE])
 myDist(traindata[km.cluster$cluster==2,],km.cluster$centers[2,,drop=FALSE])

当然你可以根据自己的需要编写自己的myDist函数。

【讨论】:

    猜你喜欢
    • 2018-09-30
    • 1970-01-01
    • 2018-08-12
    • 2011-12-09
    • 2016-05-29
    • 2013-07-28
    • 1970-01-01
    • 2018-07-02
    • 2019-06-01
    相关资源
    最近更新 更多