K表示聚类后,聚类中心的点距离

时间:2014-12-31 09:10:31

标签: r cluster-analysis k-means

我正在使用kmeans中的R函数执行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个群集。而不是标签,有一种方法可以从每个点的集群中心获得距离。我是否需要将数据重新调整为原始值。

1 个答案:

答案 0 :(得分:2)

恰好您只捕获cluster返回值的kmeans元素,该元素还返回集群的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功能。