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

手撕 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.xdnf.cn/news/12126.html

相关文章:

  • 20250605车充安服务器受木马攻击导致服务不可用
  • 【SSM】SpringBoot学习笔记1:SpringBoot快速入门
  • 02 Deep learning神经网络的编程基础 逻辑回归--吴恩达
  • ES6中的Map与Set数据结构的简单应用
  • 如何轻松将视频从安卓设备传输到电脑?
  • QT开发技术【ffmpeg + QAudioOutput】音乐播放器 完善
  • Struts2漏洞由浅入深
  • Python数据类型与运算符全解析-Python数据挖掘可视化分析
  • DASCTF
  • QT使用WxSQLite3打开加密数据库并查询
  • 开始在本地部署自己的 Gitea 服务器
  • 【QT】使用QT帮助手册找控件样式
  • 构建云原生安全治理体系:挑战、策略与实践路径
  • 如果科技足够发达,是否还需要维持自然系统(例如生物多样性)中那种‘冗余’和‘多样性’,还是可以只保留最优解?
  • 概述侧边导航的作用与价值
  • Socket编程UDP\TCP
  • tcp/udp
  • 2025年渗透测试面试题总结-腾讯[实习]玄武实验室-安全工程师(题目+回答)
  • Elasticsearch最新入门教程
  • VSCode主题定制:CSS个性化你的编程世界
  • 自动化办公集成工具:一站式解决文档处理难题
  • day47 TensorBoard学习
  • 从二叉树到 STL:揭开 set 容器的本质与用法
  • Cursor 工具项目构建指南: Uniapp Miniprogram 环境下的 Prompt Rules 约束
  • asp.net mvc如何简化控制器逻辑
  • 论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
  • Vue.js组件开发系统性指南
  • 使用 Zabbix 官方 Nginx 模板的详细指南
  • 性能优化之SSR、SSG
  • 苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会