用matlab实现kmeans聚类算法的具体代码
时间: 2023-06-25 18:03:19 浏览: 104
kmeans聚类算法matlab代码.zip
以下是用MATLAB实现kmeans聚类算法的示例代码:
```matlab
% 生成数据
rng('default');
X = [randn(100,2)*0.75+ones(100,2);
randn(100,2)*0.5-ones(100,2)];
% 聚类数目
K = 2;
% 迭代次数
max_iters = 10;
% 初始化聚类中心
initial_centroids = kMeansInitCentroids(X, K);
% 运行k-means算法
[centroids, idx] = runkMeans(X, initial_centroids, max_iters);
% 绘制聚类结果
figure;
plot(X(idx==1,1), X(idx==1,2), 'r.', 'MarkerSize', 12);
hold on;
plot(X(idx==2,1), X(idx==2,2), 'b.', 'MarkerSize', 12);
plot(centroids(:,1), centroids(:,2), 'kx', 'MarkerSize', 15, 'LineWidth', 3);
legend('Cluster 1', 'Cluster 2', 'Centroids', 'Location', 'northoutside', 'Orientation', 'horizontal');
title(sprintf('K-means clustering (K = %d)', K));
hold off;
```
其中,`kMeansInitCentroids`和`runkMeans`是自定义函数,用于初始化聚类中心和运行k-means算法。具体实现可参考以下代码:
```matlab
function centroids = kMeansInitCentroids(X, K)
% 随机选择K个样本作为初始聚类中心
centroids = X(randperm(size(X,1), K), :);
end
function [centroids, idx] = runkMeans(X, initial_centroids, max_iters)
% 初始化一些变量
[m, n] = size(X);
K = size(initial_centroids, 1);
centroids = initial_centroids;
idx = zeros(m, 1);
% 运行k-means算法
for i=1:max_iters
% 计算每个样本点所属的聚类中心
for j=1:m
distances = sum((centroids - X(j,:)).^2, 2);
[~, idx(j)] = min(distances);
end
% 重新计算聚类中心
for k=1:K
centroids(k,:) = mean(X(idx==k, :));
end
end
end
```
注意,以上代码仅供参考,实际应用时需要根据具体数据情况进行调整和优化。
阅读全文