function [ resX,resY, resZ,seedX,seedY,seedZ,record] = FunK_mean3D( x,y,z,k,r)
while 1
j = 1;
seedX = zeros(1,k);
seedY = zeros(1,k);
seedZ = zeros(1,k);
oldSeedX = zeros(1,k);
oldSeedY = zeros(1,k);
oldSeedZ = zeros(1,k);
resX = zeros(k,length(x));
resY = zeros(k,length(y));
resZ = zeros(k,length(z));
record = zeros(1,k); % 用来记录resX中每一行有效元素的个数
p=2;
while 1
if p == 0
break;
end
for i = 1:k % 产生k个随机种子, 注意: 随机种子是来自元素集合
seedX(i) = x(ceil(rand()*length(resX)));
seedY(i) = y(ceil(rand()*length(resY)));
seedZ(i) = z(ceil(rand()*length(resZ)));
end
for j=k:-1:2
p=0;
for m=j-1:-1:1
power(seedX(m)-seedX(j),2)+power(seedY(m)-seedY(j),2)+power(seedZ(m)-seedZ(j),2)
if (power(seedX(m)-seedX(j),2)+power(seedY(m)-seedY(j),2)+power(seedZ(m)-seedZ(j),2))<r
p=1
break;
end
end
if p==1
break;
end
end
end
while 1
record(:) = 0; % 重置为零
resX(:) = 0;
resY(:) = 0;
resZ(:) = 0;
for i = 1:length(x) % 对所有元素遍历
% 下面是判断本次元素应该归为哪一类,这里我们是根据欧几里得距离进行类别判定
% k-mean算法认为元素应该归为距离最近的种子代表的类
distanceMin = 1;
for j = 2:k
if (power(x(i)-seedX(distanceMin),2)+power(y(i)-seedY(distanceMin),2)+power(z(i)-seedZ(distanceMin),2))...
> (power(x(i)-seedX(j),2) + power(y(i)-seedY(j),2)+power(z(i)-seedZ(j),2))
distanceMin = j;
end
end
% 将本次元素点进行类别归并
resX(distanceMin,record(distanceMin) +1) = x(i);
resY(distanceMin,record(distanceMin) +1) = y(i);
resZ(distanceMin,record(distanceMin) +1) = z(i);
record(distanceMin) = record(distanceMin) + 1;
end
oldSeedX = seedX;
oldSeedY = seedY;
oldSeedZ = seedZ;
% 移动种子至其类中心
record;
for i = 1:k
if record(i) == 0
continue;
end
seedX(i) = sum(resX(i,:))/record(i);
seedY(i) = sum(resY(i,:))/record(i);
seedZ(i) = sum(resZ(i,:))/record(i);
end
maxPos = max(record);
resX = resX(:,1:maxPos);
resY = resY(:,1:maxPos);
resZ = resZ(:,1:maxPos);
% 如果本次得到的种子和上次的种子一致,则认为分类完毕。
if mean([seedX == oldSeedX&seedY == oldSeedY&seedZ == oldSeedZ]) == 1
% 这句话所想表达的意思就是 if seedX == oldSeedX && seedY == oldSeedY
break;
end
end
record( find(record==0))=[];
if length(record) == k
break;
end
end
end
没有合适的资源?快使用搜索试试~ 我知道了~
聚类算法基于matlab划分法k-means聚类算法【含Matlab源码 1941期】.zip
共4个文件
m:2个
jpg:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 74 浏览量
2022-07-07
20:04:53
上传
评论 3
收藏 44KB ZIP 举报
温馨提示
CSDN海神之光上传的全部代码均可运行,亲测可用,尽我所能,为你服务; 1、代码压缩包内容 主函数:Untitled2.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,可私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开除Untitled2.m的其他m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博主博客文章底部QQ名片; 4.1 CSDN博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 智能优化算法聚类算法系列程序定制或科研合作方向: 4.4.1 遗传算法GA/蚁群算法ACO优化K-means 4.4.2 粒子群算法PSO/蛙跳算法SFLA优化K-means 4.4.3 灰狼算法GWO/狼群算法WPA优化K-means 4.4.4 鲸鱼算法WOA/麻雀算法SSA优化K-means 4.4.5 萤火虫算法FA/差分算法DE优化K-means
资源推荐
资源详情
资源评论
收起资源包目录
【聚类算法】基于matlab划分法k-means聚类算法【含Matlab源码 1941期】.zip (4个子文件)
【聚类算法】基于matlab划分法k-means聚类算法【含Matlab源码 1941期】
运行结果1.jpg 27KB
FunK_mean3D.m 3KB
运行结果2.jpg 24KB
Untitled2.m 1KB
共 4 条
- 1
资源评论
海神之光
- 粉丝: 3w+
- 资源: 2094
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功