上述代码可以加入各个点属于哪个类别的具体体现吗
时间: 2023-07-30 08:10:16 浏览: 126
当然可以。只需要在代码中添加一行代码,将每个数据点所属的聚类类别保存到一个变量中即可。以下是修改后的代码:
```matlab
clear all;
close all;
clc;
% 随机生成数据点
data = [randn(100,2)*0.75+ones(100,2);
randn(100,2)*0.5-ones(100,2)];
% 聚类个数
k = 2;
% 迭代次数
max_iters = 10;
% 随机初始化聚类中心
initial_centroids = datasample(data, k, 'Replace', false);
% 迭代更新聚类中心和分配数据点
for i=1:max_iters
% 计算每个数据点到每个聚类中心的距离
distances = pdist2(data, initial_centroids);
% 将数据点分配到最近的聚类中心
[~,idx] = min(distances,[],2);
% 保存每个数据点所属的聚类类别
data_labels{i} = idx;
% 可视化数据点和聚类中心
figure;
scatter(data(:,1),data(:,2),15,idx,'filled');
hold on;
scatter(initial_centroids(:,1),initial_centroids(:,2),100,[1:k],'*');
title(sprintf('Iteration %d',i));
hold off;
% 更新聚类中心
for j=1:k
initial_centroids(j,:) = mean(data(idx==j,:));
end
end
```
这段代码中,我们添加了一个变量 `data_labels`,用于保存每个数据点所属的聚类类别。在每次迭代中,我们将 `idx`(即每个数据点所属的聚类类别)保存到 `data_labels` 中。你可以在代码执行完后查看 `data_labels` 变量,就可以看到每个数据点所属的聚类类别了。
阅读全文