function [c,label,dist_k]=self_kmeans(data,k,iter,err)
%data 输入数据集(全自变量)
%k 类数
%iter 迭代数
%err 误差变化量
%c 返回的各类中心(向量)
%label 返回的各数据类别
%dist_k 返回各个类内距离和
[m,n]=size(data);%返回data的行,列数
c=zeros(k,n);
dist_k=[];
label=zeros(m,1);
data=[data,label];
dist=zeros(m,k);
%选定初试类中心
for i=1:k
c(i,:)=data(i,1:n);
end
for t=1:iter
for i=1:k
for j=1:m
dist(j,i)=sqrt(sum((data(j,1:n)-c(i,:)).^2));
end
end
%disp(dist)
for j=1:m
[d,l]=sort(dist(j,:));
label(j,1)=l(1);
data(j,end)=label(j,1);%上标签
end
dist_kk=[];
for i=1:k
%统计各个簇类的误差和
dist_kk=[dist_kk,sum(dist(data(:,end)==i,i))];
end
%统计每次所有簇误差总和
dist_k=[dist_k,sum(dist_kk)];
if length(dist_k)>=2
err1=abs(dist_k(length(dist_k)-1)-dist_k(length(dist
matlab-kmeans,自制
最新推荐文章于 2024-06-07 12:28:09 发布
这是一个自编的 MATLAB K-Means 聚类算法函数,用于对输入数据集进行聚类。函数接受数据、类别数、迭代次数和误差变化量作为参数,返回类中心、类别标签和类内距离和。文章中还提到在2012版MATLAB中使用内置 kmeans 函数出现错误,并请求帮助解决。
摘要由CSDN通过智能技术生成