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

相关推荐
极小狐18 分钟前
比 Cursor 更丝滑的 AI DevOps 编程智能体 - CodeRider-Kilo 正式发布!
运维·人工智能·devops
草莓火锅19 分钟前
用c++使输入的数字各个位上数字反转得到一个新数
开发语言·c++·算法
散峰而望29 分钟前
C/C++输入输出初级(一) (算法竞赛)
c语言·开发语言·c++·算法·github
Kuo-Teng37 分钟前
LeetCode 160: Intersection of Two Linked Lists
java·算法·leetcode·职场和发展
半臻(火白)1 小时前
Prompt-R1:重新定义AI交互的「精准沟通」范式
人工智能
fie88891 小时前
基于MATLAB的狼群算法实现
开发语言·算法·matlab
菠菠萝宝1 小时前
【AI应用探索】-10- Cursor实战:小程序&APP - 下
人工智能·小程序·kotlin·notepad++·ai编程·cursor
偷偷的卷1 小时前
【算法笔记 11】贪心策略六
笔记·算法
连线Insight1 小时前
架构调整后,蚂蚁继续死磕医疗健康“硬骨头”
人工智能
小和尚同志1 小时前
十月份 AI Coding 实践!Qoder、CC、Codex 还是 iflow?
人工智能·aigc