本文共 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/