Matlab实现Kmeans聚类算法
时间: 2023-12-31 10:15:06 浏览: 92
matlab实现的Kmeans聚类
Kmeans聚类算法是一种基于距离的聚类方法,它将数据集中的样本划分为K个簇,使得簇内的样本相似度较高,而簇间的样本相似度较低。下面给出Matlab实现Kmeans聚类算法的步骤:
1.初始化:随机选择K个样本作为初始簇中心;
2.计算距离:对于每个样本,计算其与K个簇中心的距离,并将其分配到距离最近的簇中心所在的簇中,形成K个簇;
3.更新簇中心:对于每个簇,重新计算该簇的中心点;
4.重复步骤2-3,直到簇中心不再发生变化或达到最大迭代次数。
以下是一个简单的示例代码:
```matlab
% 生成数据集
data = [randn(100,2)*0.75+ones(100,2);randn(100,2)*0.5-ones(100,2)];
% 初始化
K = 2;
cluster_centers = datasample(data,K,'Replace',false);
% 设置最大迭代次数和收敛阈值
max_iter = 100;
tolerance = 1e-5;
% 迭代
for i = 1:max_iter
% 分配样本到簇
distances = pdist2(data,cluster_centers);
[min_distance,cluster_idx] = min(distances,[],2);
% 更新簇中心
new_cluster_centers = zeros(K,size(data,2));
for j = 1:K
new_cluster_centers(j,:) = mean(data(cluster_idx==j,:));
end
% 判断是否收敛
if norm(new_cluster_centers-cluster_centers,'fro')<tolerance
break;
end
% 更新簇中心
cluster_centers = new_cluster_centers;
end
% 可视化结果
figure;
gscatter(data(:,1),data(:,2),cluster_idx);
hold on;
plot(cluster_centers(:,1),cluster_centers(:,2),'k*','MarkerSize',10);
```
以上代码随机生成了一个二维数据集,并将其划分为两个簇,最终结果如下图所示:
![kmeans](https://img-blog.csdn.net/20180314162342276)
阅读全文