博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
k-means算法
阅读量:621 次
发布时间:2019-03-13

本文共 1029 字,大约阅读时间需要 3 分钟。

 kmeans算法又名k均值算法。其算法思想大致为:先从样本集中随机选取 kk 个样本作为簇中心,并计算所有样本与这 kk 个“簇中心”的距离,对于每一个样本,将其划分到与其距离最近的“簇中心”所在的簇中,对于新的簇计算各个簇的新的“簇中心”。

  根据以上描述,我们大致可以猜测到实现kmeans算法的主要三点:
  (1)簇个数 kk 的选择
  (2)各个样本点到“簇中心”的距离
  (3)根据新划分的簇,更新“簇中心”

伪代码如下:

 

输入:训练数据集 D=x(1),x(2),...,x(m)D=x(1),x(2),...,x(m) ,聚类簇数 kk ;

  过程:函数 kMeans(D,k,maxIter)kMeans(D,k,maxIter) .
  1:从 DD 中随机选择 kk 个样本作为初始“簇中心”向量: μ(1),μ(2),...,,μ(k)μ(1),μ(2),...,,μ(k) :
  2:repeat
  3:  令 Ci=∅(1≤i≤k)Ci=∅(1≤i≤k)
  4:  for j=1,2,...,mj=1,2,...,m do
  5:    计算样本 x(j)x(j) 与各“簇中心”向量 μ(i)(1≤i≤k)μ(i)(1≤i≤k) 的欧式距离
  6:    根据距离最近的“簇中心”向量确定 x(j)x(j) 的簇标记: λj=argmini∈{1,2,...,k}djiλj=argmini∈{1,2,...,k}dji
  7:    将样本 x(j)x(j) 划入相应的簇: Cλj=Cλj⋃{x(j)}Cλj=Cλj⋃{x(j)} ;
  8:  end for
  9:  for i=1,2,...,ki=1,2,...,k do
  10:    计算新“簇中心”向量: (μ(i))′=1|Ci|∑x∈Cix(μ(i))′=1|Ci|∑x∈Cix ;
  11:    if (μ(i))′=μ(i)(μ(i))′=μ(i) then
  12:      将当前“簇中心”向量 μ(i)μ(i) 更新为 (μ(i))′(μ(i))′
  13:    else
  14:      保持当前均值向量不变
  15:    end if
  16:  end for
  17:  else
  18:until 当前“簇中心”向量均未更新
  输出:簇划分 C=C1,C2,...,CK

转载地址:http://csqaz.baihongyu.com/

你可能感兴趣的文章