我也不会写,就注释一下下,希望各位大佬宽容一下我这个“水货”,谢谢
from numpy import *
# 数据的预处理
def loadDataSet(fileName):
dataMat = [] # 创建一个列表
fr = open(fileName) # 打开数据文本文件
for line in fr.readlines(): # 逐行读取
# split('\t')指定分给符对数据进行切割; strip(rm) 默认删除空白符:\t \n \r and 空格
curLine = line.strip().split('\t')
fltLine = list(map(float, curLine)) # map作用:将函数float作用于curLine,并返回一个数组
dataMat.append(fltLine) # 将处理的数据依次加入到列表中
return dataMat
# 计算两个点之间的欧式距离
def distEclud(vecA, vecB):
return sqrt(sum(power(vecA - vecB, 2))) # (vecA-vecB)的乘方
# 初始化随机中心
# 函数参数:dataset:数据集;k:质心的个数
def randCent(dataSet, k):
n = shape(dataSet)[1] # 获取数据长度:列
centroids = mat(zeros((k, n))) # 初始化一个zeros参数是(k*n)元组的零矩阵
for j in range(n): #j从0到n取值
minJ = min(dataSet[:, j]) # 取J列中的所有行元素,并得到J列所有行的最小值
rangeJ = float( max(dataSet[:, j]) - minJ) # float从j列所有行元素中选取最大值-最小值并将类型转换为
centroids[:, j] = mat(minJ + rangeJ * random.rand(k, 1)) # 构建簇的质心
return centroids # 返回这个簇矩阵
#K均值聚类算法
# 参数:
# dataSet:数据集
# k:质心数量==簇数量
# distMeas:两个点之间的欧氏距离
# createCent:初始化质点的中心
def kMeans(dataSet, k, distMeas=distEclud, createCent=<