手撕 K-Means

1. K-means 的原理

K-means 是一种经典的无监督学习算法,用于将数据集划分为 kk 个簇(cluster)。其核心思想是通过迭代优化,将数据点分配到最近的簇中心,并更新簇中心,直到簇中心不再变化或达到最大迭代次数。

算法步骤:

  1. 初始化: 随机选择 kk 个数据点作为初始簇中心(centroids)。

  2. 分配步骤(Assignment Step): 将每个数据点分配到距离最近的簇中心。

  3. 更新步骤(Update Step): 重新计算每个簇的中心(即簇内所有数据点的均值)。

  4. 迭代: 重复步骤 2 和 3,直到簇中心不再变化或达到最大迭代次数。

2. K-means 的公式推导

目标函数

K-means 的目标是最小化所有数据点到其所属簇中心的距离平方和(即误差平方和,SSE):

其中:

  • k:簇的数量。

  • Ci​:第 i 个簇。

  • x:数据点。

  • μi:第 i 个簇的中心。

分配步骤

将每个数据点 x 分配到距离最近的簇中心:

更新步骤

重新计算每个簇的中心 μi,即簇内所有数据点的均值:

其中 ∣Ci∣ 是第 i 个簇中数据点的数量。

3. 手撕代码实现

下面是用 Python 实现 K-means 算法的代码:

相关推荐
跨境数据猎手1 小时前
2027最新跨境电商独立站模式拆解
大数据·人工智能
博谷1 小时前
2026AI信源证据链怎么建?BUGOOAI布谷GEO的T0-T3分级与追溯方法
人工智能
悟天特斯1 小时前
智慧园区的“体验升级“:从管理工具到服务生态的人本运营
大数据·人工智能
织码weavecodes3 小时前
织码在线教育系统--主观题 AI 智能阅卷:批量初评与教师复核如何协同
人工智能
Shockang9 小时前
llama.cpp 本地运行 9B 模型:部署、工具调用与微调数据
人工智能
Shockang9 小时前
n8n 智能体工作流实战:触发、工具、记忆与发布护栏
人工智能
冬奇Lab11 小时前
开源项目第241期:YuE2 —— 用符号乐谱当“白盒“接口的开源音乐生成模型,SongBench 超越 Suno v5/v6
人工智能
鶴哥只手遮天12 小时前
Spring AI 2.0.1 深度解析-第 14 章 MCP 服务端(上):注解式实现与工具来源
java·人工智能·开源
鶴哥只手遮天12 小时前
Spring AI 2.0.1 深度解析-第 15 章 MCP 服务端(下):三种协议形态、Streamable 传输与状态管理
java·人工智能·开源