用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方法并非每次聚类结果都一样,对于分类而言,这种情况并不是最优,只能起到一定的参考作用。

Avatar_small
依云 说:
2013年5月08日 00:08

kmeans++ 好像每次聚类结果是一样的?

Avatar_small
iefan 说:
2013年5月14日 16:47

@依云: kmeans++没试过 ,这是一年多前的测试结果了,刚搬家到这儿。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter