延伸<[Excel]k-means聚类算法的应用,以评价现有供应商的水平为例。>文章,同时恰巧在图书馆看到一本R语言机器学习书籍,因此正好可进一步了解如何用R语言来实现k-means算法和应用,一并将k-means模组建立起来,做为未来参照使用。
利用R语言常用的iris数据集,同时在已知有三个品种的鸢尾花(setosa, versicolor, virginica),分别各有50个样品,程式码如下:
#clear
rm(list=ls())
#pull in data
kmean_iris<-iris
#erase species data
kmean_iris$Species<-NULL
#apply k-mean with k=3
clusters<-kmeans(kmean_iris,3,iter.max=100,nstart = 20)
#plot the clustered points along sepal length and width
plot(kmean_iris[c("Petal.Length","Petal.Width")], col=clusters$cluster,pch=16, cex=1)
#plot the center of group
points(clusters$centers[,c("Petal.Length","Petal.Width")],col="blue",pch=8, cex=5)
#comparsion
Realdata<-as.data.frame(table(iris$Species))
kmeanresult<-as.data.frame(table(clusters$cluster))
#输出结果
> kmeanresult
Var1 Freq
1 1 62
2 2 50
3 3 38
由结果可知,依照k-means算法,根据花瓣(Petal)的长度和宽度的分布,若以设定三种类别来区分,分别各有62个, 50个和38个,换言之,两个品种(versicolor和virginica)花瓣的长度和宽度相似。
Reference:
R语言机器学习(实用案例分析),ISBN 978-7-111-56590-1