实验8 聚类算法

该文是一个关于使用Python的numpy库实现kmeans聚类算法的代码示例。代码首先读取points.csv文件中的数据,然后初始化K个中心点,通过不断迭代更新中心点位置,直到满足停止条件(中心点变化小于0.1)。最后,确定每个数据点所属的类别并返回结果。
摘要由CSDN通过智能技术生成

实验8 聚类算法

数据见points.csv,编程实现kmeans聚类算法。
测试代码见main.py
(将执行正确的K_MeansPy函数的代码粘贴在此处)

import numpy as np
def K_MeansPy(data,K):
    m=data.shape[0]#m是数据格式,n是数据维数
    n=data.shape[1]
    ma=np.zeros((1,n))#每一维最大的数
    mi=np.zeros((1,n))#每一维最小的数
    u=np.zeros((K,n))#随机初始化,最终迭代到每一类的中心位置 
    #先随机找一个质点
    for i in range(n):
        ma[0,i]=np.max(data[:,i])
        mi[0,i]=np.min(data[:,i])
        for j in range(K):
            u[j,i]=mi[0,i]+(ma[0,i]-mi[0,i])*np.random.rand() 
    while(1):
        pre_u=u.copy()
        coord_diff_cell=np.empty([m,K],dtype=object)
        for i in range(m):
            for j in range(K):
                coord_diff_cell[i,j]=data[i,:]-u[j,:]
        Dist=np.ones((m,K))*-1
        for i in range(m):
            c=np.zeros((1,K))
            for j in range(K):
                c[0,j]=np.linalg.norm(coord_diff_cell[i,j])
            index=c.argmin(1)
            ind=index[0]    #index返回list
            Dist[i,index]=np.linalg.norm(coord_diff_cell[i,ind]) 
        for i in range(K):
            ind =np.nonzero(Dist[:,i]>0)#属于第几个簇
            y=data[ind,:]
            x=y[0,:,:]
            u[i,:]=np.mean(x,axis=0)    #axis=0,计算每一列的均值
        if np.linalg.norm(pre_u-u)<0.1:
            break
    clusterID=np.ones((1,m))*-1
    for i in range(m):
        dist=np.empty([1,K])
        for j in range(K):
            dist[0,j]=np.linalg.norm(data[i,:]-u[j,:])
        index=dist.argmin(1)
        index=index[0]
        clusterID[0,i]=index
    print(clusterID)
return u,clusterID
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值