无监督机器学习 K-Means算法python测试

微笑、不失礼 提交于 2019-12-28 18:54:34

最近在自学吴恩达老师的机器学习视频,学到无监督机器学习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)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!