第四课:模型补充
k-means聚类
【代码】k-means代码Demo
作者 : 老饼 日期 : 2022-06-26 23:31:57 更新 : 2022-09-27 17:11:44
本站原创文章,转载请说明来自《老饼讲解-机器学习》ml.bbbdata.com


本文展示一个简单的python实现的k-means实现Demo.并展示最后的聚类结果。



  01. 代码简介  


  目  的  


代码先以5个中心点随机生成150个样本点,
然后尝试用k-means聚类,看能否找出中心点。
 




  聚类过程 


使用k-means算法,
先初始化5个聚类中心点,
然后根据k-means的迭代规则,不断调5个聚类中心点的位置,
经过20轮迭代后,输出聚类中心点的位置。
最后,根据样本所属的聚类中心点,给样本标上颜色。



  聚类结果  


聚类结果如下:
 

可以看到,每簇样本点都被标上了不同的颜色,说明k-means聚类是成功的。




  02. 代码  


代码如下


import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs

X, y = make_blobs(n_samples=150, random_state=10,centers=5) #生成数据
n_sample = X.shape[0]

#设置k值
k = 5  
# plt.scatter(X[:, 0], X[:, 1])
# plt.axis('off')
#随机选择k个样本作为中心
init_idx = np.random.randint(0,n_sample,k) 
c = X[init_idx,:]

#聚类过程
c_idx = np.zeros(n_sample)#样本的类别
for t in range(20):
    #更新样本所属类别
    for i in range(n_sample):
        c_idx[i] = np.argmin(((c - X[i])**2 ).sum(axis=1))
        
    # 更新类别中心
    for i in range(k):
        c[i] = X[c_idx==i].mean(axis=0)
        
#展示结果,以颜色标示类别       
plt.scatter(X[:, 0], X[:, 1], c=c_idx)
plt.axis('off')





聚类结果:







  End  







联系小饼