K-means 聚类算法:从原理到实战的完整知识点
1. 引言K-means 聚类是机器学习领域最经典、应用最广泛的无监督学习算法之一。它通过迭代计算将数据集划分为 K 个互斥的簇cluster使得同一簇内的数据点尽可能相似而不同簇间的数据点尽可能不同。由于其思想直观、实现简单、效率较高K-means 被广泛应用于客户分群、图像分割、文档归类、异常检测等诸多场景。本文将系统性地梳理 K-means 聚类的完整知识点涵盖其核心思想、数学原理、算法步骤、关键参数与优化、优缺点分析以及 Python 实战示例帮助你从零开始全面掌握这一重要算法。2. 核心思想与目标K-means 算法的核心思想可以概括为“物以类聚”。给定一个包含 N 个数据点的数据集和预设的簇数量 K算法的目标是将每个数据点分配到离其最近的“簇中心”centroid所代表的簇中。根据每个簇中所有数据点的位置重新计算该簇的簇中心通常取均值。不断迭代上述两个步骤直到簇中心的位置不再发生显著变化或达到最大迭代次数此时认为算法收敛。其优化的目标函数是最小化簇内平方和Within-Cluster Sum of Squares, WCSS也称为畸变DistortionJ∑i1K∑x∈Ci∣∣x−μi∣∣2 J \sum_{i1}^{K} \sum_{\mathbf{x} \in C_i} ||\mathbf{x} - \boldsymbol{\mu}_i||^2Ji1∑K​x∈Ci​∑​∣∣x−μi​∣∣2其中KKK是簇的个数。CiC_iCi​是第iii个簇。μi\boldsymbol{\mu}_iμi​是第iii个簇的质心均值向量。x\mathbf{x}x是簇CiC_iCi​中的一个数据点。∣∣x−μi∣∣2||\mathbf{x} - \boldsymbol{\mu}_i||^2∣∣x−μi​∣∣2是数据点到其所属簇质心的欧氏距离的平方。算法通过不断调整数据点的分配和簇中心的位置来最小化这个目标函数JJJ。3. 算法步骤详解标准的 K-means 算法遵循以下步骤步骤 1初始化随机从数据集中选择 K 个点作为初始簇中心质心。步骤 2分配阶段对于数据集中的每一个数据点计算其到 K 个簇中心的距离通常使用欧氏距离并将其分配给距离最近的簇中心所对应的簇。步骤 3更新阶段对于每一个簇重新计算其质心。新的质心是该簇所有数据点的均值向量。步骤 4迭代重复步骤 2分配和步骤 3更新直到满足停止条件。常见的停止条件有质心的位置变化小于某个阈值。目标函数JJJ的变化小于某个阈值。达到预设的最大迭代次数。下面的流程图清晰地展示了这一迭代过程否是开始输入数据集与K值随机初始化K个质心将每个数据点分配到最近的质心重新计算每个簇的质心取簇内点的均值质心是否变化显著或达到最大迭代次数输出最终的K个簇及质心4. 关键参数与优化4.1 如何选择 K 值K 是一个需要预先指定的超参数其选择至关重要。肘部法则Elbow Method绘制不同 K 值对应的 WCSS 曲线。WCSS 会随着 K 增大而减小当 K 增加到真实簇数时WCSS 的下降幅度会突然变缓曲线形似“肘部”该点对应的 K 值可作为参考。轮廓系数Silhouette Score结合了簇内的凝聚度和簇间的分离度。轮廓系数的取值范围为 [-1, 1]值越大表示聚类效果越好。可以计算不同 K 值下的平均轮廓系数选择使其最大化的 K。业务理解很多时候K 值由实际应用场景决定例如将客户分为高、中、低价值3类。4.2 初始化的改进K-means随机初始化可能导致算法收敛到局部最优解。K-means 是一种智能初始化方法随机选择第一个质心。对于每个数据点计算其与已选质心的最短距离D(x)D(x)D(x)。按照D(x)2D(x)^2D(x)2的概率分布随机选择下一个质心距离越远的点被选中的概率越大。重复步骤 2-3直到选出 K 个质心。这种方法能使初始质心彼此远离通常能获得更快、更好的收敛结果。sklearn中的KMeans默认使用initk-means。4.3 距离度量默认使用欧氏距离适用于连续数值型数据。对于其他类型的数据可以考虑曼哈顿距离、余弦相似度等但标准的 K-means 算法基于均值计算质心与欧氏距离最小化在数学上等价。5. 算法的优缺点5.1 优点原理简单易于理解和实现。对于大数据集计算效率相对较高时间复杂度约为O(N⋅K⋅I⋅d)O(N \cdot K \cdot I \cdot d)O(N⋅K⋅I⋅d)其中NNN为样本数III为迭代次数ddd为维度。当簇的形状为凸球形且大小相近时效果很好。5.2 缺点与局限性需要预先指定 K 值且 K 值选择不当会影响结果。对初始质心敏感可能收敛到局部最优使用 K-means 可缓解。对噪声和离群点敏感因为它们会显著影响均值的计算。不适合发现非凸形状的簇如环形、月牙形。对数据尺度敏感在应用前通常需要进行标准化如 Z-score 标准化。6. Python 实战示例下面我们使用scikit-learn和matplotlib库演示一个完整的 K-means 聚类流程。6.1 环境准备与数据生成importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.datasetsimportmake_blobsfromsklearn.clusterimportKMeansfromsklearn.metricsimportsilhouette_scorefromsklearn.preprocessingimportStandardScaler# 生成模拟数据X,y_truemake_blobs(n_samples300,centers4,cluster_std0.60,random_state0)plt.scatter(X[:,0],X[:,1],s50)plt.title(原始数据)plt.show()6.2 使用肘部法则选择 K 值# 肘部法则wcss[]foriinrange(1,11):kmeansKMeans(n_clustersi,initk-means,max_iter300,n_init10,random_state0)kmeans.fit(X)wcss.append(kmeans.inertia_)# inertia_ 属性即 WCSSplt.plot(range(1,11),wcss)plt.title(肘部法则)plt.xlabel(簇的数量 (K))plt.ylabel(WCSS)plt.show()观察图形WCSS 下降的“肘部”通常出现在 K4 附近。6.3 训练 K-means 模型并可视化# 根据肘部法则选择 K4kmeansKMeans(n_clusters4,initk-means,max_iter300,n_init10,random_state0)y_kmeanskmeans.fit_predict(X)# 可视化聚类结果plt.scatter(X[y_kmeans0,0],X[y_kmeans0,1],s50,clightblue,label簇 1)plt.scatter(X[y_kmeans1,0],X[y_kmeans1,1],s50,corange,label簇 2)plt.scatter(X[y_kmeans2,0],X[y_kmeans2,1],s50,cgreen,label簇 3)plt.scatter(X[y_kmeans3,0],X[y_kmeans3,1],s50,cred,label簇 4)# 绘制质心plt.scatter(kmeans.cluster_centers_[:,0],kmeans.cluster_centers_[:,1],s200,cblack,markerX,label质心)plt.title(K-means 聚类结果)plt.legend()plt.show()print(f簇中心坐标:\n{kmeans.cluster_centers_})print(f轮廓系数:{silhouette_score(X,y_kmeans):.4f})6.4 对非球形数据的局限性演示fromsklearn.datasetsimportmake_moons# 生成月牙形数据X_moons,_make_moons(n_samples200,noise0.05,random_state0)kmeans_moonsKMeans(n_clusters2,random_state0)y_moons_predkmeans_moons.fit_predict(X_moons)plt.scatter(X_moons[:,0],X_moons[:,1],cy_moons_pred,s50,cmapviridis)plt.scatter(kmeans_moons.cluster_centers_[:,0],kmeans_moons.cluster_centers_[:,1],s200,cred,markerX)plt.title(K-means 对非凸形状聚类效果不佳)plt.show()可以看到K-means 无法正确划分月牙形数据此时应考虑 DBSCAN 或谱聚类等算法。7. 总结与扩展K-means 是聚类分析的基石。掌握其原理、实现和局限性是学习更复杂聚类算法如 DBSCAN、层次聚类、高斯混合模型的良好起点。在实际应用中请注意数据预处理务必进行标准化/归一化。多次运行由于随机初始化可以多次运行算法n_init参数并选择最优结果。结合业务验证聚类结果最终需要结合业务知识进行解读和验证。探索变体如 K-medoids对离群点更鲁棒、Mini-Batch K-means适用于大数据集。希望这篇完整的知识点梳理能帮助你深入理解并有效应用 K-means 聚类算法。

相关新闻

ESP-SR终极指南:如何为嵌入式设备快速添加离线语音识别功能

ESP-SR终极指南:如何为嵌入式设备快速添加离线语音识别功能

ESP-SR终极指南:如何为嵌入式设备快速添加离线语音识别功能 【免费下载链接】esp-sr Speech recognition 项目地址: https://gitcode.com/gh_mirrors/es/esp-sr 想象一下,你的智能设备能够听懂你的指令,无需连接云端,完全离…

2026/11/1 4:35:01 阅读更多 →
Prometheus 监控 Google Cloud Monitoring Exporter 全栈实战:从 GCE 到 Cloud Run 的 GCP 资源可观测性

Prometheus 监控 Google Cloud Monitoring Exporter 全栈实战:从 GCE 到 Cloud Run 的 GCP 资源可观测性

Prometheus 监控 Google Cloud Monitoring Exporter 全栈实战:从 GCE 到 Cloud Run 的 GCP 资源可观测性在 Google Cloud Platform (GCP) 上,无数计算、存储、数据库和无服务器资源支撑着现代应用。GCP 的 Cloud Monitoring(原 Stackdriver&a…

2026/10/25 6:38:56 阅读更多 →
流状态“失忆”与“脑裂”:Spring Boot 流处理状态管理与容错,从灾难到强韧的涅槃之路

流状态“失忆”与“脑裂”:Spring Boot 流处理状态管理与容错,从灾难到强韧的涅槃之路

流状态“失忆”与“脑裂”:Spring Boot 流处理状态管理与容错,从灾难到强韧的涅槃之路 你用 Spring Boot 配合 Kafka Streams 或 Flink 构建了实时流处理服务,订单风控、实时特征计算跑得风生水起。然而一个周五的下午,服务滚动重…

2026/10/25 12:18:29 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/2 0:25:10 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/1 10:36:53 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/1 10:36:51 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/2 1:16:51 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/1 10:35:11 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/1 9:35:41 阅读更多 →

日新闻

周新闻

月新闻