Sklearn 机器学习 数据聚类 用Numpy自己实现聚类
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖
本博客的精华专栏:
【自动化测试】 【测试经验】 【人工智能】 【Python】
Sklearn 机器学习数据聚类:用 Numpy 自己实现聚类
在机器学习的世界中,聚类(Clustering) 是一种非常重要的无监督学习方法。虽然 Scikit-learn 为我们提供了功能强大的聚类算法,如
KMeans
、DBSCAN
等,但理解其底层原理,并用 NumPy 亲手实现一次,可以帮助我们对聚类的本质有更深刻的认识。
本篇博文将带你逐步用 NumPy 实现一个简化版的 K-Means 聚类算法,并通过可视化展示聚类效果。
🧩 一、什么是聚类(Clustering)?
聚类是一种无监督学习方法,其目标是将样本自动划分成若干个“簇”(Cluster),使得:
- 同一簇中的样本尽可能相似
- 不同簇之间的样本尽可能不同
常见的聚类算法包括:
K-Means
(最常用)DBSCAN
(密度聚类)层次聚类
(Hierarchical Clustering)
🔁 二、K-Means 聚类的基本流程
K-Means 的核心思想是:
- 随机选择 K 个点作为初始聚类中心(centroids)
- 将每个样本分配给最近的聚类中心
- 更新每个簇的中心为簇中所有样本的均值
- 重复步骤 2 和 3,直到中心不再发生变化或达到最大迭代次数
🛠 实践中的几个优化点:
-
随机种子控制:为了确保结果可复现,应设置随机种子(如
np.random.seed(42)
) -
空簇处理:如果某个簇没有任何样本分配,可以:
- 从样本中随机选一个点作为新中心
- 或复用上一轮的中心不变
🧮 三、使用 NumPy 实现简化版 K-Means
我们将用 NumPy 实现一个简洁的 K-Means,并通过可视化查看效果。
数据准备
使用 make_blobs
生成二维聚类数据:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs# 设置随机种子,保证可复现
np.random.seed(42)# 生成 300 个样本,3 个中心点
X, y_true = make_blobs(n_samples=300, centers=3, cluster_std=0.6, random_state=0)# 原始数据可视化
plt.scatter(X[:, 0