numpy-Kmeans

NUMPY—Kmeans聚类)

此代码实现了欧式距离聚类,k值在1-5之间

import numpy as np
import matplotlib.pyplot as plt
def show(x, y, crowd):
    lable = []#存标签
    ans=999999
    flag=0
    for i in range(len(x)):
        for j in range(len(crowd)):
            d=np.sqrt((x[i] - crowd[j][0]) ** 2 + (y[i] - crowd[j][1]) ** 2)#计算欧式距离
            if ans>d:#判断是否比之前的点更小
                ans=d
                flag =j
        lable.append(flag)
        ans=999999#回归初始化
        flag =0
    xx = []
    yy = []
    color =['b','c','g','k','m','r','w']#绘图显示颜色列表
    flaglabel=[]
    for i in range(len(crowd)):
        xx.append(0)
        yy.append(0)
        flaglabel.append(0)#计算每个这个类有多少个,便于求平均值
    for i in range(len(x)):
        plt.scatter(x[i], y[i], c=color[lable[i]])#绘图
        xx[lable[i]]+=x[i]
        yy[lable[i]]+=y[i]
        flaglabel[lable[i]]+=1
    plt.pause(1.5)
    plt.clf()
    for i in range(len(crowd)):
        xx[i]=xx[i]/flaglabel[i]
        yy[i]=yy[i]/flaglabel[i]#得到新的聚点
        crowd[i][0]=xx[i]
        crowd[i][1]=yy[i]
    return crowd#进行返回
if __name__ == '__main__':
    x = np.random.randn(100)#正态分布生成100个随机点
    y = np.random.randn(100)
    crowd = []
    k =int(input("请输入k:  "))#输入k的大小
    for i in range(k):
        crowd.append(np.random.uniform(-3, 3, 2))#生成k个聚点
    for _ in range(k*5):
        crowd = show(x, y, crowd)#调用函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值