当前位置: 首页 > article >正文

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

http://www.lryc.cn/news/2403478.html

相关文章:

  • SmolVLA: 让机器人更懂 “看听说做” 的轻量化解决方案
  • day45python打卡
  • AIGC赋能前端开发
  • Web 3D协作平台开发案例:构建制造业远程设计与可视化协作
  • AI Agent开发第78课-大模型结合Flink构建政务类长公文、长文件、OA应用Agent
  • 极空间z4pro配置gitea mysql,内网穿透
  • 第三方测试机构进行科技成果鉴定测试有什么价值
  • 华为云Flexus+DeepSeek征文|基于华为云Flexus X和DeepSeek-R1打造个人知识库问答系统
  • 【数据结构】_排序
  • 《前端面试题:JS数据类型》
  • PPT转图片拼贴工具 v4.3
  • Chrome安装代理插件ZeroOmega(保姆级别)
  • Transformer-BiGRU多变量时序预测(Matlab完整源码和数据)
  • 新华三H3CNE网络工程师认证—Easy IP
  • 《视觉SLAM十四讲》自用笔记 第二讲:SLAM系统概述
  • vscode 插件 eslint, 检查 js 语法
  • Excel 模拟分析之单变量求解简单应用
  • 装备制造项目管理具备什么特征?如何选择适配的项目管理软件系统进行项目管控?
  • FPGA 动态重构配置流程
  • Elasticsearch的审计日志(Audit Logging)介绍
  • 软件测试:质量保障的基石与未来趋势
  • 网络安全逆向分析之rust逆向技巧
  • Docker容器化技术概述与实践
  • win中将pdf转为图片
  • Leetcode 2494. 合并在同一个大厅重叠的活动
  • vue+elementui 网站首页顶部菜单上下布局
  • 网络安全-等级保护(等保) 3-3-1 GB/T 36627-2018 附录A (资料性附录) 测评后活动、附 录 B (资料性附录)渗透测试的有关概念说明
  • pytorch3d+pytorch1.10+MinkowskiEngine安装
  • AI Infra运维实践:DeepSeek部署运维中的软硬结合
  • MySQL体系架构解析(二):MySQL目录与启动配置全解析