k-means的MATLAB程序
时间: 2023-09-26 09:09:08 浏览: 49
以下是一个简单的k-means算法的MATLAB程序示例:
```
% 加载数据集
load('data.mat');
% 初始化k个质心
K = 3;
centroids = datasample(X, K, 'Replace', false);
% 迭代次数和最大迭代次数
iter_count = 0;
max_iter = 100;
% 迭代过程
while iter_count < max_iter
% 计算每个样本点属于哪个簇
idx = zeros(size(X,1), 1);
for i = 1:size(X, 1)
min_dist = inf;
for j = 1:K
dist = norm(X(i,:) - centroids(j,:));
if dist < min_dist
min_dist = dist;
idx(i) = j;
end
end
end
% 重新计算簇的中心点
for j = 1:K
centroids(j,:) = mean(X(idx==j,:));
end
% 计算变化量
if iter_count == 0
prev_centroids = centroids;
else
change = norm(centroids - prev_centroids);
if change < 1e-6
break;
end
prev_centroids = centroids;
end
iter_count = iter_count + 1;
end
% 绘制结果
figure;
plot(X(idx==1,1), X(idx==1,2), 'r.','MarkerSize',12)
hold on
plot(X(idx==2,1), X(idx==2,2), 'g.','MarkerSize',12)
plot(X(idx==3,1), X(idx==3,2), 'b.','MarkerSize',12)
plot(centroids(:,1), centroids(:,2), 'kx', 'MarkerSize', 15, 'LineWidth',3)
legend('Cluster 1', 'Cluster 2', 'Cluster 3', 'Centroids')
title(sprintf('K-Means Clustering (k = %d)', K))
```
其中,`data.mat`是一个包含样本数据的MATLAB数据文件,其中每行代表一个样本。在这个程序中,我们使用k-means算法将数据分成3个簇。算法的最大迭代次数设为100,如果簇的中心点的变化量小于1e-6,算法将提前停止。最后,我们绘制出聚类的结果及其中心点。