k-means 聚类结果不明确

数据挖掘 r k-均值
2022-02-16 20:40:14

我是数据挖掘的新手。我决定使用简单的人工数据在 r 中使用 k-means 聚类。

set.seed(101)    
x1 <- runif(100,36.6,37.5)
x2 <- runif(100,37.6,38.4)
x3 <- runif(100,38.5,40)
x<-c(50,150,250)
y<-c(37,38,39.25)

centers<-c(37.05,38,39.25)
all <- c(x1,x2,x3)
c1<-kmeans(all,centers=centers,iter.max = 1000,nstart=1,algorithm="Lloyd")
plot(all,col = c1$cluster)
points(x,y,col="red",pch=19)

我生成了三个随机数据集x1,x2,x3然后我取每个集群的中心,就像每组的平均值一样,并使用 r 的 k-means 算法。结果我得到了你在图片中看到的东西。

我做错了什么?

为什么第二个集群包含第三组的部分?如何提高成绩?

为什么结果如此糟糕,而不是集合是线性分离的?

主要问题是如何提高聚类结果? 在此处输入图像描述

1个回答

一维数据集在数据点之间的任何点集上都是“线性可分的”。Kmeans 不是最近邻类型的聚类算法,它只是划分空间,使每个点都属于其最近的聚类中心,因此您的数据可能在源聚类之间存在巨大差距,但如果该算法将是“错误的”集群有不同的范围。

例如,如果您从间隔 (0,1) 和 (2,20) 上的两个聚类生成点,即使 1 和 2 之间存在差距,聚类算法仍会分配来自较高源的大量点聚类到较低的聚类,因为它们更接近该聚类中心。对于每个重要的点,它到集群中心的距离,而不是到邻居的距离。如果您期望集群之间存在间隙,请使用另一种集群算法(如最近邻)。