用R语言的kmeans函数对单元测试成绩聚类
iefan
posted @ 2013年5月07日 15:45
in 教学工作
, 2098 阅读
1、在ubuntu下安装:采用命令行sudo apt-get R-base,具体可参见官方网站;在windows下有二进制安装包可下载。
2、在R环境中用source()加载运行r脚本时,在windows下脚本编码需要用gbk,在linux下,用utf8,否则汉字编码在运行中会出现错误提示。
3、用kmeans函数对数据集分别聚类,将结果提取并保存,而后用柱状图绘制单元测试成绩结果。
程序如下:
grade = read.table("grade1to5.dat", header=TRUE)
g_l = length(names(grade))
histdata = matrix(0, 6, g_l)
for(indx in 1:5) {
a = kmeans(grade[indx],6)
bb = cbind(a$centers, a$size)
cc = as.data.frame(bb) #必须转换为data.frame,否则不能用order排序
dd = cc[order(cc$unit),] #此时以cc第一列进行排序,第一列名称为unit*
histdata[,indx] = dd[,2]
print(dd)
}
print(histdata)
namearg <- c('差','较差','中下','中等','较好','好')
legendtxt <- c('1单元', '2单元','3单元','4单元','5单元')
barplot(t(histdata), beside=TRUE, names.arg=namearg, legend.text=legendtxt)
需要注意的是,kmeans方法并非每次聚类结果都一样,对于分类而言,这种情况并不是最优,只能起到一定的参考作用。
2013年5月08日 00:08
kmeans++ 好像每次聚类结果是一样的?
2013年5月14日 16:47
@依云: kmeans++没试过 ,这是一年多前的测试结果了,刚搬家到这儿。