Python实现k均值聚类算法_K-Means聚类算法
若想快速了解k均值聚类算法_K-Means聚类算法,可参考这位大佬的文章,通俗易懂:k均值聚类算法考试例题_K-Means聚类算法,作者:weixin_39789792
感谢这位博主。
本篇博客仅作为自用笔记,如有侵权联系删除。
代码详细
注意:
质心k的坐标取值不能取的太离谱,比如三个质心中有一个质心的坐标离样本数据中所有坐标都很远,就会导致列表sse_k1(或k2、k3)中无数据,便使len(sse_kx(x为1、2、3))=0,报错:ZeroDivisionError: division by zero
import pylab as pl
def square_Euclid(x, y):
"""
计算欧几里得距离:
若是两个平面上的点,即(x1,y1),和(x2,y2),那这俩点距离即√( (x1-x2)^2+(y1-y2)^2);
如果是三维空间中的点,则为√( (x1-x2)^2+(y1-y2)^2+(z1-z2)^2 。
"""
return (x[0] - y[0]) ** 2 + (x[1] - y[1]) ** 2
# 初始化各个点
num_x = []
num_y = []
fl = open('data01.txt') # 点数据存放在data01.txt中
for line in fl.readlines():
curLine = line.strip().split()
num_x.append(float(curLine[0]))
num_y.append(float(curLine[1]))
# 初始化三个质心,经过聚类得到三个分组
k1 = [-1.7,