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

相关推荐
bittersuite1 分钟前
BERT,fine-tuning
人工智能·深度学习·bert
武汉星际互动7 分钟前
政务大厅引入AI数字人,需要关注哪些核心能力?
人工智能·政务
ZJU_统一阿萨姆13 分钟前
【推理优化进阶】调度器的数学内核:排队论、SLO 与在线决策
开发语言·人工智能·语言模型·系统架构·vllm
今天AI了吗22 分钟前
深度学习基础-Harness:从评估框架到工程落地
数据库·人工智能·sql·深度学习·机器学习
谁在黄金彼岸24 分钟前
python webview打包版卡死、开发版正常
人工智能
大山佬35 分钟前
抛弃 115200bps 的串口调试:J-Link RTT 实时日志系统配置、性能评测与多通道架构全面指南
人工智能·j-link
SomeB1oody35 分钟前
【RustyML入门】5.2. 分类指标
开发语言·后端·机器学习·rust·教程
LaughingZhu43 分钟前
Product Hunt 每日热榜 | 2026-08-18
人工智能·经验分享·深度学习·神经网络·产品运营
碧海银沙音频科技研究院44 分钟前
基于杰理AC7016C的GTCRN门控卷积神经网络语音增强方法
人工智能·嵌入式硬件·语音识别
linux-hzh1 小时前
百日算法修炼 · Day 12
算法·深度优先