%% kMeans的核心程序,不断迭代求解聚类中心
function [ centroids ] = kMeans( A, k )
[m,n] = size(A);
%初始化聚类中心
centroids = zeros(k, n);
global subCenter;
subCenter = zeros(m,2);%做一个m*2的矩阵,第一列存储类别,第二列存储距离
%求取聚类中心
for j = 1:n
minJ = min(A(:,j));
rangeJ = max(A(:,j))-min(A(:,j));
centroids(:,j) = minJ+rand(k,1)*rangeJ;%产生区间上的随机数
end
change = 1;%判断是否改变
while change == 1
change = 0;
%对每一组数据计算距离
for i = 1:m
minDist = inf;
minIndex = 0;
for j = 1:k
%计算欧氏距离
dist=(A(i,:)-centroids(j,:))*(A(i,:)-centroids(j,:))';
if dist < minDist
minDist = dist;
minIndex = j;
end
end
if subCenter(i,1) ~= minIndex
change = 1;
subCenter(i,:)=[minIndex, minDist];
end
end
%对k类重新就算聚类中心
for j = 1:k
sum = zeros(1,n);
r = 0;%数量
for i = 1:m
if subCenter(i,1) == j
sum = sum + A(i,:);
r = r+1;
end
end
centroids(j,:) = sum./r;
end
end
kmeans算法分类实例_kmeas算法_matlab_仿真实例
版权申诉
157 浏览量
2022-07-15
08:48:37
上传
评论
收藏 3KB ZIP 举报
寒泊
- 粉丝: 74
- 资源: 1万+
评论0