用matlab实现质心算法并注释
时间: 2024-05-25 20:19:28 浏览: 65
【WSN定位算法】加权质心定位算法【matlab代码】
5星 · 资源好评率100%
% 质心算法实现
% 输入:
% data:n x d的矩阵,其中n表示数据个数,d表示数据维度
% k:聚类中心个数
% 输出:
% c:k x d的矩阵,表示聚类中心
% idx:长度为n的向量,表示每个数据点所属的聚类中心编号
function [c, idx] = kmeans(data, k)
[n, d] = size(data); % 获取数据个数和维度
idx = zeros(n, 1); % 初始化聚类中心编号
c = data(randperm(n, k), :); % 随机选取k个数据点作为初始聚类中心
while true % 迭代直到聚类中心不再变化
% 分配数据点到聚类中心
for i = 1:n
min_dis = inf;
for j = 1:k
dis = norm(data(i, :) - c(j, :)); % 计算欧氏距离
if dis < min_dis % 更新最小距离和聚类中心编号
min_dis = dis;
idx(i) = j;
end
end
end
% 更新聚类中心
new_c = zeros(k, d);
for i = 1:k
new_c(i, :) = mean(data(idx == i, :)); % 计算每个聚类中心的质心
end
if isequal(c, new_c) % 如果聚类中心不再变化就退出迭代
break;
else % 否则继续迭代
c = new_c;
end
end
end
阅读全文