帮我写一个K=2的k- means算法在Matlab中的代码
时间: 2023-06-10 18:08:27 浏览: 97
asd.rar_K.
好的,以下是K=2的k-means算法的Matlab代码:
```matlab
% 载入数据
data = load('data.txt');
% 初始化聚类中心
center1 = data(1,:);
center2 = data(2,:);
% 迭代次数
max_iter = 100;
for iter = 1:max_iter
% 分配数据点到聚类中心
cluster1 = [];
cluster2 = [];
for i = 1:size(data,1)
point = data(i,:);
dist1 = norm(point - center1);
dist2 = norm(point - center2);
if dist1 < dist2
cluster1 = [cluster1; point];
else
cluster2 = [cluster2; point];
end
end
% 更新聚类中心
new_center1 = mean(cluster1);
new_center2 = mean(cluster2);
% 判断是否收敛
if new_center1 == center1 && new_center2 == center2
break;
end
center1 = new_center1;
center2 = new_center2;
end
% 显示聚类结果
figure;
scatter(cluster1(:,1), cluster1(:,2), 'r');
hold on;
scatter(cluster2(:,1), cluster2(:,2), 'b');
scatter(center1(1), center1(2), 'k', 'filled');
scatter(center2(1), center2(2), 'k', 'filled');
```
其中,`data.txt`是存放数据点的文件,每行为一个数据点,第一列为x坐标,第二列为y坐标。该算法通过迭代不断更新聚类中心,并将数据点分配到距离更近的聚类中心中,直到聚类中心不再变化或达到最大迭代次数为止。最终将聚类结果可视化展示,红色点为第一类数据点,蓝色点为第二类数据点,黑色点为聚类中心。
阅读全文