资源简介
k-means数据 机器学习 加油
代码片段和文件信息
function result=K_means(datakinitset)
[rowscolumns]=size(data);%获取数据的行列
for i=1:k
data(initset(i)columns+1)=i;%初始聚簇代表确定
oldClusetCenter(i:)=data(initset(i)1:columns);
oldClusterRows{i}=initset(i);%初始第i簇的行号
end
%结束标记
flag=1;
%迭代次数
iteratenum=0;
while(flag==1)
iteratenum=iteratenum+1;
fprintf(‘-第%d次迭代:\n‘iteratenum);
flag=0;
%计算欧几里得距离,划分簇
for ii=1:rows
for jj=1:k
res=(data(ii1:columns)-oldClusetCenter(jj:)).*(data(ii1:columns)-oldClusetCenter(jj:));
dist(jj)=sqrt(sum(res));%dist矩阵存放欧几里得距离
end
data(iicolumns+1)=find(dist==min(dist));%最小欧几里得距离,划分簇
dist(1:k)=0;%距离置零
end
%计算新的聚簇代表
for cluster=1:k
newClusterRows{cluster}=find(data(:columns+1)==cluster);%用cell来存储第k簇的行号,不能用数组
newClusetCenter(cluster:)=mean(data(newClusterRows{cluster}1:columns));
if (all(ismember(newClusterRows{cluster}oldClusterRows{cluster}))&&all(ismember(oldClusterRows{cluster}newClusterRows{cluster})))~=1%判断每一簇的行号是否发生变化
oldClusterRows{cluster}=newClusterRows{cluster};
oldClusetCenter(cluster:)=newClusetCenter(cluster:);
flag=1;
end
fprintf(‘-----第%d簇的聚簇代表坐标为:\n‘cluster);
disp(newClusetCenter(cluster:));
fprintf(‘--------在本簇的元组行号为:\n‘);
disp(newClusterRows{cluster}‘);
end
end
end
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1679 2018-03-12 15:10 K_means.m
文件 4700 2018-03-12 16:05 Iris数据集.txt
----------- --------- ---------- ----- ----
6379 2
- 上一篇:直线端点检测程序
- 下一篇:fr
amebuffer播放摄像头
评论
共有 条评论