1.算法原理
根据k-均值算法的工作流程,我们可以写出伪代码:
创建k个点作为初始质心(通常是随机选择)
当任意一个点的簇分配结果发生改变时:
对数据集中的每个点:
对每个质心:
计算质心与数据点之间的距离
将数据点分配到据其最近的簇
对每个簇,计算簇中所有点的均值并将均值作为新的质心
直到簇不再发生变化或者达到最大迭代次数
距离计算公式可以使用欧几里得距离,曼哈顿距离,闵可夫斯基距离等等,代码展示为了简单使用欧几里得距离。
2.代码实现
import numpy as np
import matplotlib.pyplot as plt
# 计算距离
def euclDistance(vector1, vector2):
return np.sqrt(sum((vector2 - vector1) ** 2))
# 初始化质心
def initCentroids(data, k):
numSamples, dim = data.shape
# k个质心,列数跟样本的列数一样
centroids = np.zeros((k, dim))
# 随机选出k个质心
for i in range(k):
# 随机选取一个样本的索引
index = int(np.random.uniform(0, numSamples))
# 作为初始化的质心
centroids[i, :] = data[index, :]
return centroids
# 传入数据集和k的值</