用matlab写一个kmeans算法
时间: 2024-04-29 13:26:10 浏览: 132
好的,我会为您介绍如何用Matlab编写K-means算法。
K-means算法是一种聚类算法,是数据挖掘中被广泛使用的一种算法。它将一组样本分为K个簇,在每个簇中都有一个聚类中心,每个点被分为最近的聚类中心所在的簇。
以下是一个用Matlab编写的K-means算法的示例代码:
```
function [idx,centroids]=kmeans(X,k)
% X是样本数据矩阵,k是簇的数量
% 返回值idx是每个样本属于的簇的编号,centroids是每个簇的质心
% 随机初始化簇的质心
[m,n]=size(X);
centroids=X(randperm(m,k),:);
% 设置最大迭代次数和收敛阈值
MaxIter=1000;
threshold=1e-6;
for iter=1:MaxIter
% 计算每个样本属于哪个簇
Dist=zeros(m,k);
for j=1:k
Dist(:,j)=sum((X-centroids(j,:)).^2,2);
end
[minDist,idx]=min(Dist,[],2);
% 更新每个簇的质心
new_centroids=zeros(k,n);
for j=1:k
new_centroids(j,:)=mean(X(idx==j,:),1);
end
% 判断是否收敛
if norm(new_centroids-centroids)<threshold
centroids=new_centroids;
break;
end
centroids=new_centroids;
end
end
```
在这个函数中,X是样本数据矩阵,k是簇的数量。函数返回值idx是每个样本属于的簇的编号,centroids是每个簇的质心。
算法的过程可以分为以下几个步骤:
1. 随机初始化k个簇的质心。
2. 计算每个样本点到每个簇质心的距离,将每个样本归为离它最近的簇。
3. 根据每个簇中包含的所有样本重新计算簇的质心。
4. 判断质心是否收敛,如果没有,则回到第2步;否则返回最终的簇质心和每个样本所属的簇编号。
希望这个代码示例能够对您有所帮助。
阅读全文