手撕 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 算法的代码:

相关推荐
汀丶人工智能14 小时前
基于 Milvus 构建企业级 RAG 问答系统:从原理到实践-CSDN博客
人工智能
工边页字14 小时前
为什么 RAG系统里,Embedding成本往往远低于 LLM成本,但很多公司仍然疯狂优化 Embedding?
前端·人工智能·后端
宇擎智脑科技14 小时前
A2A 协议规范深度剖析:三层架构、数据模型、操作语义与协议绑定
人工智能·a2a
Magic--14 小时前
选择排序:原理、实现与优化
数据结构·算法·排序算法
Mintopia14 小时前
如何降低 Prompt 对 AI 理解的干扰
人工智能
qq_4176950514 小时前
基于C++的区块链实现
开发语言·c++·算法
七夜zippoe14 小时前
OpenClaw 会话管理:单聊、群聊、多模型
大数据·人工智能·fastapi·token·openclaw
电商API_1800790524714 小时前
电商平台公开数据采集实践:基于合规接口的数据分析方案
开发语言·数据库·人工智能·数据挖掘·数据分析·网络爬虫
We་ct14 小时前
LeetCode 74. 搜索二维矩阵:两种高效解题思路
前端·算法·leetcode·矩阵·typescript·二分查找
Mintopia14 小时前
AI-coding 时代,人类如何减少对 AI 结果的纠错环节
人工智能