【第二章:机器学习与神经网络概述】01.聚类算法理论与实践-(1)K-means聚类算法

第二章: 机器学习与神经网络概述

第一部分:聚类算法理论与实践

第一节:K-means聚类算法

内容:算法原理、K值选择方法、初始点敏感性。

【漫话机器学习系列】269.K-Means聚类算法(K-Means Clustering)-CSDN博客


一、K-means 算法简介

K-means 是一种无监督学习 的聚类算法,用于将数据集划分为 K 个簇(cluster),使得每个簇内的样本之间尽可能相似,不同簇之间的样本尽可能不同。

它通过最小化**样本点到其所属簇中心的欧几里得距离平方和(SSE)**来优化簇划分:

目标函数:

其中:

  • k 是簇的个数;

  • 是第 i 个簇;

  • 是簇 i 的中心(质心);

  • 是簇内的样本点。


二、算法流程
  1. 选择初始质心(K 个)

    通常是随机选取 K 个数据点作为初始中心。

  2. 分配簇标签

    将每个数据点分配给距离其最近的质心所属的簇。

  3. 更新质心

    对每个簇,重新计算其成员点的平均值作为新的质心。

  4. 判断收敛条件

    若质心不再发生变化,或变化小于阈值,则算法终止;否则回到第 2 步。


三、K 值选择方法

选择合适的 K 值对聚类效果影响显著,常用方法包括:

1. 肘部法则(Elbow Method)

计算不同 K 值下的 SSE,绘制曲线图,当 SSE 的下降幅度开始减缓时的拐点即为最佳 K 值

2. 轮廓系数(Silhouette Coefficient)

衡量聚类内部紧密性与簇间分离度的指标,取最大轮廓系数对应的 K 值为佳。

其中:

  • a:点到本簇其他点的平均距离;

  • b:点到最近簇中所有点的平均距离。

3. Gap Statistic

基于与参考数据(均匀分布)下的期望 SSE 之差,来度量当前聚类结果的合理性。


四、初始点敏感性问题

由于 K-means 初始质心选取对最终结果影响较大,可能导致:

  • 聚类陷入局部最优;

  • 聚类不稳定;

  • 聚类质量差。

常见改进策略:
  1. 多次运行取最优

    运行多次 K-means,取总 SSE 最小的一次。

  2. K-means++ 初始化算法

    一种优化的初始化方式,优先选择远离已有中心的点,提高稳定性和准确性。


五、算法示意图(文字版)
python 复制代码
初始质心(K个) → 分配数据点 → 计算新质心 → 判断是否收敛 → 是?停止;否?返回第二步

六、Python 实现示例
python 复制代码
import os
# 避免 KMeans 的内存泄漏问题
os.environ["OMP_NUM_THREADS"] = "2"

from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from matplotlib import rcParams

# 设置中文字体支持
rcParams['font.sans-serif'] = ['SimHei']
rcParams['axes.unicode_minus'] = False

# 生成示例数据
X, y_true = make_blobs(n_samples=300, centers=3, cluster_std=0.60, random_state=42)

# 构建并训练模型
model = KMeans(n_clusters=3, init='k-means++', random_state=42, n_init=10)
model.fit(X)
labels = model.labels_
centers = model.cluster_centers_

# 绘图展示聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis')
plt.scatter(centers[:, 0], centers[:, 1], c='red', marker="x")
plt.title("K-means 聚类结果")
plt.show()

七、K-means 的优缺点
优点 缺点
简单高效,易于实现 K值需提前给定,结果对初始点敏感
计算速度快,适合大数据场景 聚类形状必须是凸的(非球形效果差)
可扩展性强,支持并行优化 对异常值敏感,易陷入局部最优

八、应用场景
  • 客户群体细分

  • 图像分割

  • 文本聚类

  • 异常检测(配合聚类距离)

相关推荐
vv_5015 分钟前
Langchain+Neo4j+Agent 的结合案例-电商销售
人工智能·langchain·agent·neo4j
wa的一声哭了8 分钟前
Stanford CS336 Lecture3 | Architectures, hyperparameters
人工智能·pytorch·python·深度学习·机器学习·语言模型·自然语言处理
学境思源AcademicIdeas11 分钟前
用ChatGPT修改论文,如何在提升质量的同时降低AI检测风险?
人工智能·chatgpt
WaWaJie_Ngen17 分钟前
LevOJ P2080 炼金铺 II [矩阵解法]
c++·线性代数·算法·矩阵
LinkTime_Cloud22 分钟前
OpenAI 陷“GPT门”风波,付费用户遭遇模型偷换与性能降级
人工智能·gpt
GoldenSpider.AI24 分钟前
从“氛围编程“到“氛围研究“:OpenAI的GPT-5与未来自动化研究之路
人工智能·gpt-5·vibe coding·氛围编程·mark chen·jakub pachocki
IT_陈寒38 分钟前
SpringBoot实战:这5个隐藏技巧让我开发效率提升200%,90%的人都不知道!
前端·人工智能·后端
x新观点38 分钟前
联想乐享重构智能搜索生态:ThinkPad T14p 2025升级信息首触“企业智能双胞胎”
人工智能
大有数据可视化41 分钟前
机器学习+数字孪生:从诊断到自主决策的跨越
人工智能·机器学习
西岭千秋雪_44 分钟前
Spring AI alibaba Prompt模板&Advisor自定义
java·人工智能·spring·prompt