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

K-means聚类

原理说明

Kmeans是一种常见的聚类算法,用于将相似的数据点归类到不同的群组中。Kmeans的原理如下:

初始化:Kmeans算法首先需要初始化一个用户指定数量的聚类中心点,通常是随机选取K个数据点作为聚类中心点。

分配:对于每个数据点,计算其到每个聚类中心点的距离,并将其分配到距离最近的聚类中心点所代表的聚类中。

更新:在所有数据点都被分配到对应的聚类中之后,重新计算每个聚类中心点的位置,即将每个聚类中的所有数据点的坐标平均值作为新的聚类中心点位置。

重复:重复步骤2和3,直到所有聚类中心点的位置不再改变,或达到预设的最大迭代次数。

输出:输出聚类结果,即每个数据点所属的聚类编号。

Kmeans算法的核心是通过最小化每个数据点到其所属聚类中心点的距离平方和来确定最优的聚类中心点位置。在实际应用中,Kmeans算法通常需要多次运行并比较结果,以获得最优的聚类结果。

原理推导

随机选择K个中心点作为簇的初始中心;
将每个数据点分配到离它最近的簇中;
计算每个簇的中心点,更新簇中心;
重复步骤2和3,直到簇中心不再发生变化或达到最大迭代次数。
下面对K-means算法进行数学推导:

设数据集为X={x1, x2, …, xn},其中每个数据点xi是一个d维向量。假设将数据点分为K个簇,第k个簇的中心点为μk,则第i个数据点与第k个簇的中心点的距离为:

dist(xi, μk) = ||xi - μk||2

其中||.||2表示欧几里得范数。

K-means算法的目标是最小化所有数据点与其所属簇中心点的距离之和,即:

J(μ1, μ2, …, μK) = ∑i=1 to n min_k{dist(xi, μk)}^2

其中min_k{.}表示求解所有K个簇中与xi距离最近的中心点μk,并将xi分配到第k个簇中。

为了求解上述目标函数J,需要对μ1, μ2, …, μK进行优化。具体而言,需要先固定簇分配,对簇中心进行优化,然后再固定簇中心,对簇分配进行优化。

对于固定簇分配,目标函数J是关于μ1, μ2, …, μK的凸函数,因此可以使用梯度下降法求解其最小值。具体而言,需要将目标函数对μk求导,即:

∂J(μ1, μ2, …, μK) / ∂μk = ∑i=1 to n 2xi(μk - xi)^T*[μk - xi = 0

其中^T表示向量的转置,即矩阵的行列互换。令上述导数等于0,得到μk的最优解:

μk = 1/Nk * ∑i∈Ck xi

其中Ck表示第k个簇中的数据点,Nk表示第k个簇中的数据点个数。

对于固定簇中心,目标函数J是关于数据点分配的离散优化问题,可以使用交替最小化法(alternating optimization)求解。具体而言,可以先随机分配数据点到簇中
具体而言,可以先随机分配数据点到簇中,然后依次更新每个簇的中心点,直到簇中心点不再发生变化或达到最大迭代次数。更新簇分配时,可以根据当前簇中心点,将每个数据点分配到距离其最近的簇中。

具体而言,假设第i个数据点当前被分配到第k个簇中,其所属簇中心为μk,则将该数据点分配到其他簇中的中心点为μl时,目标函数的变化量为:

ΔJ = ||xi - μl||2 - ||xi - μk||2

将ΔJ展开,得到:

ΔJ = ||xi||2 + ||μl||2 - 2xi^Tμl - ||xi||2 - ||μk||2 + 2xi^Tμk

ΔJ = 2(xi^Tμk - xi^Tμl + μl^Tμl - μk^Tμk)

由于将xi分配到距离其最近的簇中时,ΔJ应当小于等于0,因此可以通过比较ΔJ的大小,将xi分配到距离其最近的簇中。

综上所述,K-means算法的具体步骤如下:

随机选择K个中心点作为簇的初始中心;
将每个数据点分配到离它最近的簇中;
计算每个簇的中心点,更新簇中心;
重复步骤2和3,直到簇中心不再发生变化或达到最大迭代次数。
其中,簇分配可以使用上述交替最小化法求解,簇中心可以使用梯度下降法求解。最终的目标函数是所有数据点与其所属簇中心点的距离之和的平方,即:

J(μ1, μ2, …, μK) = ∑i=1 to n min_k{dist(xi, μk)}^2

其中dist(xi, μk) = ||xi - μk||2表示数据点xi与簇中心点μk之间的距离。

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

相关文章:

  • 04-SQL基础(表管理,约束,多表连接,子查询)
  • 统计学 一元线性回归
  • 【软件开发】基于PyQt5开发的标注软件
  • CSS3新特性
  • 35 openEuler搭建repo(yum)服务器-创建、更新本地repo源
  • 【三.项目引入axios、申明全局变量、设置跨域】
  • 启动u盘还原成普通u盘(Windows Diskpart)
  • 深入理解机器学习——偏差(Bias)与方差(Variance)
  • 分布式新闻项目实战 - 13.项目部署_持续集成(Jenkins) ^_^ 完结啦 ~
  • Linux c/c++技术方向分析
  • JavaScript 高级3 :函数进阶
  • 【项目】Java树形结构集合分页,java对list集合进行分页
  • java.lang.IllegalArgumentException: itemView may not be null
  • [ 攻防演练演示篇 ] 利用 shiro 反序列化漏洞获取主机权限
  • 达人合作加持品牌布局,3.8女神玩转流量策略!
  • 观点丨Fortinet谈ChatGPT火爆引发的网络安全行业剧变
  • 工业企业用电损耗和降损措施研究
  • 高并发、高性能、高可用
  • 剑指 Offer 62. 圆圈中最后剩下的数字
  • 概率论小课堂:高斯分布(正确认识大概率事件)
  • 剑指 Offer 43. 1~n 整数中 1 出现的次数
  • 如何成为程序员中的牛人/高手?
  • 云原生时代顶流消息中间件Apache Pulsar部署实操之轻量级计算框架
  • 数据结构刷题(十九):77组合、216组合总和III
  • PyQt 做美*女GIF设置桌面,每天都很爱~
  • [渗透测试笔记] 54.日薪2k的蓝队hw中级定级必备笔记系列篇3之域渗透黄金票据和白银票据
  • 【异常】Spring Cloud Gateway网关自定义过滤器无法获取到请求体body的内容?不存在的!
  • CNN 卷积神经网络对染色血液细胞分类(blood-cells)
  • Kubernetes学习(三)Service
  • 数学小课堂:古德-图灵折扣估计法和插值法(防范黑天鹅事件的方法)