该聚类算法的设计分为三大步:数据集准备;聚类中心设计与初始化;迭代训练;
其中迭代训练又分为两大步:聚类;聚类中心更新
下面是具体代码及其详解(实现语言为MATLAB或者Octave)注释为C/C++风格,复制的时候要改成matlab风格,或者直接删除
//prepare the data
x = [1 2 2 2 2 2 102 103 102 104 105 104 203 204 203 205 203 209 207 205];
//c是用来保存每一个x所属的类别的一个一维向量,所以它的维数和x是一样的
c = zeros(size(x));
//Random initialize K cluster centroids m;
m = [2 5 200];
N = input('Enter your times to iterate:');
for k = 1:N//iterate
for i = 1:size(x, 2)//cluster
min = abs(x(i) - m(1));
c(i) = 1;
for j = 2:size(m, 2)
if abs(x(i) - m(j)) < min
min = abs(x(i) - m(j));
c(i) = j;
end
end
end//cluster end
for i = 1:size(m, 2)//clustering center update
m(i) = mean(x(find(c == i)));
end//clustering center update end
end//iterate end
代码写得很清楚,应该不用解释了