机器学习实验之K—Means均值聚类

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

机器学习实训实验报告(五)

专业班级学号姓名

实验项目名称:K—Means均值聚类

实验内容:

1、了解K均值聚类的支持函数,以及如何选取质心。

2、理解K均值聚类的定义,熟悉其算法过程。

3、根据书P202表4.4的数据,选取不同K值,对其进行聚类,下是部分数据:

实验过程:

算法分析:

K—Means的一般步骤:

1、在数据集中,随机地选择k

个对象,每个对象代表一个簇的

初始均值(中心);

2、对剩下的每个对象,分别计算

其与各个簇中心的欧式距离(事

实上就是计算相似性),将它分配

到最相似的簇;

3、更新簇中心。对于每个簇来说,

就是根据簇中的当前对象,来重

新计算每个簇的均值,然后把该

均值作为新的簇的中心。

4、然后重复第2,3步直至分配稳

定。

算法伪代码(简):

创建k个作为起始质心(通常是

随机选择)

当任意一个点的簇分配结果发生

改变时

对数据集中的每个数据点

对每个质心

计算质心与数据点

之间的距离

将数据点分配到距离其

源程序代码:

from numpy import *

#函数说明:数据加载处理

def loadDataSet(fileName):

dataMat = [] #存放数据的矩阵

fr = open(fileName)

for line in fr.readlines(): #按行遍历文档

curLine = line.strip().split('\t') #对数据进行分割处理

fltLine = list(map(float,curLine)) #数据全部转化为float类

dataMat.append(fltLine) #插入数据

return dataMat

#函数说明:计算欧式距离

def distEclud(vecA, vecB):

return sqrt(sum(power(vecA - vecB, 2)))

#函数说明:生成初始的质心

def randCent(dataSet, k):

n = shape(dataSet)[1] #计算数据的列数赋予n

centroids = mat(zeros((k, n))) #初始化质心矩阵为0

for j in range(n): #遍历每一列

minJ = min(dataSet[:, j]) #找到第j列最小值

rangeJ = float(max(dataSet[:, j]) - minJ) #求第j列最大值

与最小值的差

centroids[:, j] = minJ + rangeJ * random.rand(k, 1) #生成k

行1列的在(0, 1)之间的随机数矩阵

return centroids

运行结果:1、k=3时

2、k=4时

3、k=5时

实验总结:

本节实验加深了我对聚类的认识,让我更加熟悉了K均值聚类的算法思想,但是只是对单个的计算了解了,但是对于代码中的全部的数据转化为矩阵进行矩阵的运算而言,这方面它内在是如何计算的却是不太清楚,本实验对于结果仍有以下疑问:clustasing部分展现出来的结果,看上去像是计算的值超出范围(过小?、代码公式问题?),不太明白得出的结果是否正确,如果正确其意义是什么。而如果错误,又是什么地方错误。

实验成绩评定

评分小项分值得分总分:

1.实验报告格式排版10分

2.实验设计思路(科学性、可行性、创新性) 30分

3.实验代码编写(规范性、正确性、复杂性) 30分

4.实验结果分析(正确性、合理性) 20分

5.实验心得总结10分

相关文档
最新文档