用matlab写一段k-means聚类分割程序
时间: 2023-08-26 11:51:39 浏览: 111
当然可以!以下是一个用MATLAB编写的简单的K-means聚类分割程序示例:
```matlab
% 生成一些随机数据作为示例
rng(1); % 设置随机种子以确保结果可复现
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 iter = 1:max_iters
% 计算每个样本点与聚类中心的距离
distances = pdist2(data, initial_centroids);
% 分配每个样本点到最近的聚类中心
[~, cluster_indices] = min(distances, [], 2);
% 更新聚类中心为每个簇的平均值
for i = 1:k
points_in_cluster = data(cluster_indices == i, :);
initial_centroids(i, :) = mean(points_in_cluster);
end
end
% 绘制聚类结果
figure;
gscatter(data(:,1), data(:,2), cluster_indices);
hold on;
plot(initial_centroids(:,1), initial_centroids(:,2), 'kx', 'MarkerSize', 10, 'LineWidth', 2);
legend('Cluster 1', 'Cluster 2', 'Centroids');
title('K-means Clustering');
```
这段代码生成了一个包含两个聚类的随机数据集,并使用K-means算法将数据分为两个簇。最终结果以散点图的形式展示出来,聚类中心用黑色叉标识。
请注意,这只是一个简单的K-means聚类示例,可能无法处理更复杂的数据集。在实际应用中,你可能需要根据具体情况进行修改和优化。
阅读全文
相关推荐















