文章目录
一、算法流程
首先有2点需要注意:
- k-means和 k-nn(k邻近法) 是不一样的,不要混淆。
- k-means本身理解起来不难,讲这个是为了引出后面的EM算法,两者有共通之处。
算法流程如下所示,这里以 k = 3 k=3 k=3, 数据维数 D = 2 D=2 D=2, 数据样本个数 N = 500 N=500 N=500为例:
-
给定K个聚类中心,用 μ \mu μ 来表示, 并且适当进行初始化
-
现在对于给定的 μ = ( μ 1 , μ 2 , μ 3 ) \mu = (\mu_1,\mu_2,\mu_3) μ=(μ1,μ2,μ3), 找出500个样本数据中距离 μ k \mu_k μk最近的一批数据标注为类别 k k k
-
对于属于k类的所有数据进行求平均,将这个平均值作为新的 μ k \mu_k μk使用,同时也得到新的 μ = ( μ 1 , μ 2 , μ 3 ) \mu = (\mu_1, \mu_2, \mu_3) μ=(μ1,μ2,μ3)
-
对比更新前后的 μ \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=1∑Nk=1∑Krnk∣∣x