以下代码为简单的随机k-均值聚类法,距离计算方法为平方差
import numpy as np
import random
import math
#载入数据
#filename:载入文件名
def loadDataSet(filename):
dataSet = []
fr = open(filename)
for line in fr.readlines():
mat0 = line.strip().split('\t')
mat1 = list(map(float,mat0))
dataSet.append(mat1)
return dataSet
#随机选取k个点作为起始质点
#dataSet:数据集
#k:指定聚类数
#Clu:初始化的质点矩阵
#initClu:最初的选取质点矩阵:防止选取重复初始质点
def initClu(dataSet,k):
m,n = np.shape(np.mat(dataSet))
Clu = np.zeros((k,n))
initClu = np.zeros((k,1)).astype(int)
#检查是否重复
check = 0
for i in range(k):
newClu = math.ceil(random.random()*m)
for j in range(k):
checkClu = initClu[j][0]
#如果检查完当前存储的质点,则跳出循环
if checkClu == 0:
break
#若出现重复,则报错(本来打算i--,但是发现python的for循环的i的变化对循环没有影响,于是选择报错