K-means 算法的理解与代码实现
K-means 算法又名K均值算法,是一种聚类算法,K-means 算法是在无监督的情况下将一堆没有标签的点,找特征归类为簇。其算法思想大致为:最开始在所有样本点中随机选取k个点,作为簇中心点,然后分别计算样本点到k个中心点的距离,对于样本点,将其归类到与它距离最近的中心点所属的簇中,这一步完成后,再计算每个簇中所有样本点的平均值,更新簇中心的位置,重复多次,直到簇中心的位置不再变化。
1.K-means算法伪代码
1.随机生成num个二维样本点的数据集(也可以让数据集在某个范围内随机生成)
2.KMeans(dataSet, k, maxIter = )函数过程:
3. 从num个样本点中随机选出k个点作为初始的簇中心点
4. while 判断簇中心是否还在变化 循环不超过maxIter次
5. for i =0,1,2…,num
6. 用“欧氏距离”求出num个样本点到K个中心点的距离
根据距离最近的“簇中心”λj=argmini∈{1,2,…,k}将该点归类到这个簇中
7. for i =0,1,2…,k
8. 求出簇中所有点的均值,更新簇中心
9. return 聚类中心,点分配结果
10.打印图像
2.代码实现
随机生成num个二维样本点
def creatDataSet(num):
'''
随机生成数据集
Args:
num: 数据集个数
Returns:
dataMat: 数据样本矩阵
'''
dataMat = []
for i in range(num):
generateddata=[random.uniform(-5.0,0.0),random.uniform(-5.0,0.0)]
if not generateddata in dataMat:#去掉重复数据