聚类K_means的底层实现

本文介绍了使用Python的numpy和matplotlib库实现K-means聚类算法的过程,通过计算样本点到质心的距离并更新质心位置,直至收敛,展示了聚类前后样本点和质心的分布变化。
摘要由CSDN通过智能技术生成

import numpy as np  
import matplotlib.pyplot as plt
import copy   
# 生成样本点==>特征
x=np.array([[1,2],[3,4],[4,5],[6,7]])
# 定义K个质心
C=np.array([[4.0,2.0],[5.0,3.0]])
# 展示处理之前的样本点和质心的距离
plt.scatter(x[:,0],x[:,1],marker='.',s=50,c='orange',)
plt.scatter(C[:,0],C[:,1],marker='*',c='red')
plt.show()
while True:
    #计算每个样本到质心的距离
    B=[]
    C_=copy.deepcopy(C)
    for c in C:
        dist = np.sqrt(((x-c)**2).sum(axis=1)) # 欧式距离 计算公式
        B.append(dist)
    # 求归属 判断每个样本点距离那个质心更近
    min_dix = np.argmin(B,axis=0)
    # 更新质心
    for i in range(len(C)):
        C[i] = np.mean(x[min_dix==i],axis=0)
        # 如果计算的质心与新的中心点位置一样,质心不需要在移动位置了
    if (C==C_).all():
        break
# 展示处理之后的样本点和质心的距离
plt.scatter(x[:,0],x[:,1],marker='.',s=50,c='orange',)
plt.scatter(C[:,0],C[:,1],marker='*',c='red')
plt.show()
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值