k均值算法针对聚类所得簇划分求得最小平方误差,k均值算法采用了贪心策略,通过迭代优化来近似求解
算法如下:
kmeans的计算方法如下:
1 随机选取k个中心点
2 遍历所有数据,将每个数据划分到最近的中心点中
3 计算每个聚类的平均值,并作为新的中心点
4 重复2-3,直到这k个中线点不再变化(收敛了),或执行了足够多的迭代
使用iris数据集完成kmeans聚类实验
首先预处理数据集,聚类的时候,去掉种类标记
newiris <- iris
newiris$Species <- NULL
可以打印种类标记来选择聚类簇的个数
print(iris$Species)
得知有三个种类,执行kmeans函数,格式:kmeans(数据集,聚类簇数)
kc <- kmeans(newiris, 3) #分类模型训练
fitted(kc) #查看具体分类情况
table(iris$Species, kc$cluster)#查看分类概括
聚类图可视化
png(file = "./R/png/kmeans.png")
plot(newiris[c("Sepal.Length", "Sepal.Width")], col = kc$cluster, pch = as.integer(iris$Species))
points(kc$centers[,c("Sepal.Length", "Sepal.Width")], col = 1:3, pch = 8, cex=2);
dev.off()
根据聚类之后簇的编号划分颜色。不同形状对应数据集不同的类型
从图中可以看出,基本上不同的形状都归于了不同的颜色