帮我写一个Matlab做K- means算法的自己指定坐标的代码 并标注每一部分是什么意思
时间: 2023-06-12 17:06:15 浏览: 44
当然可以,下面是一个简单的 Matlab 代码实现 K-means 算法:
```matlab
% 假设有n个数据点,每个数据点有m个维度
n = 100;
m = 2;
% 随机生成n个数据点,每个数据点有m个维度,坐标在[-10,10]之间
data = rand(n,m)*20-10;
% 设置聚类数k
k = 5;
% 随机初始化k个中心点
centers = rand(k,m)*20-10;
% 循环迭代
max_iter = 100;
for i = 1:max_iter
% 计算每个数据点与中心点的距离
dist = pdist2(data,centers);
% 找到每个数据点距离最近的中心点
[~,labels] = min(dist,[],2);
% 更新中心点
for j = 1:k
centers(j,:) = mean(data(labels==j,:),1);
end
end
% 可视化结果
figure;
scatter(data(:,1),data(:,2),10,labels,'filled');
hold on;
scatter(centers(:,1),centers(:,2),50,'k','filled');
```
代码注释:
- `n = 100;` 定义数据点数量为100个。
- `m = 2;` 定义数据点有2个维度,即2D坐标。
- `data = rand(n,m)*20-10;` 随机生成100个数据点,每个数据点在 x 轴和 y 轴上均匀分布,范围在 [-10,10] 之间。
- `k = 5;` 定义聚类数为5。
- `centers = rand(k,m)*20-10;` 随机初始化5个中心点,范围同样在 [-10,10] 之间。
- `max_iter = 100;` 定义最大迭代次数为100次。
- `dist = pdist2(data,centers);` pdist2 函数计算 data 矩阵中每个数据点与 centers 矩阵中每个中心点之间的距离。
- `[~,labels] = min(dist,[],2);` 找到距离每个数据点最近的中心点,labels 矩阵保存了每个数据点所属的聚类编号。
- `centers(j,:) = mean(data(labels==j,:),1);` 根据每个数据点所属的聚类编号,计算该聚类中所有数据点的均值,得到新的中心点。
- `scatter(data(:,1),data(:,2),10,labels,'filled');` 可视化数据点,用不同颜色表示不同的聚类。
- `scatter(centers(:,1),centers(:,2),50,'k','filled');` 可视化中心点,用黑色圆点表示。