用matlab编写一个关于包含二维数据的kmeans聚类算法的代码
时间: 2024-05-06 14:20:40 浏览: 114
以下是一个简单的 MATLAB 代码,实现了包含二维数据的 k-means 聚类算法:
```
%% 生成数据
rng(1); % 设置随机数种子,以便结果可重复
data = [randn(100,2)+ones(100,2); randn(100,2)-ones(100,2)];
%% 设置 k 和初始聚类中心
k = 2; % 聚类数
initial_centroids = [-2 -2; 2 2];
%% 运行 k-means 算法
max_iters = 10; % 最大迭代次数
[centroids, idx] = run_kmeans(data, initial_centroids, max_iters);
%% 画出聚类结果
plot_clusters(data, idx, centroids);
%% k-means 算法的实现
function [centroids, idx] = run_kmeans(X, initial_centroids, max_iters)
% 初始化
centroids = initial_centroids;
K = size(centroids, 1);
idx = zeros(size(X,1), 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
%% 画出聚类结果的函数
function plot_clusters(X, idx, centroids)
K = size(centroids, 1);
colors = hsv(K);
for i=1:K
cluster_points = X(idx == i,:);
scatter(cluster_points(:,1), cluster_points(:,2), [], colors(i,:), 'o');
hold on;
end
% 画出聚类中心
scatter(centroids(:,1), centroids(:,2), [], colors, 'x');
hold off;
title('K-means Clustering');
end
```
这个代码中,我们首先生成了一些二维数据。然后,我们设置了聚类数 k 和初始聚类中心。接着,我们调用了自定义的 `run_kmeans` 函数,对数据进行 k-means 聚类。最后,我们调用了另一个自定义函数 `plot_clusters`,画出聚类结果。
在 `run_kmeans` 函数中,我们首先初始化了聚类中心和样本点的类别。然后,我们开始迭代 k-means 算法。在每一次迭代中,我们计算每个样本点到聚类中心的距离,并找到每个样本点距离最近的聚类中心。然后,我们更新聚类中心,以便它们成为每个类别中所有样本点的平均值。在最后一次迭代后,我们返回最终的聚类中心和样本点的类别。
在 `plot_clusters` 函数中,我们使用不同的颜色来表示不同的聚类,使用圆圈表示每个样本点,使用叉号表示每个聚类中心。
阅读全文