机器学习-入门教程

【代码】k-means-自实现代码

作者 : 老饼 发表日期 : 2024-03-14 04:17:19 更新日期 : 2025-03-30 13:54:47
本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com



k-means聚类算法是一种较为简单有效的聚类方法,它的实现也较为简单

本文展示一个python实现k-means聚类的代码例子,以及聚类结果

通过本文,可以了解如何自实现一个k-means,并通过代码加深对k-means算法的理解





    01. k-means聚类-代码自实现     





本节用python自实现一个k-means聚类算法





      k-means聚类-代码自实现      


 使用k-means算法进行聚类,只需先初始化k个聚类中心点
然后根据k-means的迭代规则,不断调聚类中心点的位置即可
具体代码实现如下:
"""
本代码用于自实现k-means聚类算法
本代码来自老饼讲解-机器学习:www.bbbdata.com
"""
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)    # 生成数据
sn = X.shape[0]                                                # 样本个数

# ------初始化------------
k   = 5                                                        # 设置k值
idx = np.random.randint(0,sn,k)                                # 随机选择k个样本作为中心
c   = X[idx,:]                                                 # 类别中心

# ------聚类过程-----------
c_idx = np.zeros(sn)                                           # 样本的类别
for t in range(20):                                            # 迭代20次
    for i in range(sn):                                        # 逐个更新样本所属类别
        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')                                                # 关闭坐标轴
plt.show()                                                     # 展示画布
代码运行结果如下:
kmeans运行结果 
  可以看到,每簇样本点都被标上了不同的颜色,说明k-means聚类是成功的





以上就是k-means代码的Demo了~









  End  





内容纠正