R K-表示初始中心成员资格

R K-表示初始中心成员资格,r,cluster-analysis,k-means,R,Cluster Analysis,K Means,我试图用r来描绘k-means算法的所有步骤,但我做不到 k-means算法的工作方式如下: 第一步。初始化簇的中心 第二步。为每个数据点指定最近的初始中心 第三步。将每个簇的位置设置为属于该簇的所有数据点的平均值 第四步。将最近的簇指定给每个数据点 第五步。重复步骤3-4直到收敛 我绘制数据集和簇的初始中心(步骤1)。此外,我还可以绘制新的簇中心,并显示属于每个簇的点(步骤3和步骤4)。但我不知道如何绘制步骤2。在第一次迭代之前,我需要每个点的第一个初始中心成员身份,但是kmeans()没

我试图用r来描绘k-means算法的所有步骤,但我做不到

k-means算法的工作方式如下:

  • 第一步。初始化簇的中心
  • 第二步。为每个数据点指定最近的初始中心
  • 第三步。将每个簇的位置设置为属于该簇的所有数据点的平均值
  • 第四步。将最近的簇指定给每个数据点
  • 第五步。重复步骤3-4直到收敛
我绘制数据集和簇的初始中心(步骤1)。此外,我还可以绘制新的簇中心,并显示属于每个簇的点(步骤3和步骤4)。但我不知道如何绘制步骤2。在第一次迭代之前,我需要每个点的第一个初始中心成员身份,但是
kmeans()
没有提供。我怎么计算呢

这是我的密码:

set.seed(2009)
points1<-data.frame(x=rnorm(50,1,0.1),y=rnorm(50,5,0.1))
points2<-data.frame(x=rnorm(50,5,0.1),y=rnorm(50,5,0.1))
points3<-data.frame(x=rnorm(200,3,0.8),y=rnorm(200,3,0.8))
df<-rbind(points1,points2,points3)

p <- ggplot(df, aes(x, y))
p + geom_point(size=7, color="grey") + labs(title="Initial configuration")

y<-c(4.88871745,4.88099143,3.69713723)
x<-c(0.75606015,1.26736958,3.04961545)
kcenters<-data.frame(x,y)

p + geom_point(size=7, color="grey") + geom_point(data=kcenters, aes(x, y), size=7, color="black", shape="x") + labs(title="Initial centers")

dfCluster<-kmeans(df,centers=kcenters, iter.max = 1)

p + geom_point(size=7, aes(colour=as.factor(dfCluster$cluster))) + geom_point(data=data.frame(dfCluster$center), aes(x, y), size=7, color="black", shape="x")+ theme(legend.position="none") + labs(title="First iteration")
然后,您可以继续此过程,稍微调整上面的代码:

#assignment
df<-rbind(df[,1:2],kcenters)
row.names(df) <- NULL
distances <- melt(as.matrix(dist(df,diag=T,upper = T)), varnames = c("row", "col"))
dist_center1<-subset(distances,col==301,select = value)
dist_center2<-subset(distances,col==302,select = value)
dist_center3<-subset(distances,col==303,select = value)
dist_centers<-data.frame(dist_center1,dist_center2,dist_center3)
colnames(dist_centers)<-c("dist_center1","dist_center2","dist_center3")
dist_centers$cluster<-apply(dist_centers, 1, which.min)
df<-cbind(df[1:300,],dist_centers[1:300,])

#plot assignment
p + geom_point(size=7, aes(colour=as.factor(df$cluster))) + geom_point(data=kcenters, aes(x, y), size=7, color="black", shape="x") + theme(legend.position="none")

#calculate new centers
x<-tapply(df$x,df$cluster,mean)
y<-tapply(df$y,df$cluster,mean)
kcenters<-data.frame(x,y)

#plot new centers
p + geom_point(size=7, aes(colour=as.factor(df$cluster))) + geom_point(data=kcenters, aes(x, y), size=7, color="black", shape="x") + theme(legend.position="none")

这些中心与我在程序的第一次迭代中得到的中心不匹配(#计算新中心)。我必须运行14次(分配和计算新中心)才能获得它们。我不知道
kmeans()
过程中“迭代”的含义。有人知道吗?

kcenters
是您的初始质心


kmeans方法可能无法进行0次迭代,但这些是中心…

也许我误解了这个问题,但第一个初始中心不是点本身吗?
#assignment
df<-rbind(df[,1:2],kcenters)
row.names(df) <- NULL
distances <- melt(as.matrix(dist(df,diag=T,upper = T)), varnames = c("row", "col"))
dist_center1<-subset(distances,col==301,select = value)
dist_center2<-subset(distances,col==302,select = value)
dist_center3<-subset(distances,col==303,select = value)
dist_centers<-data.frame(dist_center1,dist_center2,dist_center3)
colnames(dist_centers)<-c("dist_center1","dist_center2","dist_center3")
dist_centers$cluster<-apply(dist_centers, 1, which.min)
df<-cbind(df[1:300,],dist_centers[1:300,])

#plot assignment
p + geom_point(size=7, aes(colour=as.factor(df$cluster))) + geom_point(data=kcenters, aes(x, y), size=7, color="black", shape="x") + theme(legend.position="none")

#calculate new centers
x<-tapply(df$x,df$cluster,mean)
y<-tapply(df$y,df$cluster,mean)
kcenters<-data.frame(x,y)

#plot new centers
p + geom_point(size=7, aes(colour=as.factor(df$cluster))) + geom_point(data=kcenters, aes(x, y), size=7, color="black", shape="x") + theme(legend.position="none")
> dfCluster$centers
         x        y
1 1.129419 4.905327
2 2.928011 2.880839
3 4.715513 4.766608