k-means推导和python实现


一、算法流程

首先有2点需要注意:

  1. k-meansk-nn(k邻近法) 是不一样的,不要混淆。
  2. k-means本身理解起来不难,讲这个是为了引出后面的EM算法,两者有共通之处。

算法流程如下所示,这里以 k = 3 k=3 k=3, 数据维数 D = 2 D=2 D=2, 数据样本个数 N = 500 N=500 N=500为例:

  1. 给定K个聚类中心,用 μ \mu μ 来表示, 并且适当进行初始化

  2. 现在对于给定的 μ = ( μ 1 , μ 2 , μ 3 ) \mu = (\mu_1,\mu_2,\mu_3) μ=(μ1,μ2,μ3), 找出500个样本数据中距离 μ k \mu_k μk最近的一批数据标注为类别 k k k

  3. 对于属于k类的所有数据进行求平均,将这个平均值作为新的 μ k \mu_k μk使用,同时也得到新的 μ = ( μ 1 , μ 2 , μ 3 ) \mu = (\mu_1, \mu_2, \mu_3) μ=(μ1,μ2,μ3)

  4. 对比更新前后的 μ \mu μ值,如果其差量收束的话停止更新,否则重复第2步

二、推导

  • x x x: D D D维的数据
  • X = { x 1 , x 2 , . . , x N } X = \{x_1, x_2, .., x_N\} X={ x1,x2,..,xN}: N N N个数据样本
  • K K K: 聚类数,已知
  • μ k ( k = 1 , 2 , . . , K ) \mu_k(k=1,2,..,K) μk(k=1,2,..,K): D D D 维的聚类中心(centriod)
  • r n k r_{nk} rnk: 第 n n n个样本属于 k k k类的话该值为1,否则为0

损失函数定义如下:
J = ∑ n = 1 N ∑ k = 1 K r n k ∣ ∣ x n − μ k ∣ ∣ 2 J = \sum_{n=1}^{N}\sum_{k=1}^{K}r_{nk}||x_n-\mu_k||^2 J=n=1Nk=1Krnkx

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值