K-means 算法

发布时间:2023年12月17日

K-means 算法

算法过程描述

  1. 随机选取k个点作为簇的中心
  2. 对于每一个样本的计算到中心的距离,并将样本分到最近的簇中
  3. 更新簇的中心位置
  4. 重复上述2-3步,直至簇的中心位置不在发生改变

其中目标函数为
J = ∑ i = 1 N ∑ k = 1 K r i , k ∣ ∣ x i ? μ k ∣ ∣ 2 J=\sum_{i=1}^N\sum_{k=1}^Kr_{i,k}||x^i-\mu^k||^2 J=i=1N?k=1K?ri,k?∣∣xi?μk2
其中 r i , k ∈ { 0 , 1 } r_{i,k}\in\{0,1\} ri,k?{0,1}表示样本 x i x_i xi?是否属于簇 k k k

因为如果簇中心位置 μ k \mu^k μk确定,那么 r i , k r_{i,k} ri,k?也同时将确定,为了优化目标函数,k-means采用迭代求解的方法,首先固定 μ k \mu^k μk,优化 r i , k r_{i,k} ri,k?;然后固定 r i , k r_{i,k} ri,k?优化 μ k \mu^k μk

首先初始化簇中心,固定 μ k \mu^k μk,最小化 J ( r i , k ) J(r_{i,k}) J(ri,k?):

分配每个样本点到其最近的中心点所在的簇
z i = a r g ? m i n k ′ dist ( x i , μ k ) { r i , k = 1 , k = z i r i , k = 0 , k ≠ z i z_i= \mathrm{arg\ min}_{k^{\prime}}\text{dist}(x^i,\mu^k)\\ \begin{cases}r_{i,k}=1,k=z_i\\r_{i,k}=0,k\neq z_i\end{cases} zi?=arg?mink?dist(xi,μk){ri,k?=1,k=zi?ri,k?=0,k=zi??
然后固定簇中心 μ k \mu^k μk,最小化 J ( μ k ) J(\mu^k) J(μk):
μ k = ∑ i r i , k x i ∑ i r i , k {\mu}^k=\frac{\sum_ir_{i,k}{x}^i}{\sum_ir_{i,k}} μk=i?ri,k?i?ri,k?xi?

文章来源:https://blog.csdn.net/qq_43309286/article/details/134933967
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。