模式识别经典算法——Kmeans图像聚类分割(以最短的matlab程序实现)
kmeans之于模式识别,如同“hello world”之于C、之于任何一门高级语言。算法的规格(specification)在聚类问题(一般非监督问题)中,给定训练样本X={x(1),x(2),…,x(N)},每个x(i)∈Rd。kmeans算法的职责在于将这N个样本聚类成k个簇(cluster, μ1,μ2,…,μk),流程如下:随机选取k个聚类中心(c
·
kmeans之于模式识别,如同“hello world”之于C、之于任何一门高级语言。
算法的规格(specification)
在聚类问题(一般非监督问题)中,给定训练样本X={x(1),x(2),…,x(N)},每个x(i)∈Rd。kmeans算法的职责在于将这N个样本聚类成k个簇(cluster, μ1,μ2,…,μk),流程如下:
随机选取k个聚类中心(cluster centroids)为μ1,μ2,…,μk
C = X(randperm(m*n, k), :); # 程序语言重复一下过程直至收敛
{
对于每一个样本i,根据最近邻(欧氏距离度量)计算其所属分类c(i):=argminj∥x(i)−μj∥2
对于每一个类j,重新计算该类的质心(centroids)
μj:=∑mi=11{c(i)=j}x(i)∑mi=11{c(i)=j}
}
算法的规格:
- 一个参数k,聚类中心的数目,当然也有一些常规的参数,比如最大迭代次数epochs,容忍度tol
- 一个循环,判断目标函数是否变化足够小,以F范数(Frobenius norm)为度归。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 一条更新语句,更新各个类的聚类中心,根据每个样本应属的类别(欧式距离最小表征)
μj:=∑mi=11{c(i)=j}x(i)∑mi=11{c(i)=j}
这个公式看似高大上,实则不值一提,翻译过来就是新的聚类中心(centroid)在该类别空间的中心处。
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
matlab实现
客户端(client)程序
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
kmeans函数
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
实验结果
目标函数收敛情况
目标函数
J(c,μ)=∑i=1m∥x(i)−μc(i)∥2
matlab计算程序:
- 1
- 1
效果图
更多推荐



所有评论(0)