无监督机器学习 K-Means算法python测试
最近在自学吴恩达老师的机器学习视频,学到无监督机器学习K-means算法,自己用python写一些代码加深对此算法的理解
import numpy as np
import matplotlib.pyplot as plt
#生成随机的的点坐标
array=np.random.randn(2,100)
x=array[0]
y=array[1]
#初始化3个聚类质点 3类
x0=np.random.randn()
y0=np.random.randn()
x1=np.random.randn()
y1=np.random.randn()
x2=np.random.randn()
y2=np.random.randn()
while True:
#用于存放每次标记后的点坐标
class0x=[]
class0y=[]
class1x=[]
class1y=[]
class2x=[]
class2y=[]
#用于记录3个聚类质点的数据 在后面与再次转换的数据比较 如果两次的数据一致 说明3个点没变 循环终止
x00=x0
y00=y0
x11=x1
y11=y1
x11=x1
y11=y1
for i in range(len(x)):
#求每个数据点到聚类质点的距离
d0=((x0-x[i])**2+(y0-y[i])**2)
d1=((x1-x[i])**2+(y1-y[i])**2)
d2=((x2-x[i])**2+(y2-y[i])**2)
#如果与0聚类质点距离最小 那归类到0类
if d0==min(d0,d1,d2):
class0x.append(x[i])
class0y.append(y[i])
#如果与1聚类质点距离最小 那归类到1类
if d1==min(d0,d1,d2):
class1x.append(x[i])
class1y.append(y[i])
#如果与2聚类质点距离最小 那归类到2类
if d2==min(d0,d1,d2):
class2x.append(x[i])
class2y.append(y[i])
#重置聚类质点坐标
x0=np.mean(class0x+[0])#加0是为了防止class0x为空 求平均值出错
y0=np.mean(class0y+[0])
x1=np.mean(class1x+[0])
y1=np.mean(class1y+[0])
x2=np.mean(class2x+[0])
y2=np.mean(class2y+[0])
#如果两次的数据一致 说明3个点没变 循环终止
if x00==x0 and y00==y0 and x11==x1 and y11==y1:
break
#画图
plt.scatter(x0,y0,c='r',marker='x')
plt.scatter(x1,y1,c='b',marker='x')
plt.scatter(x2,y2,c='g',marker='x')
plt.scatter(class0x,class0y,c='r',marker='o')
plt.scatter(class1x,class1y,c='g',marker='o')
plt.scatter(class2x,class2y,c='b',marker='o')
plt.show()
![Alt](https://img-blog.csdnimg.cn/20191228175326777.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU5NDM0OA==,size_16,color_FFFFFF,t_70)
来源:CSDN
作者:一柴
链接:https://blog.csdn.net/weixin_44594348/article/details/103747051