K-means算法matlab代码
时间: 2023-10-31 12:14:06 浏览: 78
k_means_K-means算法代码_
以下是一个简单的K-means算法的MATLAB实现代码:
```matlab
function [centroids, idx] = kMeans(X, K, max_iters)
% X是数据矩阵,每行代表一个数据点
% K是聚类中心数
% max_iters是最大迭代次数
[m, n] = size(X);
% 初始化聚类中心
centroids = X(randperm(m, K), :);
% 初始化idx
idx = zeros(m, 1);
for i = 1:max_iters
% 计算每个样本点到聚类中心的距离
dists = pdist2(X, centroids);
% 分配每个样本点到最近的聚类中心
[~, idx] = min(dists, [], 2);
% 更新聚类中心
for j = 1:K
centroids(j, :) = mean(X(idx == j, :), 1);
end
end
end
```
这个函数接受三个输入参数:数据矩阵X、聚类中心数K和最大迭代次数max_iters。它返回两个输出参数:聚类中心centroids和每个数据点所属的聚类idx。
在这个实现中,我们使用pdist2函数计算每个数据点到每个聚类中心的距离,然后使用min函数找到每个数据点所属的最近的聚类中心。最后,我们使用mean函数更新每个聚类中心的位置。
你可以使用以下代码来测试这个函数:
```matlab
% 生成一些随机数据
X = [randn(100,2)*0.75+ones(100,2);
randn(100,2)*0.5-ones(100,2)];
% 运行K-means算法
K = 2;
max_iters = 10;
[centroids, idx] = kMeans(X, K, 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);
hold off;
legend('Cluster 1', 'Cluster 2', 'Centroids');
```
这个代码会生成100个点,其中一半分布在以(1,1)为中心的正态分布中,另一半分布在以(-1,-1)为中心的正态分布中。然后,我们使用K-means算法将这些点聚为两类,并绘制聚类结果。
阅读全文