转载原文:https://mp.weixin.qq.com/s/bb6MlVBCKPfV86qogCMblw
基本原理:
1 随机选取k个中心点
2 遍历所有数据,将每个数据划分到最近的中心点中
3 计算每个聚类的平均值,并作为新的中心点
4 重复2-3,直到这k个中线点不再变化(收敛了),或执行了足够多的迭代
newiris <- iris;
newiris$Species <- NULL; #对训练数据去掉分类标记
kc <- kmeans(newiris, 3); #分类模型训练
View( fitted(kc) ); #查看具体分类情况
table(iris$Species, kc$cluster); #查看分类概括(iris$Species是没有删掉的原数据分类标签)
#聚类结果可视化
win.graph(width=4,height=4,pointsize=8)
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);