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